一個月前在 Vulkan 1.3.246 中引入了新的 VK_EXT_shader_object 擴展,從 Activision 到 Valve 的開發人員都在開發該擴展。過去幾週,Valve 的 Zink 首席開發人員 Mike Blumenkrantz 一直忙於為這個 OpenGL-on-Vulkan 驅動程序連接此著色器對象支持。

VK_EXT_shader_object 添加了一個新的著色器對像類型來表示單個編譯的著色器階段。 Vulkan 著色器對象旨在成為管道對象的更靈活但性能相當的替代品。

本週早些時候,Blumenkrantz 登陸了他的代碼的第一部分以利用Zink 中的著色器對象。通過合併代碼,他指出:

“這重新實現了 EXT_shader_object 並將其用於單獨的著色器

…但僅在古墓麗影 (2013) 中,因為反饋循環否則會被破壞

…而且 nvidia proprietary 在嘗試這個時也會崩潰,因為他們有很多錯誤

所以這實際上實現了一些沒有人可以使用的東西,但如果他們確實在實際運行的 EXT_shader_object 的參考實現(即 lavapipe)上使用它,那麼它會工作正常。”

一夜之間合併的是 Zink 的 EXT-shader_object 的第二部分實現:

“這使得 EXT_shader_object 可以用於所有單獨的著色器預編譯

理想情況下,一旦驅動程序趕上,這意味著應該可以(最終)暢玩古墓麗影(2013)。”

然後最後的 部分今天終於打到了 Mesa 23.2-devel三:

“這是最後一部分,使著色器對象能夠在可能/可用的情況下用於所有預編譯

這應該符合 GPL 的功能,但是它還應該(理論上)具有顯著更少的 CPU 開銷,所以我已將其啟用為可用時的新默認值

目前我沒有更改任何啟用著色器對象的要求,因此這可能僅可用在桌面上”

反過來,這應該有助於為在 Zink 上運行的 OpenGL 遊戲(如古墓麗影)提供流暢的遊戲體驗。

在我的 TODO 列表中,至少要為 Intel Arc Graphics 和 AMD Radeon 硬件及其開源 Linux 驅動程序運行一些新的 Zink 基準測試。

Categories: IT Info