diff options
author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2021-03-27 06:54:32 +0100 |
---|---|---|
committer | ameerj <52414509+ameerj@users.noreply.github.com> | 2021-07-23 03:51:24 +0200 |
commit | a806b29cb9bb48c4a9628700946231c9150463b5 (patch) | |
tree | 334b292d73c9404a84d0bc719df4bea45e61530f | |
parent | shader: Fix TXQ (diff) | |
download | yuzu-a806b29cb9bb48c4a9628700946231c9150463b5.tar yuzu-a806b29cb9bb48c4a9628700946231c9150463b5.tar.gz yuzu-a806b29cb9bb48c4a9628700946231c9150463b5.tar.bz2 yuzu-a806b29cb9bb48c4a9628700946231c9150463b5.tar.lz yuzu-a806b29cb9bb48c4a9628700946231c9150463b5.tar.xz yuzu-a806b29cb9bb48c4a9628700946231c9150463b5.tar.zst yuzu-a806b29cb9bb48c4a9628700946231c9150463b5.zip |
-rw-r--r-- | src/shader_recompiler/frontend/ir/ir_emitter.cpp | 1 | ||||
-rw-r--r-- | src/shader_recompiler/frontend/maxwell/structured_control_flow.cpp | 9 |
2 files changed, 7 insertions, 3 deletions
diff --git a/src/shader_recompiler/frontend/ir/ir_emitter.cpp b/src/shader_recompiler/frontend/ir/ir_emitter.cpp index f281c023f..82613f607 100644 --- a/src/shader_recompiler/frontend/ir/ir_emitter.cpp +++ b/src/shader_recompiler/frontend/ir/ir_emitter.cpp @@ -83,6 +83,7 @@ void IREmitter::SelectionMerge(Block* merge_block) { } void IREmitter::Return() { + block->SetReturn(); Inst(Opcode::Return); } diff --git a/src/shader_recompiler/frontend/maxwell/structured_control_flow.cpp b/src/shader_recompiler/frontend/maxwell/structured_control_flow.cpp index 79e344986..9d4688390 100644 --- a/src/shader_recompiler/frontend/maxwell/structured_control_flow.cpp +++ b/src/shader_recompiler/frontend/maxwell/structured_control_flow.cpp @@ -152,7 +152,9 @@ std::string DumpTree(const Tree& tree, u32 indentation = 0) { for (auto stmt = tree.begin(); stmt != tree.end(); ++stmt) { switch (stmt->type) { case StatementType::Code: - ret += fmt::format("{} Block {:04x};\n", indent, stmt->code->LocationBegin()); + ret += fmt::format("{} Block {:04x} -> {:04x} (0x{:016x});\n", indent, + stmt->code->LocationBegin(), stmt->code->LocationEnd(), + reinterpret_cast<uintptr_t>(stmt->code)); break; case StatementType::Goto: ret += fmt::format("{} if ({}) goto L{};\n", indent, DumpExpr(stmt->cond), @@ -749,8 +751,9 @@ private: current_block = block_pool.Create(inst_pool); block_list.push_back(current_block); } - IR::IREmitter{*current_block}.DemoteToHelperInvocation(continue_block); - current_block = nullptr; + IR::Block* demote_block{MergeBlock(parent, stmt)}; + IR::IREmitter{*current_block}.DemoteToHelperInvocation(demote_block); + current_block = demote_block; break; } default: |