# 前言

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 之后