summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/slang/slang-ir-glsl-legalize.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/source/slang/slang-ir-glsl-legalize.cpp b/source/slang/slang-ir-glsl-legalize.cpp
index 729802f4e..1223ea91c 100644
--- a/source/slang/slang-ir-glsl-legalize.cpp
+++ b/source/slang/slang-ir-glsl-legalize.cpp
@@ -2810,6 +2810,16 @@ static void legalizeMeshOutputParam(
builder->setInsertAfter(c);
assign(builder, d, ScalarizedVal::value(builder->emitLoad(tmp)));
}
+ else if (const auto load = as<IRLoad>(s))
+ {
+ // Handles the case where a `this` points to a IRMeshOutputRef.
+ auto t = as<IRPtrType>(load->getPtr()->getDataType())->getValueType();
+ auto tmp = builder->emitVar(t);
+ assign(builder, ScalarizedVal::address(tmp), d);
+
+ s->replaceUsesWith(builder->emitLoad(tmp));
+ s->removeAndDeallocate();
+ }
else if (const auto swiz = as<IRSwizzledStore>(s))
{
SLANG_UNEXPECTED("Swizzled store to a non-address ScalarizedVal");