vulkan/runtime: Add a vk_cmd_queue object to vk_command_buffer
authorLouis-Francis Ratté-Boulianne <lfrb@collabora.com>
Tue, 14 Dec 2021 14:50:35 +0000 (15:50 +0100)
committerMarge Bot <emma+marge@anholt.net>
Thu, 10 Mar 2022 15:52:10 +0000 (15:52 +0000)
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 <jason.ekstrand@collabora.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15311>

src/vulkan/runtime/vk_command_buffer.c
src/vulkan/runtime/vk_command_buffer.h

index 160d944..da3cd63 100644 (file)
@@ -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);
 }
index 6ad5c71..b0ab1bc 100644 (file)
@@ -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
     *