From ee4cdef9aeb7f2c576d9e6a31b1f07351829b795 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Tue, 28 Jan 2020 16:21:56 -0600 Subject: [PATCH] anv: Re-use one old BT block in reset_batch_bo_chain We intentionally throw away all but one BT block but then we set cmd_buffer->bt_block to ANV_STATE_NULL instead of the one we hung on to. This causes the command buffer to immediately re-emit STATE_BASE_ADDRESS the first time a BT is needed for no good reason. Reviewed-by: Lionel Landwerlin --- src/intel/vulkan/anv_batch_chain.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/intel/vulkan/anv_batch_chain.c b/src/intel/vulkan/anv_batch_chain.c index 5b64a53..1d4e853 100644 --- a/src/intel/vulkan/anv_batch_chain.c +++ b/src/intel/vulkan/anv_batch_chain.c @@ -874,7 +874,8 @@ anv_cmd_buffer_reset_batch_bo_chain(struct anv_cmd_buffer *cmd_buffer) anv_binding_table_pool_free(cmd_buffer->device, *bt_block); } assert(u_vector_length(&cmd_buffer->bt_block_states) == 1); - cmd_buffer->bt_next = ANV_STATE_NULL; + cmd_buffer->bt_next = *(struct anv_state *)u_vector_head(&cmd_buffer->bt_block_states); + cmd_buffer->bt_next.offset = 0; anv_reloc_list_clear(&cmd_buffer->surface_relocs); cmd_buffer->last_ss_pool_center = 0; -- 2.7.4