summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcin Ślusarz <marcin.slusarz@intel.com>2020-09-01 22:02:10 +0200
committerMarge Bot <eric+marge@anholt.net>2020-09-02 10:16:57 +0000
commite94c22429b64f419d9a66f04fa5ecdad33f7f5ef (patch)
tree1c3f199b027a1a328dfd7b2b0dcb135b2b09c833
parenta1c2bd6ce8981b34c0cf9333699b0ce75be6cb55 (diff)
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 <marcin.slusarz@intel.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6546>
-rw-r--r--src/intel/vulkan/anv_batch_chain.c5
1 files changed, 5 insertions, 0 deletions
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*