summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source/slang/slang-emit-spirv.cpp2
-rw-r--r--tests/spirv/global-pointer.slang14
2 files changed, 15 insertions, 1 deletions
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<IRVar>(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