# 前言
Vulkan 是 Pilot 中 RHI 的很大一块,Vulkan 在当前的认知中是多线程友好的一个图形接口 https://vulkan-tutorial.com/
# Multi-Threading in Vulkan
https://community.arm.com/arm-community-blogs/b/graphics-gaming-and-vr-blog/posts/multi-threading-in-vulkan
# 命令池
如上图所示,在 Vulkan 中每一帧对应一个 CommandPool, 每一个 CommandPool 中有很多 CommandBuffer
# 协调工作
以下均涉及到竟态问题
CoomandBuffer 之间通过 Event 交互,CommandQueue 之间通过信号量交互,Fences 主要是用来让渲染的 CPU 等待下一帧图像之类的
单帧的渲染如下所示:
但是可以看到实际上述流程中有很多空闲时间,为了让不同帧之间按照流水线的方式作业, 这个流程看起来很棒的,Vulkan 每次需要渲染下一个图片时会调用 vkAcquireNextImageKHR
信号,这个信号一般在交换链的图片准备完毕后会触发, vkQueueSubmit
通常会等待下一个信号, vkQueuePresentKHR
信号将提供一个可以显示的图像,但是必须在 vkQueueSubmit
之后