同步

同步是使用 Vulkan 最强大但也最复杂的部分之一。应用程序开发人员现在负责使用各种 Vulkan 同步原语 管理同步。不正确地使用同步可能会导致难以发现的错误,以及在 GPU 不必要地空闲的情况下导致性能不佳。

Khronos 提供了一组示例 和一篇 了解 Vulkan 同步 博客,介绍了如何使用一些同步原语。还有来自 Tobias Hector 过去 Vulkan 演讲的演示文稿:第 1 部分幻灯片视频)和 第 2 部分幻灯片视频)。

以下是 VkEventVkFenceVkSemaphore 之间差异的概述图

synchronization_overview.png

验证

Khronos 验证层已实施了一些 同步验证。可以通过 Vulkan 配置器 轻松启用,该配置器包含在 Vulkan SDK 中。还编写了一篇详细的白皮书,讨论了同步验证,并已作为一篇 Khronos 博客发布。

管线屏障

管线屏障 在执行命令缓冲区时,可以控制哪些管线阶段需要等待之前的管线阶段。

synchronization_pipeline_barrieres.png

虽然管线屏障起初可能很难理解,但有很多很棒的 Khronos 演讲和其他资源对该主题进行了更深入的探讨。

VK_KHR_synchronization2

VK_KHR_synchronization2 扩展彻底修改了原始核心同步 API,以降低应用程序开发人员的复杂性,并添加了一些原始 API 中没有的其他功能。

阅读 VK_KHR_synchronization2 章节,了解有关同步 API 差异以及如何移植到使用新扩展的更多信息