From 313aeee84bc0eeb93766c0349dcc0ff2d5ba6574 Mon Sep 17 00:00:00 2001 From: Caio Oliveira Date: Thu, 23 Dec 2021 23:17:28 -0800 Subject: [PATCH] anv: Use pending pipe control mechanism in flush_pipeline_select() This removes the repeated implementation of a workaround and a per-platform case. Reviewed-by: Lionel Landwerlin Reviewed-by: Kenneth Graunke Part-of: --- src/intel/vulkan/genX_cmd_buffer.c | 41 ++++++++++-------------------- 1 file changed, 14 insertions(+), 27 deletions(-) diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index 1245b3ce9a1..5c097e65c36 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -5443,34 +5443,21 @@ genX(flush_pipeline_select)(struct anv_cmd_buffer *cmd_buffer, * stalling PIPE_CONTROL command followed by another PIPE_CONTROL * command to invalidate read only caches prior to programming * MI_PIPELINE_SELECT command to change the Pipeline Select Mode. + * + * Note the cmd_buffer_apply_pipe_flushes will split this into two + * PIPE_CONTROLs. */ - anv_batch_emit(&cmd_buffer->batch, GENX(PIPE_CONTROL), pc) { - pc.RenderTargetCacheFlushEnable = true; - pc.DepthCacheFlushEnable = true; -#if GFX_VER >= 12 - pc.HDCPipelineFlushEnable = true; -#else - pc.DCFlushEnable = true; -#endif - pc.PostSyncOperation = NoWrite; - pc.CommandStreamerStallEnable = true; -#if GFX_VER >= 12 - /* Wa_1409600907: "PIPE_CONTROL with Depth Stall Enable bit must be - * set with any PIPE_CONTROL with Depth Flush Enable bit set. - */ - pc.DepthStallEnable = true; -#endif - anv_debug_dump_pc(pc); - } - - anv_batch_emit(&cmd_buffer->batch, GENX(PIPE_CONTROL), pc) { - pc.TextureCacheInvalidationEnable = true; - pc.ConstantCacheInvalidationEnable = true; - pc.StateCacheInvalidationEnable = true; - pc.InstructionCacheInvalidateEnable = true; - pc.PostSyncOperation = NoWrite; - anv_debug_dump_pc(pc); - } + anv_add_pending_pipe_bits(cmd_buffer, + ANV_PIPE_RENDER_TARGET_CACHE_FLUSH_BIT | + ANV_PIPE_DEPTH_CACHE_FLUSH_BIT | + ANV_PIPE_HDC_PIPELINE_FLUSH_BIT | + ANV_PIPE_CS_STALL_BIT | + ANV_PIPE_TEXTURE_CACHE_INVALIDATE_BIT | + ANV_PIPE_CONSTANT_CACHE_INVALIDATE_BIT | + ANV_PIPE_STATE_CACHE_INVALIDATE_BIT | + ANV_PIPE_INSTRUCTION_CACHE_INVALIDATE_BIT, + "flush and invalidate for PIPELINE_SELECT"); + genX(cmd_buffer_apply_pipe_flushes)(cmd_buffer); anv_batch_emit(&cmd_buffer->batch, GENX(PIPELINE_SELECT), ps) { #if GFX_VER >= 9