這篇文章涵蓋了 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 的反饋和貢獻。
?