summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-05-07 21:50:41 -0700
committerGitHub <noreply@github.com>2024-05-07 21:50:41 -0700
commiteb3970897049269602cc18cee644e437c0aff928 (patch)
tree09c9b5c1f5d237563723d5d6a2c4050d996b9e32 /source
parent997f040f48b5c34e20ad6b0f512bb9d1ae6e6128 (diff)
Make sure pointer local vars have `AliasedPointer` decoration. (#4132)
Diffstat (limited to 'source')
-rw-r--r--source/slang/slang-emit-spirv.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/source/slang/slang-emit-spirv.cpp b/source/slang/slang-emit-spirv.cpp
index a7cdfc8a3..8219d3534 100644
--- a/source/slang/slang-emit-spirv.cpp
+++ b/source/slang/slang-emit-spirv.cpp
@@ -4077,6 +4077,8 @@ struct SPIRVEmitContext
return;
if (ptrType->getAddressSpace() == SpvStorageClassPhysicalStorageBuffer)
{
+ // If inst has a pointer type with PhysicalStorageBuffer address space,
+ // emit AliasedPointer decoration.
emitOpDecorate(
getSection(SpvLogicalSectionID::Annotations),
nullptr,
@@ -4084,6 +4086,23 @@ struct SPIRVEmitContext
(as<IRVar>(inst) ? SpvDecorationAliasedPointer : SpvDecorationAliased)
);
}
+ else
+ {
+ // If the pointee type is a pointer with StorageBuffer address space,
+ // we also want to emit AliasedPointer decoration.
+ ptrType = as<IRPtrType>(ptrType->getValueType());
+ if (!ptrType)
+ return;
+ if (ptrType->getAddressSpace() == SpvStorageClassPhysicalStorageBuffer)
+ {
+ emitOpDecorate(
+ getSection(SpvLogicalSectionID::Annotations),
+ nullptr,
+ varInst,
+ (as<IRVar>(inst) ? SpvDecorationAliasedPointer : SpvDecorationAliased)
+ );
+ }
+ }
}
SpvInst* emitParam(SpvInstParent* parent, IRInst* inst)