From 8446f4733fd0a4efb692e0202a50ce96946b12e7 Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Wed, 9 Dec 2020 11:56:31 +0200 Subject: [PATCH] anv: track the end of the command buffers Where MI_BATCH_BUFFER_END is recorded. Signed-off-by: Lionel Landwerlin Reviewed-by: Kenneth Graunke Part-of: --- src/intel/vulkan/anv_batch_chain.c | 4 ++++ src/intel/vulkan/anv_private.h | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/src/intel/vulkan/anv_batch_chain.c b/src/intel/vulkan/anv_batch_chain.c index 5ea24bb..34e0868 100644 --- a/src/intel/vulkan/anv_batch_chain.c +++ b/src/intel/vulkan/anv_batch_chain.c @@ -913,8 +913,12 @@ anv_cmd_buffer_end_batch_buffer(struct anv_cmd_buffer *cmd_buffer) * with our BATCH_BUFFER_END in another BO. */ cmd_buffer->batch.end += GEN8_MI_BATCH_BUFFER_START_length * 4; + assert(cmd_buffer->batch.start == batch_bo->bo->map); assert(cmd_buffer->batch.end == batch_bo->bo->map + batch_bo->bo->size); + /* Save end instruction location to override it later. */ + cmd_buffer->batch_end = cmd_buffer->batch.next; + anv_batch_emit(&cmd_buffer->batch, GEN8_MI_BATCH_BUFFER_END, bbe); /* Round batch up to an even number of dwords. */ diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index 1183d14..5eb042f 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -2951,6 +2951,12 @@ struct anv_cmd_buffer { struct anv_batch batch; + /* Pointer to the location in the batch where MI_BATCH_BUFFER_END was + * recorded upon calling vkEndCommandBuffer(). This is useful if we need to + * rewrite the end to chain multiple batch together at vkQueueSubmit(). + */ + void * batch_end; + /* Fields required for the actual chain of anv_batch_bo's. * * These fields are initialized by anv_cmd_buffer_init_batch_bo_chain(). -- 2.7.4