Vulkan中的CommandBuffer

Vulkan & Imgui‘s log

Commandbuffers

Vulkan 中的Command,比如绘制操作,内存传输等,不是直接通过函数调用来执行的。必须要通过在CommandBuffers中记录Command来执行相应的操作。这样做的好处是,绘制命令中所有执行成本高的设置过程,都可以提前在多个线程中去完成。此后,只需要告知Vulkan在主循环中执行这些命令。

Command pools

在创建CommandBuffers前,我们必须创建一个Command pools。Command pools 用于管理存储缓冲区中的内存,CommandBuffers被Commandpools分配出来。

CommandBuffer是通过提交到一个设备队列上来执行的,比如我们检索到的某个图形或者显示队列。每一个Command pool也只能分配在单一种类Queue上提交的CommandBuffer

Command pool的两个Flag

  1. VK_COMMAND_POOL_CREATE_TRANSIENT_BIT
    1. 提示CommandBuffers会经常重新写入新的Command,(可能会改变内存分配行为)
  2. VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT
    1. 允许CommandBuffer单独Reset,如果没有这个Flag,那么pool中的CommandBuffer必须一块儿Reset

常见的工作方式是,在程序开始时,将Command写入CommandBuffers,并在主循环时多次执行它们。

tags: log