radeonsi: set NOT_EOP for back-to-back draws on gfx10+
Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7056>
diff --git a/src/gallium/drivers/radeonsi/si_state_draw.c b/src/gallium/drivers/radeonsi/si_state_draw.c
index 689b7ea..6ce07d7 100644
--- a/src/gallium/drivers/radeonsi/si_state_draw.c
+++ b/src/gallium/drivers/radeonsi/si_state_draw.c
@@ -958,7 +958,14 @@
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++) {