From b9af45ff3f2288e2aa325c1d910544e368eb9538 Mon Sep 17 00:00:00 2001 From: Darren Wihandi <65404740+fairywreath@users.noreply.github.com> Date: Sun, 13 Apr 2025 11:09:01 -0600 Subject: Fix pointer field/member access for GLSL (#6798) * Fix pointer field access for GLSL * Add test * Fix SPIRV test * add spirv via glsl test --- source/slang/slang-emit-glsl.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'source') diff --git a/source/slang/slang-emit-glsl.cpp b/source/slang/slang-emit-glsl.cpp index ac98a0a3c..51a22c4e2 100644 --- a/source/slang/slang-emit-glsl.cpp +++ b/source/slang/slang-emit-glsl.cpp @@ -2139,7 +2139,15 @@ bool GLSLSourceEmitter::tryEmitInstExprImpl(IRInst* inst, const EmitOpInfo& inOu EmitOpInfo outerPrec = inOuterPrec; bool needClose = maybeEmitParens(outerPrec, prec); emitOperand(inst->getOperand(0), prec); - m_writer->emit("._data"); + + // `_data` member extraction is not required for `FieldAddress` instructions because + // it is already emitted alongside the user requested field during `FieldAddress` + // emit. See `kIROp_FieldAddress` case below. + if (!as(addr)) + { + m_writer->emit("._data"); + } + maybeCloseParens(needClose); return true; } @@ -2158,7 +2166,7 @@ bool GLSLSourceEmitter::tryEmitInstExprImpl(IRInst* inst, const EmitOpInfo& inOu bool needClose = maybeEmitParens(outerPrec, prec); emitOperand(inst->getOperand(0), prec); m_writer->emit("._data."); - emitOperand(inst->getOperand(1), getInfo(EmitOp::General)); + m_writer->emit(getName(as(inst)->getField())); maybeCloseParens(needClose); return true; } -- cgit v1.2.3