内容创建/渲染

高级 API 性能: Vulkan 清除和呈现

 

这篇文章涵盖了 Vulkan 在 NVIDIA GPU 上清算和演示的最佳实践。要在应用程序中获得高且一致的帧速率,请参阅所有 高级 API 性能提示 .

最近 Vulkan 1.3 版本 ,现在是时候添加一些 Vulkan 特定的提示了,这些提示不一定会被其他 高级 API 性能 帖子明确涵盖。除了介绍新的 Vulkan 1.3 核心功能外,这篇文章还分享了一套清理和呈现表面的良好实践。

Vulkan 1.3 芯

Vulkan 1.3 通过扩展 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相关

不推荐使用

  • 在每个应用程序中指定 30 个以上的唯一清除值(或在图灵上指定 15 个以上)并不能充分利用清除带宽优化。
  • 除非计算清除与相邻调度重叠,否则应避免使用“清除着色器”。

目前

以下部分深入了解了使用曲面支持的表示模式的首选方式,以实现良好的性能。

推荐

  • 依赖VK_PRESENT_MODE_FIFO_KHRVK_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 的反馈和贡献。

 

Tags