diff --git a/src/gallium/drivers/r600/sfn/sfn_shader.cpp b/src/gallium/drivers/r600/sfn/sfn_shader.cpp index d30e409da92..ef8014a4131 100644 --- a/src/gallium/drivers/r600/sfn/sfn_shader.cpp +++ b/src/gallium/drivers/r600/sfn/sfn_shader.cpp @@ -1439,7 +1439,6 @@ void Shader::InstructionChain::visit(AluInstr *instr) if (last_ssbo_instr) instr->add_required_instr(last_ssbo_instr); } - } void @@ -1448,6 +1447,13 @@ Shader::InstructionChain::visit(ScratchIOInstr *instr) apply(instr, &last_scratch_instr); } +void +Shader::InstructionChain::visit(IfInstr *instr) +{ + if (last_group_barrier) + instr->predicate()->add_required_instr(last_group_barrier); +} + void Shader::InstructionChain::visit(GDSInstr *instr) { diff --git a/src/gallium/drivers/r600/sfn/sfn_shader.h b/src/gallium/drivers/r600/sfn/sfn_shader.h index d4502da0d88..3718821ae59 100644 --- a/src/gallium/drivers/r600/sfn/sfn_shader.h +++ b/src/gallium/drivers/r600/sfn/sfn_shader.h @@ -380,7 +380,6 @@ private: void visit(FetchInstr *instr) override { (void)instr; } void visit(Block *instr) override { (void)instr; } void visit(ControlFlowInstr *instr) override { (void)instr; } - void visit(IfInstr *instr) override { (void)instr; } void visit(StreamOutInstr *instr) override { (void)instr; } void visit(MemRingOutInstr *instr) override { (void)instr; } void visit(EmitVertexInstr *instr) override { (void)instr; } @@ -388,6 +387,7 @@ private: void visit(LDSAtomicInstr *instr) override { (void)instr; } void visit(LDSReadInstr *instr) override { (void)instr; } + void visit(IfInstr *instr) override; void visit(AluInstr *instr) override; void visit(ScratchIOInstr *instr) override; void visit(GDSInstr *instr) override;