5.2. 命令缓冲区的分配和管理
可调用如下命令来分配命令缓冲区:
VkResult vkAllocateCommandBuffers(
VkDevice device,
const VkCommandBufferAllocateInfo* pAllocateInfo,
VkCommandBuffer* pCommandBuffers);
-
device
是拥有命令缓存池的逻辑设备。 -
pAllocateInfo
是一个指向VkCommandBufferAllocateInfo
类型数据结构实例的指针,描述了分配行为的参数。 -
pCommandBuffers
是一个指针,执行一个元素类型为VkCommandBuffer
handle的数组,以接收被返回的命令缓冲区对象。 数组的长度至少为pAllocateInfo
的成员commandBufferCount
指定的大小。每一个分配的命令缓冲区都处于初始状态。
VkCommandBufferAllocateInfo
类型数据结构定义如下:
typedef struct VkCommandBufferAllocateInfo {
VkStructureType sType;
const void* pNext;
VkCommandPool commandPool;
VkCommandBufferLevel level;
uint32_t commandBufferCount;
} VkCommandBufferAllocateInfo;
-
sType
是这个数据结构的类型。 -
pNext
是NULL
或者一个指向拓展特定的数据结构的指针。 -
commandPool
是分配出命令缓冲区的命令缓存池。 -
level
决定命令缓冲区是主缓冲区还是次缓冲区。 可选值包括:typedef enum VkCommandBufferLevel { VK_COMMAND_BUFFER_LEVEL_PRIMARY = 0, VK_COMMAND_BUFFER_LEVEL_SECONDARY = 1, } VkCommandBufferLevel;
-
commandBufferCount
is the number of command buffers to allocate from the pool.
可调用下列命令啦重置命令缓冲区:
VkResult vkResetCommandBuffer(
VkCommandBuffer commandBuffer,
VkCommandBufferResetFlags flags);
-
commandBuffer
是需要被重置的命令缓冲区。命令缓冲区可以处于任何状态,并把它设置到初始状态。 -
flags
是一个bit标志位,控制重置操作。 可选的bit位包括:typedef enum VkCommandBufferResetFlagBits { VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = 0x00000001, } VkCommandBufferResetFlagBits;
If
flags
includesVK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT
, then most or all memory resources currently owned by the command buffer should be returned to the parent command pool. If this flag is not set, then the command buffer may hold onto memory resources and reuse them when recording commands.
可调用下列命令来释放命令缓冲区
void vkFreeCommandBuffers(
VkDevice device,
VkCommandPool commandPool,
uint32_t commandBufferCount,
const VkCommandBuffer* pCommandBuffers);
-
device
是拥有该命令缓存池的逻辑设备。 -
commandPool
是分配出命令缓冲区的命令缓存池。 -
commandBufferCount
是pCommandBuffers
数组的长度。 -
pCommandBuffers
是需要被释放的命令缓冲区handle的数组。