最近 Collabora開發人員發布 通過博客文章, 用於Mesa的新型鎵控制器, 實現中間層 組織OpenCL 1.2和OpenGL 3.3 API 有關支持DirectX 12(D3D12)的驅動程序,以及其源代碼是根據MIT許可證發布的。
擬議的控制器將 允許您在設備上使用Mesa 最初不兼容 與OpenCL和OpenGL 並作為移植OpenGL / OpenCL應用程序以在D3D12上運行的起點。 對於GPU製造商,該子系統允許提供對OpenCL和OpenGL的支持,其驅動程序僅支持D3D12。
在他們的博客文章中,開發人員分享:
在過去的幾個月中,我們一直在Collabora開展兩個激動人心的新項目,現在終於可以與世界分享有關它們的信息了……
近期計劃,可以觀察到對測試的完全認可 OpenCL 1.2和OpenGL 3.3支持,驗證與應用程序的兼容性以及在Mesa的主要組成部分中包含最佳做法。
關於新控制器
新控制器的開發是與Microsoft工程師共同完成的 開發D3D11傳遞工具包和D12D3 D11D3TranslationLayer庫的D12D3On12工具,以及在D3D12之上的標準圖形基元實現。
實施 包括鎵驅動程序,OpenCL編譯器,OpenCL運行時和NIR-to-DXIL著色器編譯器,該編譯器將Mesa中使用的NIR著色器的中間表示轉換為二進制DXIL格式(DirectX中間語言),與DirectX 12兼容並且基於位碼LLVM 3.7(Microsoft DirectX Shader Compiler本質上是LLVM 3.7的擴展分支。 OpenCL編譯器是根據LLVM項目和SPIRV-LLVM工具包的經驗編寫的。
這項工作建立在許多先前的工作之上。 首先,我們使用Mesa 3D構建此庫,其中Gallium接口是OpenGL層的基礎,而NIR是OpenCL編譯器的基礎。 我們還將LLVM和Khronos SPIRV-LLVM轉換器用作編譯器。
此外,我們利用Microsoft在創建其D3D12轉換層方面的經驗以及我們在開發Zink方面的經驗。
OpenCL源代碼使用clang編譯為中間LLVM偽代碼(LLVM IR),然後將其轉換為SPIR-V格式的OpenCL內核的中間表示形式。
SPIR-V表示中的核心已轉移到Mesa, 轉換為NIR格式,進行優化並轉移到NIR-to-DXIL,以生成合適的DXIL計算著色器 使用基於DirectX 12的運行時執行GPU。 提出了一個新的OpenCL運行時,而不是在OpenCL Mesa實現中使用Clover,它可以更直接地轉換為DirectX 12 API。
OpenCL和OpenGL驅動程序是使用Gallium接口準備的 Mesa中提供的功能,可讓您在創建驅動程序時繞過OpenGL詳細信息,並將OpenGL調用轉換為更接近現代GPU操作的圖形基元的實體。
Gallium驅動程序接受OpenGL命令,並且在NIR到DXIL轉換器的參與下,使用D3D12驅動程序來構建在GPU上運行的命令緩衝區。
最後, 開發人員提到這是早期工作 並且他們希望控制器會隨著時間的推移而改進:
這僅僅是公告,還有很多工作要做。 目前,在某些情況下,我們有一些可行的方法,但我們才剛剛開始摸索。
首先,我們需要達到我們想要的功能級別。 我們目前的目標是通過針對OpenCL 1.2和OpenGL 3.3的一致性測試。 我們還有很長的路要走,但是只要有一點點努力和汗水,我相信我們一定會實現的。
如果您有興趣了解更多信息, 您可以在中查看原始註釋 以下鏈接 或對於那些有興趣查看源代碼的人可以這樣做 從這個鏈接。