在用於形成Mesa 20.2版本的代碼庫中, RADV驅動程序, 適用於AMD芯片的Vulkan 切換到後端 默認編譯 Valve開發的»ACO«著色器 替代LLVM著色器編譯器。
此指定的更改 最終是為了提高遊戲的生產率 並縮短了發佈時間。
改變 從RADV控制器到新後端 與舊的AMD開發的後端在ACO功能方面達到同等水平之後, 適用於AMDGPU驅動程序,該驅動程序繼續在RadeonSI OpenGL驅動程序中使用。
Valve進行的測試表明,ACO的運行速度幾乎是AMDGPU著色器構建編譯器的兩倍,並且在某些帶有RADV驅動程序的系統上運行時,表明FPS有所提高。
AMD OpenGL和Vulkan驅動程序當前使用的著色器編譯器是LLVM上游項目的一部分。 該項目非常龐大,並且有許多不同的目標,而遊戲著色器的在線編譯只是其中之一。
這可能會導致開發權衡,在這種情況下,改進遊戲特定功能的難度比以前要困難得多,或者遊戲特定功能通常被從事其他工作的LLVM開發人員意外破壞。
的後端 ACO旨在確保以最佳方式生成代碼 可能適用於遊戲應用著色器,並具有很高的編譯速度。
ACO 它是用C ++編寫的, 開發時要牢記JIT編譯的適用性, 並使用快速迭代遍歷數據結構, 避免使用def等基於指針的結構(如鍊表和字符串)。 代碼的中間表示完全基於SSA(單一靜態分配),並且可以分配記錄,並基於著色器精確地計算記錄。
代碼的中間表示完全基於SSA(單一靜態分配),並且可以分配記錄,並基於著色器精確地計算記錄。
目前僅支持像素 (片段) 並在分立的AMD GPU上計算著色器 (dGPU VI +)。 但是,ACO已經為所有經過測試的遊戲正確收集了著色器,包括《古墓麗影》和《德軍總部II》中的複雜著色器。
擬議的ACO原型 為了測試 它幾乎是AMDGPU著色器編譯器的兩倍 並演示了在帶有RADV控制器的系統上運行時某些遊戲中FPS的增加。
為了進一步了解採用Valve的代碼的相關性,重要的是 目的是保證盡可能最佳的代碼生成 適用於遊戲應用著色器以及很高的編譯速度。
Mesa中可用的著色器編譯器使用LLVM組件, 不允許達到所需的編譯速度,並且不能完全控制控制流,因為過去這已經造成了嚴重的錯誤。
另外, 避免使用LLVM可以實施更積極的分析 差異和更好的日誌負載管理,從而可以更高效地生成可執行文件。
最後,它也是 重要的是要注意,目前ACO僅適用於Mesa RADV Vulkan控制器。 但是ACO開發人員已經確認,他們的下一步將是開始擴展ACO的功能以支持OpenGL RadeonSI驅動程序,以便在將來以及對於該驅動程序,ACO可以替換默認的LLVM著色器編譯器。 。
多少 那些喜歡繼續使用先前使用的後端的人 從LLVM著色器編譯器,他們可以返回它,他們只需要更改一個變量。
提供用於進行此更改的環境變量是 “ RADV_DEBUG = llvm”。
用戶如何選擇與哪個後端一起運行遊戲? 它必須修改哪些文件?