知识卡片

命令记录与命令执行是两个独立的时间点

专业/工作 · 111

内容

调用Vulkan的vkCmd*函数记录命令时,命令并不会立即执行,只是被追加到命令缓冲区的末尾,真正的执行发生在命令缓冲区被提交给队列、并被设备调度到之后的某个时刻,这个时间差可能很大。这个延迟执行模型意味着:如果命令要读取一块CPU可写的内存,只需要保证这块内存在设备真正执行命令之前有数据、并且在执行完成之前一直有效即可,而不必在调用vkCmd*函数记录命令的那一刻就把数据准备好——录制阶段和数据就绪阶段是可以错开的两条独立时间线。这个思路本质上是把”描述要做什么”和”什么时候真正做”彻底解耦,是任何做异步任务队列、延迟渲染指令、批处理系统时都会用到的通用模式,参见[[外部同步把加锁的决定权还给应用层]]中同样把控制权交给应用层的思路。

参考来源

《Vulkan 应用开发指南》第3章《队列和命令》