diff options
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/slang-ir-glsl-legalize.cpp | 10 |
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"); |
