diff --git a/rpcsx/gpu/lib/gcn-shader/src/GcnConverter.cpp b/rpcsx/gpu/lib/gcn-shader/src/GcnConverter.cpp index 52ce627..874b510 100644 --- a/rpcsx/gpu/lib/gcn-shader/src/GcnConverter.cpp +++ b/rpcsx/gpu/lib/gcn-shader/src/GcnConverter.cpp @@ -1617,9 +1617,41 @@ 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(); + } } function = ir::clone(function, context, importer);