diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/spirv/vk-buffer-pointer-1.slang | 34 | ||||
| -rw-r--r-- | tests/spirv/vk-buffer-pointer.slang | 27 |
2 files changed, 61 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 diff --git a/tests/spirv/vk-buffer-pointer.slang b/tests/spirv/vk-buffer-pointer.slang new file mode 100644 index 000000000..9fcc4deb2 --- /dev/null +++ b/tests/spirv/vk-buffer-pointer.slang @@ -0,0 +1,27 @@ +//TEST:SIMPLE(filecheck=CHECK): -target spirv -emit-spirv-directly + +// CHECK: OpEntryPoint + +struct Globals_s +{ + float4 g_vSomeConstantA; + float4 g_vTestFloat4; + float4 g_vSomeConstantB; +}; + +typedef vk::BufferPointer<Globals_s> Globals_p; + +struct TestPushConstant_t +{ + Globals_p m_nBufferDeviceAddress; +}; + +[[vk::push_constant]] TestPushConstant_t g_PushConstants; + +[shader("fragment")] +float4 MainPs(void) : SV_Target0 +{ + float4 vTest = float4(1.0,0.0,0.0,0.0); + g_PushConstants.m_nBufferDeviceAddress.Get().g_vTestFloat4 = vTest; + return vTest; +}
\ No newline at end of file |
