From 77ecad28cfb0d17b8d3a93fb7c08be4217eb2433 Mon Sep 17 00:00:00 2001 From: Yong He Date: Thu, 5 Sep 2024 11:24:43 -0700 Subject: Fix spirv emit for global pointer variable. (#5009) --- source/slang/slang-emit-spirv.cpp | 2 +- tests/spirv/global-pointer.slang | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 tests/spirv/global-pointer.slang diff --git a/source/slang/slang-emit-spirv.cpp b/source/slang/slang-emit-spirv.cpp index bb1f1378f..9088e959a 100644 --- a/source/slang/slang-emit-spirv.cpp +++ b/source/slang/slang-emit-spirv.cpp @@ -4572,7 +4572,7 @@ struct SPIRVEmitContext getSection(SpvLogicalSectionID::Annotations), nullptr, varInst, - (as(inst) ? SpvDecorationAliasedPointer : SpvDecorationAliased) + (inst->getOp() == kIROp_GlobalVar || inst->getOp() == kIROp_Var ? SpvDecorationAliasedPointer : SpvDecorationAliased) ); } } diff --git a/tests/spirv/global-pointer.slang b/tests/spirv/global-pointer.slang new file mode 100644 index 000000000..e373920eb --- /dev/null +++ b/tests/spirv/global-pointer.slang @@ -0,0 +1,14 @@ +//TEST:SIMPLE(filecheck=CHECK): -target spirv + +// CHECK: OpDecorate %g_Instance AliasedPointer + +static int* g_Instance = nullptr; + +[vk::push_constant] int* dest; + +[numthreads(1)] +void ComputeMain(int tid : SV_DispatchThreadID) { + // int* g_Instance = nullptr; + if (tid % 2 == 0) g_Instance = dest; + if (g_Instance) g_Instance[tid] = 123; +} \ No newline at end of file -- cgit v1.2.3