From 6d917a02bb307300ac14c8b028c47fcdcc07100b Mon Sep 17 00:00:00 2001 From: Yong He Date: Wed, 8 May 2024 10:41:52 -0700 Subject: Fix NonUniformResourceIndex legalization for SPIRV. (#4133) * Fix NonUniformResourceIndex legalization for SPIRV. * Update gh-4131.slang --- source/slang/slang-ir-spirv-legalize.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'source') diff --git a/source/slang/slang-ir-spirv-legalize.cpp b/source/slang/slang-ir-spirv-legalize.cpp index 311ff0e89..48a46f962 100644 --- a/source/slang/slang-ir-spirv-legalize.cpp +++ b/source/slang/slang-ir-spirv-legalize.cpp @@ -1215,7 +1215,7 @@ struct SPIRVLegalizationContext : public SourceEmitterBase break; case kIROp_GetElementPtr: // Ignore when `NonUniformResourceIndex` is not on the index - if (user->getOperand(0)->getOp() != kIROp_NonUniformResourceIndex) + if (user->getOperand(1) == inst) { // Replace gep(pArray, nonUniformRes(x)), into nonUniformRes(gep(pArray, x)) newUser = builder.emitElementAddress(user->getFullType(), user->getOperand(0), inst->getOperand(0)); @@ -1282,12 +1282,10 @@ struct SPIRVLegalizationContext : public SourceEmitterBase { IRBuilder builder(operand); builder.addSPIRVNonUniformResourceDecoration(operand); - inst->replaceUsesWith(operand); - inst->removeAndDeallocate(); } + inst->replaceUsesWith(operand); + inst->removeAndDeallocate(); } - nonUniformResourceIndexInst->removeFromParent(); - m_instsToRemove.add(nonUniformResourceIndexInst); } void processImageSubscript(IRImageSubscript* subscript) -- cgit v1.2.3