Vulkan中的CommandBuffer
- By losuffi
- 周六 23 五月 2020
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
- VK_COMMAND_POOL_CREATE_TRANSIENT_BIT
- 提示CommandBuffers会经常重新写入新的Command,(可能会改变内存分配行为)
- VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT
- 允许CommandBuffer单独Reset,如果没有这个Flag,那么pool中的CommandBuffer必须一块儿Reset
常见的工作方式是,在程序开始时,将Command写入CommandBuffers,并在主循环时多次执行它们。