diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/spirv/array-stride-decoration-1.slang | 29 | ||||
| -rw-r--r-- | tests/spirv/array-stride-decoration-2.slang | 29 | ||||
| -rw-r--r-- | tests/spirv/array-stride-decoration-3.slang | 31 | ||||
| -rw-r--r-- | tests/spirv/array-stride-decoration-4.slang | 34 |
4 files changed, 123 insertions, 0 deletions
diff --git a/tests/spirv/array-stride-decoration-1.slang b/tests/spirv/array-stride-decoration-1.slang new file mode 100644 index 000000000..5b0f7bc27 --- /dev/null +++ b/tests/spirv/array-stride-decoration-1.slang @@ -0,0 +1,29 @@ +//TEST:SIMPLE(filecheck=CHECK):-target spirv -entry computeMain -stage compute -emit-spirv-directly + +// The test check that if an array is used in function scope, we don't decorate it with array stride decoration. + +// The reason we have to check the SPIRV instead of using spirv-val is because slang uses spv1.6 as the target_env, +// but the issue only occurs when the target_env is vulkan1.2+ + +// CHECK: OpEntryPoint +// CHECK-NOT: OpDecorate %_arr_int_int_2 ArrayStride +struct S +{ + int[2] a; +} + +StructuredBuffer<S> input; + +RWStructuredBuffer<int> output; + +[shader("compute")] +void computeMain(uint3 id : SV_DispatchThreadID) +{ + S s; + s.a = input[0].a; + + for (int i = 0; i < 1; i++) + { + output[i] = s.a[i]; + } +} diff --git a/tests/spirv/array-stride-decoration-2.slang b/tests/spirv/array-stride-decoration-2.slang new file mode 100644 index 000000000..702004657 --- /dev/null +++ b/tests/spirv/array-stride-decoration-2.slang @@ -0,0 +1,29 @@ +//TEST:SIMPLE(filecheck=CHECK):-target spirv -entry computeMain -stage compute -emit-spirv-directly + +// The test check that if an array is used in thread-local, we don't decorate it with array stride decoration. + +// The reason we have to check the SPIRV instead of using spirv-val is because slang uses spv1.6 as the target_env, +// but the issue only occurs when the target_env is vulkan1.2+ + +// CHECK: OpEntryPoint +// CHECK-NOT: OpDecorate %_arr_int_int_2 ArrayStride +struct S +{ + int[2] a; +} + +ParameterBlock<S> input; + +static S s; + +RWStructuredBuffer<int> output; + +[shader("compute")] +void computeMain(uint3 id : SV_DispatchThreadID) +{ + s.a = input.a; + for (int i = 0; i < 1; i++) + { + output[i] = s.a[i]; + } +} diff --git a/tests/spirv/array-stride-decoration-3.slang b/tests/spirv/array-stride-decoration-3.slang new file mode 100644 index 000000000..79a6ef777 --- /dev/null +++ b/tests/spirv/array-stride-decoration-3.slang @@ -0,0 +1,31 @@ +//TEST:SIMPLE(filecheck=CHECK):-target spirv -entry computeMain -stage compute -emit-spirv-directly + +// The test check that if an array is used in function parameter, we don't decorate it with array stride decoration. + +// The reason we have to check the SPIRV instead of using spirv-val is because slang uses spv1.6 as the target_env, +// but the issue only occurs when the target_env is vulkan1.2+ + +// CHECK: OpEntryPoint +// CHECK-NOT: OpDecorate %_arr_int_int_2_0 ArrayStride +struct S +{ + int[2] a; +} + +ParameterBlock<S> input; + +RWStructuredBuffer<int> output; + +void myfunc(int[2] a) +{ + for (int i = 0; i < 2; i++) + { + output[i] = a[i]; + } +} + +[shader("compute")] +void computeMain(uint3 id : SV_DispatchThreadID) +{ + myfunc(input.a); +} diff --git a/tests/spirv/array-stride-decoration-4.slang b/tests/spirv/array-stride-decoration-4.slang new file mode 100644 index 000000000..34de071ad --- /dev/null +++ b/tests/spirv/array-stride-decoration-4.slang @@ -0,0 +1,34 @@ +//TEST:SIMPLE(filecheck=CHECK):-target spirv -entry computeMain -stage compute -emit-spirv-directly + +// The test check that if an array is used in workgroup, we don't decorate it with array stride decoration. + +// The reason we have to check the SPIRV instead of using spirv-val is because slang uses spv1.6 as the target_env, +// but the issue only occurs when the target_env is vulkan1.2+ + +// CHECK: OpEntryPoint +// CHECK-NOT: OpDecorate %_arr_int_int_2 ArrayStride +struct S +{ + int[2] a; +} + +ParameterBlock<S> input; + +RWStructuredBuffer<int> output; + +groupshared S s; + + +[shader("compute")] +void computeMain(uint3 id : SV_DispatchThreadID) +{ + if (id.x == 0) + { + for (int i = 0; i < 2; ++i) + { + s.a[i] = input.a[i]; + } + } + GroupMemoryBarrier(); + output[id.x] = s.a[id.x]; +} |
