这篇文章涵盖了 Vulkan 在 NVIDIA GPU 上清算和演示的最佳实践。要在应用程序中获得高且一致的帧速率,请参阅所有 高级 API 性能提示 .
最近 Vulkan 1.3 版本 ,现在是时候添加一些 Vulkan 特定的提示了,这些提示不一定会被其他 高级 API 性能 帖子明确涵盖。除了介绍新的 Vulkan 1.3 核心功能外,这篇文章还分享了一套清理和呈现表面的良好实践。
Vulkan 1.3 芯
Vulkan 1.3 通过扩展 API 中的关键部分带来了改进。本节总结了我们在使用这些新功能时获得最佳性能的建议。
推荐
- 利用 dynamic rendering 跳过帧缓冲区并渲染过程对象设置。
- 通过对 dynamic states 的核心支持,减少管道状态对象的数量。
- 使用 改进的同步 API 简化同步并避免不必要的图像布局转换
清除
本节提供了在调用 clear 命令时实现性能的指南。此类命令清除彩色图像或绑定帧缓冲区附件内的区域。
- 使用
VK_ATTACHMENT_LOAD_OP_CLEAR
清除子过程开头的附件,而不是清除命令。这可以让驱动程序跳过加载不必要的数据。 - 在渲染过程实例之外 , 更喜欢使用
vkCmdClearColorImage
而不是 CS 调用来清除图像。此路径支持带宽优化。 - 如果可能,批量清除以避免在调度之间交叉进行单个清除。
- 将
VkClearDepthStencilValue
与测试功能相协调,以实现更好的深度测试性能:- 0.5 ≤ 深度值< 1.0 与
VK_COMPARE_OP_LESS_OR_EQUAL
相关
- 0 ≤ 深度值< 0.5 与
VK_COMPARE_OP_GREATER_OR_EQUAL
相关
- 0.5 ≤ 深度值< 1.0 与
不推荐使用
- 在每个应用程序中指定 30 个以上的唯一清除值(或在图灵上指定 15 个以上)并不能充分利用清除带宽优化。
- 除非计算清除与相邻调度重叠,否则应避免使用“清除着色器”。
目前
以下部分深入了解了使用曲面支持的表示模式的首选方式,以实现良好的性能。
推荐
- 依赖
VK_PRESENT_MODE_FIFO_KHR
或VK_PRESENT_MODE_MAILBOX_KHR
(对于VSync
on )。值得注意的方面:- 首选
VK_PRESENT_MODE_FIFO_KHR
,因为它不会掉落框架,并且不会撕裂。
VK_PRESENT_MODE_MAILBOX_KHR
可能提供较低的延迟,但帧可能会被丢弃。
- 当您的应用程序只是偶尔落后于刷新率时,
VK_PRESENT_MODE_FIFO_RELAXED_KHR
是引人注目的,它允许撕裂以便“赶上”。
- 首选
- 依赖
VK_PRESENT_MODE_IMMEDIATE_KHR
关闭VSync
。 - 在 Windows 系统上,使用
VK_EXT_full_screen_exclusive
扩展绕过合成。 - 例如,当 windows 调整大小时,处理过时和次优交换链以重新创建过时的交换链。
- 对于延迟敏感的应用程序,请使用 Vulkan 反射 SDK 通过及时完成游戏引擎的工作来减少延迟,以便渲染。
更多信息
有关将 Vulkan 与 NVIDIA GPU 一起使用的更多信息,请参阅 Vulkan 注意事项 .
要查看 Vulkan API 状态,请使用 Nsight Graphics 中的 API Inspector 。(免费下载)
使用 Nsight 系统,您可以在统一的 CPU 上查看 Vulkan 使用情况 – GPU 时间线,调查口吃,并跟踪 GPU 冷点到其 CPU 来源。 免费下载 Nsight 系统。
致谢
感谢 Piers Daniell 、 Ivan Fedorov 、 Adam Moss 、 Ryan Prescott 、 Joshua Schnarr 、 Juha Sjöholm 和 Márton Tamás 的反馈和贡献。