From 6bd8a3c7e434e269ef972c49e8189a0003a9f8ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Louis-Francis=20Ratt=C3=A9-Boulianne?= Date: Tue, 14 Dec 2021 15:50:35 +0100 Subject: [PATCH] vulkan/runtime: Add a vk_cmd_queue object to vk_command_buffer This is paving the road for generic secondary command buffer support, where commands are simply recorded in a software queue and replayed on the primary command buffer when vkCmdExecuteCommands() is called. Reviewed-by: Jason Ekstrand Reviewed-by: Boris Brezillon Part-of: --- src/vulkan/runtime/vk_command_buffer.c | 3 +++ src/vulkan/runtime/vk_command_buffer.h | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/src/vulkan/runtime/vk_command_buffer.c b/src/vulkan/runtime/vk_command_buffer.c index 160d9440c27..da3cd63866b 100644 --- a/src/vulkan/runtime/vk_command_buffer.c +++ b/src/vulkan/runtime/vk_command_buffer.c @@ -36,6 +36,7 @@ vk_command_buffer_init(struct vk_command_buffer *command_buffer, command_buffer->pool = pool; command_buffer->level = level; + vk_cmd_queue_init(&command_buffer->cmd_queue, &pool->alloc); util_dynarray_init(&command_buffer->labels, NULL); command_buffer->region_begin = true; @@ -47,6 +48,7 @@ vk_command_buffer_init(struct vk_command_buffer *command_buffer, void vk_command_buffer_reset(struct vk_command_buffer *command_buffer) { + vk_cmd_queue_reset(&command_buffer->cmd_queue); util_dynarray_clear(&command_buffer->labels); command_buffer->region_begin = true; } @@ -55,6 +57,7 @@ void vk_command_buffer_finish(struct vk_command_buffer *command_buffer) { list_del(&command_buffer->pool_link); + vk_cmd_queue_finish(&command_buffer->cmd_queue); util_dynarray_fini(&command_buffer->labels); vk_object_base_finish(&command_buffer->base); } diff --git a/src/vulkan/runtime/vk_command_buffer.h b/src/vulkan/runtime/vk_command_buffer.h index 6ad5c71baa2..b0ab1bc6b1a 100644 --- a/src/vulkan/runtime/vk_command_buffer.h +++ b/src/vulkan/runtime/vk_command_buffer.h @@ -24,6 +24,7 @@ #ifndef VK_COMMAND_BUFFER_H #define VK_COMMAND_BUFFER_H +#include "vk_cmd_queue.h" #include "vk_object.h" #include "util/list.h" #include "util/u_dynarray.h" @@ -52,6 +53,9 @@ struct vk_command_buffer { */ void (*destroy)(struct vk_command_buffer *); + /** Command list for emulated secondary command buffers */ + struct vk_cmd_queue cmd_queue; + /** * VK_EXT_debug_utils *