Просмотр исходного кода

shader: Fix loop safety to SSA pass

ReinUsesLisp 5 лет назад
Родитель
Сommit
7ac55c2a75

+ 3 - 1
src/shader_recompiler/frontend/maxwell/structured_control_flow.cpp

@@ -750,7 +750,9 @@ private:
                 } else {
                     IR::Block* const init_block{block_pool.Create(inst_pool)};
                     IR::IREmitter ir{*init_block};
-                    ir.SetLoopSafetyVariable(this_loop_id, ir.Imm32(0x2000));
+
+                    static constexpr u32 SAFETY_THRESHOLD = 0x2000;
+                    ir.SetLoopSafetyVariable(this_loop_id, ir.Imm32(SAFETY_THRESHOLD));
 
                     if (current_block) {
                         current_block->AddBranch(init_block);

+ 1 - 1
src/shader_recompiler/ir_opt/ssa_rewrite_pass.cpp

@@ -338,7 +338,7 @@ void VisitInst(Pass& pass, IR::Block* block, IR::Inst& inst) {
         pass.WriteVariable(GotoVariable{inst.Arg(0).U32()}, block, inst.Arg(1));
         break;
     case IR::Opcode::SetLoopSafetyVariable:
-        pass.WriteVariable(LoopSafetyVariable{inst.Arg(0).U32()}, block, inst.Arg(0));
+        pass.WriteVariable(LoopSafetyVariable{inst.Arg(0).U32()}, block, inst.Arg(1));
         break;
     case IR::Opcode::SetIndirectBranchVariable:
         pass.WriteVariable(IndirectBranchVariable{}, block, inst.Arg(0));