diff --git a/.pick_status.json b/.pick_status.json index 0072732fcd7..fbf7a6a6280 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -2020,7 +2020,7 @@ "description": "radeonsi/gfx10: flush gfx cs on ngg -> legacy transition", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": null }, diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c b/src/gallium/drivers/radeonsi/si_state_shaders.c index d9a71dc6776..0b20f3b5640 100644 --- a/src/gallium/drivers/radeonsi/si_state_shaders.c +++ b/src/gallium/drivers/radeonsi/si_state_shaders.c @@ -2954,8 +2954,13 @@ bool si_update_ngg(struct si_context *sctx) * VGT_FLUSH is also emitted at the beginning of IBs when legacy GS ring * pointers are set. */ - if ((sctx->chip_class == GFX10 || sctx->family == CHIP_SIENNA_CICHLID) && !new_ngg) + if ((sctx->chip_class == GFX10 || sctx->family == CHIP_SIENNA_CICHLID) && !new_ngg) { sctx->flags |= SI_CONTEXT_VGT_FLUSH; + if (sctx->chip_class == GFX10) { + /* Workaround for https://gitlab.freedesktop.org/mesa/mesa/-/issues/2941 */ + si_flush_gfx_cs(sctx, RADEON_FLUSH_ASYNC_START_NEXT_GFX_IB_NOW, NULL); + } + } sctx->ngg = new_ngg; sctx->last_gs_out_prim = -1; /* reset this so that it gets updated */