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++) {