From 8f6c6e333c06ae1c3b9f00396563c14a2ae09b4d Mon Sep 17 00:00:00 2001 From: Darren Wihandi <65404740+fairywreath@users.noreply.github.com> Date: Sun, 27 Apr 2025 14:31:34 -0600 Subject: Emit SPIRV NonReadable decoration for WTexture* (#6922) --- source/slang/slang-emit-spirv.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'source/slang/slang-emit-spirv.cpp') diff --git a/source/slang/slang-emit-spirv.cpp b/source/slang/slang-emit-spirv.cpp index d07d587e5..e4b5c2f4d 100644 --- a/source/slang/slang-emit-spirv.cpp +++ b/source/slang/slang-emit-spirv.cpp @@ -2767,6 +2767,7 @@ struct SPIRVEmitContext : public SourceEmitterBase, public SPIRVEmitSharedContex param->getDataType(), storageClass); maybeEmitPointerDecoration(varInst, param); + maybeEmitWriteOnlyImageDecoration(varInst, param); if (layout) emitVarLayout(param, varInst, layout); emitDecorations(param, getID(varInst)); @@ -5686,6 +5687,25 @@ struct SPIRVEmitContext : public SourceEmitterBase, public SPIRVEmitSharedContex maybeEmitPointerDecoration(varInst, inst->getDataType(), as(inst), inst->getOp()); } + void maybeEmitWriteOnlyImageDecoration(SpvInst* varInst, IRInst* inst) + { + auto ptrType = as(inst->getDataType()); + if (!ptrType) + return; + auto textureType = as(ptrType->getValueType()); + if (!textureType) + return; + + if (textureType->getAccess() == SLANG_RESOURCE_ACCESS_WRITE) + { + emitOpDecorate( + getSection(SpvLogicalSectionID::Annotations), + nullptr, + getID(varInst), + SpvDecorationNonReadable); + } + } + SpvInst* emitParam(SpvInstParent* parent, IRInst* inst) { auto paramSpvInst = emitOpFunctionParameter(parent, inst, inst->getFullType()); -- cgit v1.2.3