diff options
| author | Anders Leino <aleino@nvidia.com> | 2024-11-26 19:02:59 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-11-26 12:02:59 -0500 |
| commit | 915e05dcc4c03492087c2d3126ba01dff9ebe1be (patch) | |
| tree | e69ff25b99a179ffc98c9b2037fb658788af4c94 | |
| parent | 9e21cd4a7552390aff9a1421f2c7f6666876d0bc (diff) | |
WGSL: Fix issue where swizzle L-values are generated (#5682)
* wgsl: Do not generate L-value swizzle expressions
* Enable tests/language-feature/swizzles/matrix-swizzle-write-*.slang
The following tests are enabled
- tests/language-feature/swizzles/matrix-swizzle-write-swizzle.slang
- tests/language-feature/swizzles/matrix-swizzle-write-array.slang
This closes #5603.
4 files changed, 6 insertions, 10 deletions
diff --git a/source/slang/slang-emit-c-like.cpp b/source/slang/slang-emit-c-like.cpp index 790162c5b..f10147f0d 100644 --- a/source/slang/slang-emit-c-like.cpp +++ b/source/slang/slang-emit-c-like.cpp @@ -1661,7 +1661,7 @@ bool CLikeSourceEmitter::shouldFoldInstIntoUseSites(IRInst* inst) } } - // For cuda and cpu targets don't support swizzle on the left-hand-side + // The cpp, cuda and wgsl targets don't support swizzle on the left-hand-side // variable, e.g. vec4.xy = vec2 is not allowed. // Therefore, we don't want to fold the right-hand-side expression. // Instead, the right-hand-side expression should be generated as a separable @@ -1669,7 +1669,8 @@ bool CLikeSourceEmitter::shouldFoldInstIntoUseSites(IRInst* inst) // variable per element. E.g. vec4.x = vec2.x; vec4.y = vec2.y. if (as<IRSwizzledStore>(user)) { - if (isCPUTarget(getTargetReq()) || isCUDATarget(getTargetReq())) + if (isCPUTarget(getTargetReq()) || isCUDATarget(getTargetReq()) || + isWGPUTarget(getTargetReq())) return false; } @@ -3123,9 +3124,10 @@ void CLikeSourceEmitter::_emitInst(IRInst* inst) case kIROp_SwizzledStore: { - // cpp and cuda target don't support swizzle on the left handside, so we + // cpp, cuda and wgsl targets don't support swizzle on the left handside, so we // have to assign the element one by one. - if (isCPUTarget(getTargetReq()) || isCUDATarget(getTargetReq())) + if (isCPUTarget(getTargetReq()) || isCUDATarget(getTargetReq()) || + isWGPUTarget(getTargetReq())) { _emitSwizzleStorePerElement(inst); } diff --git a/tests/expected-failure-github.txt b/tests/expected-failure-github.txt index 862f3528e..df8962382 100644 --- a/tests/expected-failure-github.txt +++ b/tests/expected-failure-github.txt @@ -17,5 +17,3 @@ tests/language-feature/enums/strongly-typed-id.slang.1 syn (wgpu) tests/language-feature/generics/tuple.slang.1 syn (wgpu) tests/language-feature/generics/variadic-0.slang.4 syn (wgpu) tests/language-feature/shader-params/interface-shader-param-ordinary.slang.4 syn (wgpu) -tests/language-feature/swizzles/matrix-swizzle-write-array.slang.3 syn (wgpu) -tests/language-feature/swizzles/matrix-swizzle-write-swizzle.slang.3 syn (wgpu) diff --git a/tests/language-feature/swizzles/matrix-swizzle-write-array.slang b/tests/language-feature/swizzles/matrix-swizzle-write-array.slang index ea3fd2ffa..616a19b19 100644 --- a/tests/language-feature/swizzles/matrix-swizzle-write-array.slang +++ b/tests/language-feature/swizzles/matrix-swizzle-write-array.slang @@ -1,8 +1,6 @@ //TEST(compute):COMPARE_COMPUTE: -compute -shaderobj -output-using-type //TEST(compute, vulkan):COMPARE_COMPUTE: -vk -compute -shaderobj -output-using-type //TEST(compute):COMPARE_COMPUTE:-slang -shaderobj -mtl -output-using-type -// WGSL: Assign to swizzle expression not allowed #5603 -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-wgpu // Test that matrix swizzle writes work correctly // Matrix swizzles can either be one or zero indexed diff --git a/tests/language-feature/swizzles/matrix-swizzle-write-swizzle.slang b/tests/language-feature/swizzles/matrix-swizzle-write-swizzle.slang index 1adde39dd..f1ad7bc6a 100644 --- a/tests/language-feature/swizzles/matrix-swizzle-write-swizzle.slang +++ b/tests/language-feature/swizzles/matrix-swizzle-write-swizzle.slang @@ -1,8 +1,6 @@ //TEST(compute):COMPARE_COMPUTE: -compute -shaderobj -output-using-type //TEST(compute, vulkan):COMPARE_COMPUTE: -vk -compute -shaderobj -output-using-type //TEST(compute):COMPARE_COMPUTE:-slang -shaderobj -mtl -output-using-type -// WGSL: Assign to swizzle expression not allowed #5603 -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-wgpu // Test that writing to swizzles of matrix swizzles works correctly |
