From 8b9213e0b7902318a2b1aa5f81fc3cb302f2042c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20=C5=9Alusarz?= Date: Tue, 1 Sep 2020 22:02:10 +0200 Subject: [PATCH] anv: refresh cached current batch bo after emitting some commands MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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: (cherry picked from commit e94c22429b64f419d9a66f04fa5ecdad33f7f5ef) --- .pick_status.json | 2 +- src/intel/vulkan/anv_batch_chain.c | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index 0573caa8830..54a05ae824d 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -3235,7 +3235,7 @@ "description": "anv: refresh cached current batch bo after emitting some commands", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": "34a0ce58c7f85ea3ec3f1026469ce06602f38a5b" }, diff --git a/src/intel/vulkan/anv_batch_chain.c b/src/intel/vulkan/anv_batch_chain.c index 589738dad1f..2d69689a0b1 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*