From 4618a99a4cdfe5793abd9e34c1eb1b7ef6758c61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?= Date: Tue, 24 Jun 2025 09:11:11 -0700 Subject: [PATCH] anv: Flush before invalidate aux map in copy and video engines MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BSpec: 43904 Reviewed-by: Lionel Landwerlin Fixes: 46f5359238ed ("anv: Invalidate aux map for copy/video engine") Signed-off-by: José Roberto de Souza Part-of: --- src/intel/vulkan/genX_cmd_buffer.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index 9c78ec21413..529686115cb 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -1607,12 +1607,6 @@ genX(invalidate_aux_map)(struct anv_batch *batch, lri.DataDWord = 1; } - /* Wa_16018063123 - emit fast color dummy blit before MI_FLUSH_DW. */ - if (intel_needs_workaround(device->info, 16018063123) && - engine_class == INTEL_ENGINE_CLASS_COPY) { - genX(batch_emit_fast_color_dummy_blit)(batch, device); - } - /* HSD 22012751911: SW Programming sequence when issuing aux invalidation: * * "Poll Aux Invalidation bit once the invalidation is set @@ -1886,8 +1880,19 @@ genX(cmd_buffer_apply_pipe_flushes)(struct anv_cmd_buffer *cmd_buffer) if (anv_cmd_buffer_is_blitter_queue(cmd_buffer) || anv_cmd_buffer_is_video_queue(cmd_buffer)) { if (bits & ANV_PIPE_INVALIDATE_BITS) { - genX(invalidate_aux_map)(&cmd_buffer->batch, cmd_buffer->device, - cmd_buffer->queue_family->engine_class, bits); + if (bits & ANV_PIPE_AUX_TABLE_INVALIDATE_BIT) { + if (anv_cmd_buffer_is_video_queue(cmd_buffer) || GFX_VERx10 == 125) { + /* Wa_16018063123 - emit fast color dummy blit before MI_FLUSH_DW. */ + if (intel_needs_workaround(cmd_buffer->device->info, 16018063123) && + anv_cmd_buffer_is_blitter_queue(cmd_buffer)) + genX(batch_emit_fast_color_dummy_blit)(&cmd_buffer->batch, cmd_buffer->device); + + anv_batch_emit(&cmd_buffer->batch, GENX(MI_FLUSH_DW), mi_flush); + } + + genX(invalidate_aux_map)(&cmd_buffer->batch, cmd_buffer->device, + cmd_buffer->queue_family->engine_class, bits); + } bits &= ~ANV_PIPE_INVALIDATE_BITS; } cmd_buffer->state.pending_pipe_bits = bits;