summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2021-08-12 13:14:15 -0700
committerGitHub <noreply@github.com>2021-08-12 13:14:15 -0700
commit6406523511037987d8b8ab881aea41389afd57eb (patch)
tree79f24b6cba377340c2f4d3dcf9fed78fc586f3e0 /tests
parent389d21d982da34815b65b10cae63088c397eecc8 (diff)
Further implementation of SPIRV direct emit. (#1920)
* Further implementation of SPIRV direct emit. This change implements: - Struct, Vector, Matrix and Unsized Array types. - Basic arithmetic opcodes, vector construct, swizzle etc. - getElementPtr, getElement, fieldAddress, extractField. - SPIRV target intrinsics with SPIRV asm code in stdlib. - RWStructuredBuffer and StructuredBuffer. - Pointer storage class propagation. - Control flow. * Fix.
Diffstat (limited to 'tests')
-rw-r--r--tests/spirv/direct-spirv-compute-simple.slang23
-rw-r--r--tests/spirv/direct-spirv-compute-simple.slang.expected.txt4
-rw-r--r--tests/spirv/direct-spirv-control-flow-2.slang47
-rw-r--r--tests/spirv/direct-spirv-control-flow-2.slang.expected.txt5
-rw-r--r--tests/spirv/direct-spirv-control-flow.slang30
-rw-r--r--tests/spirv/direct-spirv-control-flow.slang.expected.txt4
6 files changed, 113 insertions, 0 deletions
diff --git a/tests/spirv/direct-spirv-compute-simple.slang b/tests/spirv/direct-spirv-compute-simple.slang
new file mode 100644
index 000000000..39b9074ed
--- /dev/null
+++ b/tests/spirv/direct-spirv-compute-simple.slang
@@ -0,0 +1,23 @@
+// direct-spirv-compute-simple.slang
+
+//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -xslang -emit-spirv-directly
+
+// Test runinng a shader generated from direct SPIR-V emit.
+
+//TEST_INPUT:set resultBuffer = out ubuffer(data=[0 0 0 0], stride=4)
+RWStructuredBuffer<uint> resultBuffer;
+
+[numthreads(4,1,1)]
+void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID)
+{
+ uint threadId = dispatchThreadID.x;
+ uint result = threadId + 1;
+ result = result - 1;
+ result = result * 2;
+ result = result / 2;
+ result = result % 3;
+ result = (result ^ 7);
+ result = (result & 7);
+ result = (result | 8);
+ resultBuffer[threadId] = result;
+}
diff --git a/tests/spirv/direct-spirv-compute-simple.slang.expected.txt b/tests/spirv/direct-spirv-compute-simple.slang.expected.txt
new file mode 100644
index 000000000..4fc6bca7a
--- /dev/null
+++ b/tests/spirv/direct-spirv-compute-simple.slang.expected.txt
@@ -0,0 +1,4 @@
+F
+E
+D
+F \ No newline at end of file
diff --git a/tests/spirv/direct-spirv-control-flow-2.slang b/tests/spirv/direct-spirv-control-flow-2.slang
new file mode 100644
index 000000000..cc908100e
--- /dev/null
+++ b/tests/spirv/direct-spirv-control-flow-2.slang
@@ -0,0 +1,47 @@
+// direct-spirv-control-flow-2.slang
+
+//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -output-using-type -xslang -emit-spirv-directly
+
+// Test direct SPIR-V emit on control flows.
+
+//TEST_INPUT:set resultBuffer = out ubuffer(data=[0 0 0 0], stride=4)
+RWStructuredBuffer<uint> resultBuffer;
+
+uint test(uint p)
+{
+ int result = 0;
+ for (int i = 0; i < 5; i++)
+ {
+ result += i*2;
+ }
+ switch (p)
+ {
+ case 0:
+ result = result - 1;
+ break;
+ case 1:
+ result = result + 1;
+ break;
+ default:
+ result = result * 2;
+ break;
+ }
+ if (p > 2)
+ {
+ switch (p)
+ {
+ case 3:
+ result++;
+ break;
+ }
+ }
+ return result;
+}
+
+[numthreads(4,1,1)]
+void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID)
+{
+ uint threadId = dispatchThreadID.x;
+ uint result = test(threadId);
+ resultBuffer[threadId] = result;
+}
diff --git a/tests/spirv/direct-spirv-control-flow-2.slang.expected.txt b/tests/spirv/direct-spirv-control-flow-2.slang.expected.txt
new file mode 100644
index 000000000..36929d66f
--- /dev/null
+++ b/tests/spirv/direct-spirv-control-flow-2.slang.expected.txt
@@ -0,0 +1,5 @@
+type: uint32_t
+19
+21
+40
+41
diff --git a/tests/spirv/direct-spirv-control-flow.slang b/tests/spirv/direct-spirv-control-flow.slang
new file mode 100644
index 000000000..9efddeb12
--- /dev/null
+++ b/tests/spirv/direct-spirv-control-flow.slang
@@ -0,0 +1,30 @@
+// direct-spirv-control-flow.slang
+
+//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -xslang -emit-spirv-directly
+
+// Test direct SPIRV emit on control fl.
+
+//TEST_INPUT:set resultBuffer = out ubuffer(data=[0 0 0 0], stride=4)
+RWStructuredBuffer<uint> resultBuffer;
+
+uint test(uint p)
+{
+ int result = 0;
+ if (p == 0)
+ {
+ result = 5;
+ }
+ else
+ {
+ result = 6;
+ }
+ return result;
+}
+
+[numthreads(4,1,1)]
+void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID)
+{
+ uint threadId = dispatchThreadID.x;
+ uint result = test(threadId);
+ resultBuffer[threadId] = result;
+}
diff --git a/tests/spirv/direct-spirv-control-flow.slang.expected.txt b/tests/spirv/direct-spirv-control-flow.slang.expected.txt
new file mode 100644
index 000000000..c0bcc1c4a
--- /dev/null
+++ b/tests/spirv/direct-spirv-control-flow.slang.expected.txt
@@ -0,0 +1,4 @@
+5
+6
+6
+6