5.2. 命令缓冲区的分配和管理
可调用如下命令来分配命令缓冲区:
VkResult vkAllocateCommandBuffers(
VkDevice device,
const VkCommandBufferAllocateInfo* pAllocateInfo,
VkCommandBuffer* pCommandBuffers);
-
device是拥有命令缓存池的逻辑设备。 -
pAllocateInfo是一个指向VkCommandBufferAllocateInfo类型数据结构实例的指针,描述了分配行为的参数。 -
pCommandBuffers是一个指针,执行一个元素类型为VkCommandBufferhandle的数组,以接收被返回的命令缓冲区对象。 数组的长度至少为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; -
commandBufferCountis 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
flagsincludesVK_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的数组。
本文介绍了Vulkan API中命令缓冲区的分配、重置及释放的方法。详细讲解了vkAllocateCommandBuffers、vkResetCommandBuffer及vkFreeCommandBuffers等关键API的使用方式与注意事项。
4446

被折叠的 条评论
为什么被折叠?



