From 76cf146a328ba3c1f42407865fc9040485b88fb5 Mon Sep 17 00:00:00 2001 From: DH Date: Thu, 14 Nov 2024 19:47:35 +0300 Subject: [PATCH] gpu: unimplemented semantic is not critical error --- rpcsx/gpu/lib/gcn-shader/src/GcnConverter.cpp | 37 ++++++++++++++++++- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/rpcsx/gpu/lib/gcn-shader/src/GcnConverter.cpp b/rpcsx/gpu/lib/gcn-shader/src/GcnConverter.cpp index 52ce6275a..6376c18f5 100644 --- a/rpcsx/gpu/lib/gcn-shader/src/GcnConverter.cpp +++ b/rpcsx/gpu/lib/gcn-shader/src/GcnConverter.cpp @@ -1617,9 +1617,42 @@ static void instructionsToSpv(GcnConverter &converter, gcn::Import &importer, auto function = semanticModuleInfo.findSemanticOf(inst.getInstId()); if (function == nullptr) { + std::println(std::cerr, "unimplemented semantic: "); inst.print(std::cerr, context.ns); - std::cerr << "\n"; - rx::die("unimplemented semantic"); + std::println(std::cerr); + + std::vector workList; + std::set removed; + workList.push_back(inst); + + while (!workList.empty()) { + auto inst = workList.back(); + workList.pop_back(); + + if (!removed.insert(inst).second) { + continue; + } + + std::println(std::cerr, "removing "); + inst.print(std::cerr, context.ns); + std::println(std::cerr); + + if (auto value = inst.cast()) { + for (auto &use : value.getUseList()) { + if (removed.contains(use.user)) { + continue; + } + + workList.push_back(use.user); + } + + value.replaceAllUsesWith(builder.createSpvUndef( + inst.getLocation(), value.getOperand(0).getAsValue())); + } + + inst.remove(); + } + continue; } function = ir::clone(function, context, importer);