Module: Mesa Branch: master Commit: 87391e23cf2110051c3c74281402a690b67ccc7f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=87391e23cf2110051c3c74281402a690b67ccc7f
Author: Eric Anholt <[email protected]> Date: Wed Nov 15 15:05:37 2017 -0800 broadcom/vc5: Ensure that there is always a TLB write. This should fix some GPU hangs in our (currently always single-threaded) fragment shaders, and definitely fixes assertion failures in simulation. --- src/broadcom/compiler/nir_to_vir.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/broadcom/compiler/nir_to_vir.c b/src/broadcom/compiler/nir_to_vir.c index 4b176960b0..879704aeee 100644 --- a/src/broadcom/compiler/nir_to_vir.c +++ b/src/broadcom/compiler/nir_to_vir.c @@ -1065,6 +1065,12 @@ emit_frag_end(struct v3d_compile *c) } */ + bool has_any_tlb_color_write = false; + for (int rt = 0; rt < c->fs_key->nr_cbufs; rt++) { + if (c->output_color_var[rt]) + has_any_tlb_color_write = true; + } + if (c->output_position_index != -1) { struct qinst *inst = vir_MOV_dest(c, vir_reg(QFILE_TLBU, 0), @@ -1075,7 +1081,17 @@ emit_frag_end(struct v3d_compile *c) TLB_TYPE_DEPTH | TLB_DEPTH_TYPE_PER_PIXEL | 0xffffff00); - } else if (c->s->info.fs.uses_discard) { + } else if (c->s->info.fs.uses_discard || !has_any_tlb_color_write) { + /* Emit passthrough Z if it needed to be delayed until shader + * end due to potential discards. + * + * Since (single-threaded) fragment shaders always need a TLB + * write, emit passthrouh Z if we didn't have any color + * buffers and flag us as potentially discarding, so that we + * can use Z as the TLB write. + */ + c->s->info.fs.uses_discard = true; + struct qinst *inst = vir_MOV_dest(c, vir_reg(QFILE_TLBU, 0), vir_reg(QFILE_NULL, 0)); _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
