summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorDarren Wihandi <65404740+fairywreath@users.noreply.github.com>2025-04-13 11:09:01 -0600
committerGitHub <noreply@github.com>2025-04-13 17:09:01 +0000
commitb9af45ff3f2288e2aa325c1d910544e368eb9538 (patch)
treed53fab6b46b88a475cba770f6a98315e1b248f87 /source
parent28006e36d92f7709f7c5ad84d50d1c5584c42508 (diff)
Fix pointer field/member access for GLSL (#6798)
* Fix pointer field access for GLSL * Add test * Fix SPIRV test * add spirv via glsl test
Diffstat (limited to 'source')
-rw-r--r--source/slang/slang-emit-glsl.cpp12
1 files changed, 10 insertions, 2 deletions
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<IRFieldAddress>(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<IRFieldAddress>(inst)->getField()));
maybeCloseParens(needClose);
return true;
}