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 <jason.ekstrand@collabora.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15311>
This commit is contained in:
Louis-Francis Ratté-Boulianne 2021-12-14 15:50:35 +01:00 committed by Marge Bot
parent ad4d2da90a
commit 6bd8a3c7e4
2 changed files with 7 additions and 0 deletions

View 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);
}

View 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
*