From 1f1022d161692a164ca281157fb664df421a20c2 Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Wed, 5 Nov 2025 14:15:08 +0200 Subject: [PATCH] anv: avoid unnecessary stalling on secondaries When EXT_descriptor_buffer is not enabled, we can assume we're in legacy descriptor mode and not do any switching for secondaries. Signed-off-by: Lionel Landwerlin Reviewed-by: Casey Bowman Part-of: --- src/intel/vulkan/genX_cmd_buffer.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index 7ed7937239c..fb970d0066e 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -2770,6 +2770,8 @@ genX(flush_descriptor_buffers)(struct anv_cmd_buffer *cmd_buffer, struct anv_cmd_pipeline_state *pipe_state, VkShaderStageFlags active_stages) { + assert(cmd_buffer->state.pending_db_mode != ANV_CMD_DESCRIPTOR_BUFFER_MODE_UNKNOWN); + /* On Gfx12.5+ the STATE_BASE_ADDRESS BindlessSurfaceStateBaseAddress & * DynamicStateBaseAddress are fixed. So as long as we stay in one * descriptor buffer mode, there is no need to switch. @@ -2842,7 +2844,9 @@ genX(cmd_buffer_begin_companion)(struct anv_cmd_buffer *cmd_buffer, /* A companion command buffer is only used for blorp commands atm, so * default to the legacy mode. */ - cmd_buffer->state.current_db_mode = ANV_CMD_DESCRIPTOR_BUFFER_MODE_LEGACY; + cmd_buffer->state.current_db_mode = + cmd_buffer->state.pending_db_mode = + ANV_CMD_DESCRIPTOR_BUFFER_MODE_LEGACY; genX(cmd_buffer_emit_bt_pool_base_address)(cmd_buffer); /* Invalidate the aux table in every primary command buffer. This ensures @@ -3233,7 +3237,9 @@ genX(BeginCommandBuffer)( if (cmd_buffer->device->vk.enabled_extensions.EXT_descriptor_buffer) { genX(cmd_buffer_emit_state_base_address)(cmd_buffer); } else { - cmd_buffer->state.current_db_mode = ANV_CMD_DESCRIPTOR_BUFFER_MODE_LEGACY; + cmd_buffer->state.current_db_mode = + cmd_buffer->state.pending_db_mode = + ANV_CMD_DESCRIPTOR_BUFFER_MODE_LEGACY; genX(cmd_buffer_emit_bt_pool_base_address)(cmd_buffer); }