summaryrefslogtreecommitdiffstats
path: root/tests/spirv
diff options
context:
space:
mode:
Diffstat (limited to 'tests/spirv')
-rw-r--r--tests/spirv/array-stride-decoration-1.slang29
-rw-r--r--tests/spirv/array-stride-decoration-2.slang29
-rw-r--r--tests/spirv/array-stride-decoration-3.slang31
-rw-r--r--tests/spirv/array-stride-decoration-4.slang34
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];
+}