summaryrefslogtreecommitdiffstats
path: root/tests/spirv
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-12-09 04:48:03 -0800
committerGitHub <noreply@github.com>2024-12-09 20:48:03 +0800
commit09a9d673322ebf4ca2fcb7d48f13a44e015ea33f (patch)
tree8bae8fa5718669dcbff98b8bcb29784483905f34 /tests/spirv
parent051ae8acec0a641bcaf86e7eeff35eff29e8922d (diff)
Allow pointers to existential values. (#5793)
* Fix pointer offset logic and add executable tests. * Fix. * Fix test. * Add existential ptr test. * Allow pointers to existential values. * Fix. * Fix. --------- Co-authored-by: Ellie Hermaszewska <ellieh@nvidia.com>
Diffstat (limited to 'tests/spirv')
-rw-r--r--tests/spirv/existential-ptr.slang37
-rw-r--r--tests/spirv/ptr-member-func.slang29
-rw-r--r--tests/spirv/ptr-unsized-array-3.slang29
-rw-r--r--tests/spirv/ptr-unsized-array-4.slang25
4 files changed, 120 insertions, 0 deletions
diff --git a/tests/spirv/existential-ptr.slang b/tests/spirv/existential-ptr.slang
new file mode 100644
index 000000000..66f1c64a2
--- /dev/null
+++ b/tests/spirv/existential-ptr.slang
@@ -0,0 +1,37 @@
+//TEST:COMPARE_COMPUTE(filecheck-buffer=CHECK): -vk -emit-spirv-directly -output-using-type
+//DISABLED_TEST:COMPARE_COMPUTE(filecheck-buffer=CHECK): -wgpu
+//DISABLED_TEST:COMPARE_COMPUTE(filecheck-buffer=CHECK): -d3d12
+//DISABLED_TEST:COMPARE_COMPUTE(filecheck-buffer=CHECK): -d3d11
+//DISABLED_TEST:COMPARE_COMPUTE(filecheck-buffer=CHECK): -metal
+
+interface IFoo
+{
+ int getVal();
+}
+
+struct Foo : IFoo
+{
+ int val;
+ int getVal() { return val; }
+}
+
+struct Bar : IFoo
+{
+ float val;
+ int getVal() { return (int)val + 1; }
+}
+
+//TEST_INPUT: set pFoo = ubuffer(data=[0 0 2 0 2.0f], stride=4);
+//TEST_INPUT: type_conformance Foo:IFoo = 1;
+//TEST_INPUT: type_conformance Bar:IFoo = 2;
+uniform IFoo* pFoo;
+
+//TEST_INPUT: set outputBuffer = out ubuffer(data=[0 0 0 0], stride=4);
+RWStructuredBuffer<float> outputBuffer;
+
+[numthreads(1,1,1)]
+void computeMain()
+{
+ // CHECK: 3.0
+ outputBuffer[0] = pFoo->getVal();
+} \ No newline at end of file
diff --git a/tests/spirv/ptr-member-func.slang b/tests/spirv/ptr-member-func.slang
new file mode 100644
index 000000000..0dcf572ee
--- /dev/null
+++ b/tests/spirv/ptr-member-func.slang
@@ -0,0 +1,29 @@
+//TEST:COMPARE_COMPUTE(filecheck-buffer=CHECK): -vk -emit-spirv-directly
+//DISABLED_TEST: COMPARE_COMPUTE(filecheck-buffer=CHECK): -wgpu
+//DISABLED_TEST: COMPARE_COMPUTE(filecheck-buffer=CHECK): -d3d11
+//DISABLED_TEST: COMPARE_COMPUTE(filecheck-buffer=CHECK): -d3d12
+//DISABLED_TEST: COMPARE_COMPUTE(filecheck-buffer=CHECK): -metal
+
+struct Obj
+{
+ int val;
+
+ [mutating]
+ void addOne() { val++; }
+
+ int getValPlusOne() { return val + 1; }
+}
+
+//TEST_INPUT: set pObj = ubuffer(data=[2 0 0 0], stride=4);
+uniform Obj* pObj;
+
+//TEST_INPUT: set outputBuffer = out ubuffer(data=[0 0 0 0],stride=4);
+uniform RWStructuredBuffer<uint> outputBuffer;
+
+[numthreads(1,1,1)]
+void computeMain()
+{
+ pObj->addOne();
+ // CHECK: 4
+ outputBuffer[0] = pObj->getValPlusOne();
+} \ No newline at end of file
diff --git a/tests/spirv/ptr-unsized-array-3.slang b/tests/spirv/ptr-unsized-array-3.slang
new file mode 100644
index 000000000..ffd1345ea
--- /dev/null
+++ b/tests/spirv/ptr-unsized-array-3.slang
@@ -0,0 +1,29 @@
+//TEST:COMPARE_COMPUTE(filecheck-buffer=CHECK): -vk -emit-spirv-directly
+//DISABLED_TEST: COMPARE_COMPUTE(filecheck-buffer=CHECK): -wgpu
+//DISABLED_TEST: COMPARE_COMPUTE(filecheck-buffer=CHECK): -d3d11
+//DISABLED_TEST: COMPARE_COMPUTE(filecheck-buffer=CHECK): -d3d12
+//DISABLED_TEST: COMPARE_COMPUTE(filecheck-buffer=CHECK): -metal
+
+// Test a pointer to a struct with a trailing unsized array.
+
+struct MeshStorage {
+ int foo;
+ uint64_t QuadData[];
+};
+
+//TEST_INPUT: set pStorage = ubuffer(data=[1 2 3 4 5 6 7 8],stride=4);
+uniform MeshStorage* pStorage;
+
+//TEST_INPUT: set outputBuffer = out ubuffer(data=[0 0 0 0],stride=4);
+uniform RWStructuredBuffer<uint> outputBuffer;
+
+[numthreads(1,1,1)]
+void computeMain()
+{
+ // CHECK: 5
+ // CHECK: 6
+ // CHECK: 1
+ outputBuffer[0] = (int)(pStorage.QuadData[1]&0xFFFFFFFF);
+ outputBuffer[1] = (int)(pStorage.QuadData[1]>>32);
+ outputBuffer[2] = pStorage.foo;
+} \ No newline at end of file
diff --git a/tests/spirv/ptr-unsized-array-4.slang b/tests/spirv/ptr-unsized-array-4.slang
new file mode 100644
index 000000000..561dfab22
--- /dev/null
+++ b/tests/spirv/ptr-unsized-array-4.slang
@@ -0,0 +1,25 @@
+//TEST:COMPARE_COMPUTE(filecheck-buffer=CHECK): -vk -emit-spirv-directly
+//DISABLED_TEST: COMPARE_COMPUTE(filecheck-buffer=CHECK): -wgpu
+//DISABLED_TEST: COMPARE_COMPUTE(filecheck-buffer=CHECK): -d3d11
+//DISABLED_TEST: COMPARE_COMPUTE(filecheck-buffer=CHECK): -d3d12
+//DISABLED_TEST: COMPARE_COMPUTE(filecheck-buffer=CHECK): -metal
+
+// Test a pointer to a struct that has only one field and is an unsized array.
+struct MeshStorage {
+ uint64_t QuadData[];
+};
+
+//TEST_INPUT: set pStorage = ubuffer(data=[1 2 3 4 5 6 7 8],stride=4);
+uniform MeshStorage* pStorage;
+
+//TEST_INPUT: set outputBuffer = out ubuffer(data=[0 0 0 0],stride=4);
+uniform RWStructuredBuffer<uint> outputBuffer;
+
+[numthreads(1,1,1)]
+void computeMain()
+{
+ // CHECK: 3
+ // CHECK: 4
+ outputBuffer[0] = (int)(pStorage.QuadData[1]&0xFFFFFFFF);
+ outputBuffer[1] = (int)(pStorage.QuadData[1]>>32);
+} \ No newline at end of file