From 3e84726f45c66b477569be9e62da71956ab78e94 Mon Sep 17 00:00:00 2001 From: Yong He Date: Mon, 21 Oct 2024 08:49:15 -0700 Subject: Fix spirv codegen for pointer to empty structs. (#5355) --- tests/spirv/ptr-empty-struct.slang | 15 +++++++++++++++ tests/spirv/ptr-unsized-array-2.slang | 25 +++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 tests/spirv/ptr-empty-struct.slang create mode 100644 tests/spirv/ptr-unsized-array-2.slang (limited to 'tests') diff --git a/tests/spirv/ptr-empty-struct.slang b/tests/spirv/ptr-empty-struct.slang new file mode 100644 index 000000000..56148592b --- /dev/null +++ b/tests/spirv/ptr-empty-struct.slang @@ -0,0 +1,15 @@ +//TEST:SIMPLE(filecheck=CHECK): -target spirv + +// CHECK: OpPtrAccessChain + +struct EmptyStruct { +}; + +[vk::push_constant] EmptyStruct* pc; + +RWStructuredBuffer outputBuffer; + +[numthreads(64)] +void ComputeMain(uint tid: SV_DispatchThreadID) { + outputBuffer[tid] = ((int*)(pc))[0]; +} \ No newline at end of file diff --git a/tests/spirv/ptr-unsized-array-2.slang b/tests/spirv/ptr-unsized-array-2.slang new file mode 100644 index 000000000..ac0911d76 --- /dev/null +++ b/tests/spirv/ptr-unsized-array-2.slang @@ -0,0 +1,25 @@ +//TEST:SIMPLE(filecheck=CHECK): -target spirv + +// CHECK-DAG: %[[cbuffer__t:[A-Za-z0-9_]+]] = OpTypeStruct %_ptr_PhysicalStorageBuffer_uint +// CHECK-DAG: %light_buffer = OpVariable %_ptr_PushConstant_[[cbuffer__t]] PushConstant + +// CHECK: OpAccessChain %_ptr_PushConstant +// CHECK-NEXT: OpLoad +// CHECK-NEXT: OpBitcast %_ptr_PhysicalStorageBuffer + +struct LightBuffer { + uint8_t lights[]; +} + +[vk::push_constant] +LightBuffer* light_buffer; + +[shader("vertex")] +float4 vertMain() : SV_Position { + return float4(light_buffer.lights[0]); +} + +[shader("fragment")] +float4 fragMain() : COLOR0 { + return float4(1.0); +} \ No newline at end of file -- cgit v1.2.3