Vulkan重置命令池

Vulkan重置命令池
当不想以单个方式重置命令缓冲区,或者在创建命令池时没有使用VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT标志,则可以一次重置一个命令池分配的所有命令缓冲区。

具体处理过程

(1)获取逻辑设备的句柄,将该句柄存储在一个VkDevice类型的变量中,将该变量命名为logical_device。
(2)获取已创建命令池的句柄,将该句柄存储到一个VkCommandPool类型的变量中,将该变量命名为command_pool。
(3)创建一个VkCommandPoolResetFlags类型的变量,将其命名为release_resources。如果需要将该命令池分配的所有命令缓冲区占用的内存都释放并还给该命令池,就将VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT赋予release_resources变量;否则,应将release_resources变量的值设置为0。
(4)调用vkResetCommandPool(logical_device,command_pool,release_resources)函数。将第一个参数设置为logical_device变量;将第二个参数设置为command_pool变量;将第三个参数设置为release_resources变量。
(5)通过查明该函数调用操作的返回值等于VK_SUCCESS,确认该函数调用操作成功完成。

具体运行情况

重置命令池会使通过该命令池分配的所有命令缓冲区都切换回初始状态,就像它们从来没有执行过记录操作一样。这与通过单个方式重置所有命令缓冲区的效果类似,但是这种处理方式的速度更快,而且在创建命令池时不需要使用VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT标志。
当命令缓冲区执行了记录操作后,就会从命令池获取内存,这是通过自动方式完成的,我们无法控制该操作。当我们重置命令池时,可以使命令缓冲区保留内存以便将来继续使用这部分内存,也可以使命令缓冲区将内存还给命令池。
要一次重置一个命令池分配的所有命令缓冲区,可使用下列代码。

Vulkan重置命令池
Vulkan重置命令池

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!

 

Vulkan实战