From b02771f235909fb9399bd3969dbea0d4115ae016 Mon Sep 17 00:00:00 2001 From: 16-Bit-Dog <67922228+16-Bit-Dog@users.noreply.github.com> Date: Mon, 28 Apr 2025 23:06:16 -0400 Subject: Support use of `this` with Mesh Shader Outputs (`IRMeshOutputRef`) (#6920) * Support `this` use of `IRMeshOutputRef` * Fix SPIR-V val error There was a type mismatch causing a spir-v failiure: `store(var, var)` instead of `store(var, load(var))` --- source/slang/slang-ir-glsl-legalize.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'source') 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(s)) + { + // Handles the case where a `this` points to a IRMeshOutputRef. + auto t = as(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(s)) { SLANG_UNEXPECTED("Swizzled store to a non-address ScalarizedVal"); -- cgit v1.2.3