radeonsi: don't flush CS before and after every blitter invocation

u_blitter always calls set_stream_output_targets before and after clears
and blits, which always flushes here. Strengthen the flushing condition
and add an early exit.

No clue why this fixes the test.

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-07 16:45:44 -05:00
parent da49e9dcc2
commit 969ed85110
2 changed files with 4 additions and 2 deletions

View File

@@ -151,5 +151,4 @@ KHR-GL46.transform_feedback_overflow_query_ARB.multiple-streams-multiple-buffers
KHR-GL46.transform_feedback_overflow_query_ARB.multiple-streams-one-buffer-per-stream,Fail
# I saw these on Navi31, but not Navi33
dEQP-GLES3.functional.fragment_ops.interaction.basic_shader.39,Fail
dEQP-GLES3.functional.fragment_ops.interaction.basic_shader.94,Fail
1 # LLVM 18.0.0git
151
152
153
154

View File

@@ -64,6 +64,9 @@ static void si_set_streamout_targets(struct pipe_context *ctx, unsigned num_targ
unsigned old_num_targets = sctx->streamout.num_targets;
unsigned i;
if (!old_num_targets && !num_targets)
return;
/* We are going to unbind the buffers. Mark which caches need to be flushed. */
if (old_num_targets && sctx->streamout.begin_emitted) {
/* Stop streamout. */
@@ -102,7 +105,7 @@ static void si_set_streamout_targets(struct pipe_context *ctx, unsigned num_targ
* spec@ext_transform_feedback@immediate-reuse-index-buffer
* spec@ext_transform_feedback@immediate-reuse-uniform-buffer
*/
if (sctx->gfx_level >= GFX11)
if (sctx->gfx_level >= GFX11 && old_num_targets)
si_flush_gfx_cs(sctx, 0, NULL);
/* Streamout buffers must be bound in 2 places: