From 5bc0b63799dd23c7c1d150e83770d79bdca00a62 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Fri, 12 Jan 2018 15:35:04 -0800 Subject: [PATCH] broadcom/vc5: Use MSF to ignore discards/non-dispatched channels in loops. Prevents potential infinite loops when a non-dispatched or discarded channel never triggers the loop break condition. --- src/broadcom/compiler/nir_to_vir.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/broadcom/compiler/nir_to_vir.c b/src/broadcom/compiler/nir_to_vir.c index bc18b19f802..68e86f3a1c2 100644 --- a/src/broadcom/compiler/nir_to_vir.c +++ b/src/broadcom/compiler/nir_to_vir.c @@ -1780,7 +1780,11 @@ ntq_emit_loop(struct v3d_compile *c, nir_loop *loop) vir_PF(c, c->execute, V3D_QPU_PF_PUSHZ); - vir_BRANCH(c, V3D_QPU_BRANCH_COND_ANYA); + struct qinst *branch = vir_BRANCH(c, V3D_QPU_BRANCH_COND_ANYA); + /* Pixels that were not dispatched or have been discarded should not + * contribute to looping again. + */ + branch->qpu.branch.msfign = V3D_QPU_MSFIGN_P; vir_link_blocks(c->cur_block, c->loop_cont_block); vir_link_blocks(c->cur_block, c->loop_break_block);