From cc24ec8c0772015d8ef0d10e646e89e9014e9e1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Fri, 9 Oct 2020 16:46:26 -0400 Subject: [PATCH] radeonsi: set NOT_EOP for back-to-back draws on gfx10+ Acked-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/gallium/drivers/radeonsi/si_state_draw.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/radeonsi/si_state_draw.c b/src/gallium/drivers/radeonsi/si_state_draw.c index 689b7ea06ad..6ce07d7c409 100644 --- a/src/gallium/drivers/radeonsi/si_state_draw.c +++ b/src/gallium/drivers/radeonsi/si_state_draw.c @@ -958,7 +958,14 @@ static void si_emit_draw_packets(struct si_context *sctx, const struct pipe_draw radeon_emit(cs, va); radeon_emit(cs, va >> 32); radeon_emit(cs, draws[i].count); - radeon_emit(cs, V_0287F0_DI_SRC_SEL_DMA); + radeon_emit(cs, V_0287F0_DI_SRC_SEL_DMA | + /* NOT_EOP allows merging multiple draws into 1 wave, but only user VGPRs + * can be changed between draws and GS fast launch must be disabled. + * NOT_EOP doesn't work on gfx9 and older. + */ + S_0287F0_NOT_EOP(sctx->chip_class >= GFX10 && + i < num_draws - 1 && + !(sctx->ngg_culling & SI_NGG_CULL_GS_FAST_LAUNCH_ALL))); } } else { for (unsigned i = 0; i < num_draws; i++) {