From da49e9dcc2a2ba6d1f4b8ac0e759aec1625419fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Mon, 8 Jan 2024 02:46:58 -0500 Subject: [PATCH] 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 Part-of: --- src/gallium/drivers/radeonsi/si_clear.c | 6 ++++++ src/gallium/drivers/radeonsi/si_state_streamout.c | 1 - 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/radeonsi/si_clear.c b/src/gallium/drivers/radeonsi/si_clear.c index 4ad97bca5bb..8873c2cb543 100644 --- a/src/gallium/drivers/radeonsi/si_clear.c +++ b/src/gallium/drivers/radeonsi/si_clear.c @@ -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); diff --git a/src/gallium/drivers/radeonsi/si_state_streamout.c b/src/gallium/drivers/radeonsi/si_state_streamout.c index b61cfb89a8a..d0eb021a070 100644 --- a/src/gallium/drivers/radeonsi/si_state_streamout.c +++ b/src/gallium/drivers/radeonsi/si_state_streamout.c @@ -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);