From: Marcin Ślusarz Date: Tue, 1 Sep 2020 20:02:10 +0000 (+0200) Subject: anv: refresh cached current batch bo after emitting some commands X-Git-Url: https://git.libre-soc.org/?p=mesa.git;a=commitdiff_plain;h=e94c22429b64f419d9a66f04fa5ecdad33f7f5ef anv: refresh cached current batch bo after emitting some commands Fixes crashes in: - Rise of the Tomb Rider (on benchmark start) - Total War: Three Kingdoms (on game start) - Total War: Warhammer II (on game start) Fixes: 34a0ce58c7f ("anv: add a new execution mode for secondary command buffers") Signed-off-by: Marcin Ślusarz Reviewed-by: Jason Ekstrand Reviewed-by: Lionel Landwerlin Part-of: --- diff --git a/src/intel/vulkan/anv_batch_chain.c b/src/intel/vulkan/anv_batch_chain.c index 4aefa58ea1e..ce429ff2d85 100644 --- a/src/intel/vulkan/anv_batch_chain.c +++ b/src/intel/vulkan/anv_batch_chain.c @@ -951,6 +951,11 @@ anv_cmd_buffer_end_batch_buffer(struct anv_cmd_buffer *cmd_buffer) .SecondLevelBatchBuffer = Firstlevelbatch) + (GEN8_MI_BATCH_BUFFER_START_BatchBufferStartAddress_start / 8); cmd_buffer->return_addr = anv_batch_address(&cmd_buffer->batch, jump_addr); + + /* The emit above may have caused us to chain batch buffers which + * would mean that batch_bo is no longer valid. + */ + batch_bo = anv_cmd_buffer_current_batch_bo(cmd_buffer); } else if ((cmd_buffer->batch_bos.next == cmd_buffer->batch_bos.prev) && (length < ANV_CMD_BUFFER_BATCH_SIZE / 2)) { /* If the secondary has exactly one batch buffer in its list *and*