radeonsi/gfx11: flush DB before Z/S clear to work around dEQP failures

u_blitter calls set_stream_output_targets, which flushed the context
for clears. Put the workaround in the right place.

Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27059>
This commit is contained in:
Marek Olšák
2024-01-08 02:46:58 -05:00
parent 5fd31c1301
commit da49e9dcc2
2 changed files with 6 additions and 1 deletions
+6
View File
@@ -1175,6 +1175,12 @@ static void si_clear(struct pipe_context *ctx, unsigned buffers,
si_mark_atom_dirty(sctx, &sctx->atoms.s.db_render_state);
}
/* TODO: This hack fixes dEQP-GLES[23].functional.fragment_ops.random.* on Navi31.
* The root cause is unknown.
*/
if (sctx->gfx_level == GFX11 || sctx->gfx_level == GFX11_5)
needs_db_flush = true;
if (needs_db_flush) {
sctx->flags |= SI_CONTEXT_FLUSH_AND_INV_DB;
si_mark_atom_dirty(sctx, &sctx->atoms.s.cache_flush);
@@ -101,7 +101,6 @@ static void si_set_streamout_targets(struct pipe_context *ctx, unsigned num_targ
* spec@ext_transform_feedback@immediate-reuse
* spec@ext_transform_feedback@immediate-reuse-index-buffer
* spec@ext_transform_feedback@immediate-reuse-uniform-buffer
* .. and some dEQP-GLES[23].functional.fragment_ops.random.*
*/
if (sctx->gfx_level >= GFX11)
si_flush_gfx_cs(sctx, 0, NULL);