diff options
Diffstat (limited to 'source/slang/slang-emit-spirv.cpp')
| -rw-r--r-- | source/slang/slang-emit-spirv.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
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<IRVar>(inst), inst->getOp()); } + void maybeEmitWriteOnlyImageDecoration(SpvInst* varInst, IRInst* inst) + { + auto ptrType = as<IRPtrTypeBase>(inst->getDataType()); + if (!ptrType) + return; + auto textureType = as<IRTextureType>(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()); |
