From: Marek Olšák Date: Thu, 3 May 2018 01:03:44 +0000 (-0400) Subject: radeonsi: disable primitive binning for all blitter ops X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b936f9aa327ff8e10422b90cdb4bc56d8f9e8da5;p=mesa.git radeonsi: disable primitive binning for all blitter ops same as amdvlk. Tested-by: Dieter Nützel Reviewed-by: Nicolai Hähnle --- diff --git a/src/gallium/drivers/radeonsi/si_blit.c b/src/gallium/drivers/radeonsi/si_blit.c index 6f4cd1f9044..fe059b36577 100644 --- a/src/gallium/drivers/radeonsi/si_blit.c +++ b/src/gallium/drivers/radeonsi/si_blit.c @@ -75,10 +75,20 @@ void si_blitter_begin(struct si_context *sctx, enum si_blitter_op op) if (op & SI_DISABLE_RENDER_COND) sctx->render_cond_force_off = true; + + if (sctx->screen->dpbb_allowed) { + sctx->dpbb_force_off = true; + si_mark_atom_dirty(sctx, &sctx->atoms.s.dpbb_state); + } } void si_blitter_end(struct si_context *sctx) { + if (sctx->screen->dpbb_allowed) { + sctx->dpbb_force_off = false; + si_mark_atom_dirty(sctx, &sctx->atoms.s.dpbb_state); + } + sctx->render_cond_force_off = false; /* Restore shader pointers because the VS blit shader changed all diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h index 6917d5e6068..5d1671fb87f 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.h +++ b/src/gallium/drivers/radeonsi/si_pipe.h @@ -927,7 +927,7 @@ struct si_context { /* Other state */ bool need_check_render_feedback; bool decompression_enabled; - + bool dpbb_force_off; bool vs_writes_viewport_index; bool vs_disables_clipping_viewport; diff --git a/src/gallium/drivers/radeonsi/si_state_binning.c b/src/gallium/drivers/radeonsi/si_state_binning.c index 80b1137fd0c..2605b59bbef 100644 --- a/src/gallium/drivers/radeonsi/si_state_binning.c +++ b/src/gallium/drivers/radeonsi/si_state_binning.c @@ -343,7 +343,7 @@ void si_emit_dpbb_state(struct si_context *sctx) assert(sctx->chip_class >= GFX9); - if (!sscreen->dpbb_allowed || !blend || !dsa) { + if (!sscreen->dpbb_allowed || !blend || !dsa || sctx->dpbb_force_off) { si_emit_dpbb_disable(sctx); return; }