summaryrefslogtreecommitdiffstats
path: root/tests/spirv/vk-buffer-pointer-1.slang
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-03-21 21:10:48 -0700
committerGitHub <noreply@github.com>2024-03-21 21:10:48 -0700
commit00474731a90add7c0aaffc3a76d713ae2cecdbbe (patch)
treea99e6cd38901de6394c973992fc5ef6b600e3f2b /tests/spirv/vk-buffer-pointer-1.slang
parent7a8ef896196ad0d7095412d8558dd9a2542874c8 (diff)
Partially implement vk_buffer_ref proposal. (#3814)
Diffstat (limited to 'tests/spirv/vk-buffer-pointer-1.slang')
-rw-r--r--tests/spirv/vk-buffer-pointer-1.slang34
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/spirv/vk-buffer-pointer-1.slang b/tests/spirv/vk-buffer-pointer-1.slang
new file mode 100644
index 000000000..7d4e5dc1c
--- /dev/null
+++ b/tests/spirv/vk-buffer-pointer-1.slang
@@ -0,0 +1,34 @@
+//TEST:SIMPLE(filecheck=CHECK): -target spirv -emit-spirv-directly -O0
+
+// Note: spirv-opt will crash on the generated spirv, so use -O0 to disable it.
+
+// CHECK: OpEntryPoint
+// CHECK: OpTypeForwardPointer
+typedef vk::BufferPointer<block_s> block_p;
+
+struct block_s
+{
+ float4 x;
+ block_p next;
+};
+
+struct TestPushConstant_t
+{
+ block_p root;
+};
+
+[[vk::push_constant]] TestPushConstant_t g_PushConstants;
+
+[shader("fragment")]
+float4 MainPs(void) : SV_Target0
+{
+#if __has_feature(hlsl_vk_buffer_pointer)
+ block_p g_p = g_PushConstants.root;
+ g_p = g_p.Get().next;
+ if ((uint64_t)g_p == 0) // Null pointer test
+ return float4(0.0, 0.0, 0.0, 0.0);
+ return g_p.Get().x;
+#else
+ return float4(0.0);
+#endif
+} \ No newline at end of file