anv/batch_chain: Call batch_bo_finish at the end of end_batch_buffer
The only reason we were calling it in the middle was that one of the cases for figuring out the secondary command buffer execution type wanted batch_bo->length which gets set by batch_bo_finish. It's easy enough to recalculate and now batch_bo_finish is called in a sensible location. Reviewed-by: Scott D Phillips <scott.d.phillips@intel.com>
This commit is contained in:
@@ -843,20 +843,18 @@ anv_cmd_buffer_end_batch_buffer(struct anv_cmd_buffer *cmd_buffer)
|
||||
anv_batch_emit(&cmd_buffer->batch, GEN8_MI_NOOP, noop);
|
||||
|
||||
cmd_buffer->exec_mode = ANV_CMD_BUFFER_EXEC_MODE_PRIMARY;
|
||||
}
|
||||
|
||||
anv_batch_bo_finish(batch_bo, &cmd_buffer->batch);
|
||||
|
||||
if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_SECONDARY) {
|
||||
} else {
|
||||
assert(cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_SECONDARY);
|
||||
/* If this is a secondary command buffer, we need to determine the
|
||||
* mode in which it will be executed with vkExecuteCommands. We
|
||||
* determine this statically here so that this stays in sync with the
|
||||
* actual ExecuteCommands implementation.
|
||||
*/
|
||||
const uint32_t length = cmd_buffer->batch.next - cmd_buffer->batch.start;
|
||||
if (!cmd_buffer->device->can_chain_batches) {
|
||||
cmd_buffer->exec_mode = ANV_CMD_BUFFER_EXEC_MODE_GROW_AND_EMIT;
|
||||
} else if ((cmd_buffer->batch_bos.next == cmd_buffer->batch_bos.prev) &&
|
||||
(batch_bo->length < ANV_CMD_BUFFER_BATCH_SIZE / 2)) {
|
||||
(length < ANV_CMD_BUFFER_BATCH_SIZE / 2)) {
|
||||
/* If the secondary has exactly one batch buffer in its list *and*
|
||||
* that batch buffer is less than half of the maximum size, we're
|
||||
* probably better of simply copying it into our batch.
|
||||
@@ -877,6 +875,8 @@ anv_cmd_buffer_end_batch_buffer(struct anv_cmd_buffer *cmd_buffer)
|
||||
cmd_buffer->exec_mode = ANV_CMD_BUFFER_EXEC_MODE_COPY_AND_CHAIN;
|
||||
}
|
||||
}
|
||||
|
||||
anv_batch_bo_finish(batch_bo, &cmd_buffer->batch);
|
||||
}
|
||||
|
||||
static VkResult
|
||||
|
||||
Reference in New Issue
Block a user