Gallium3D(Mesa 3D圖形庫) 是一組接口和支持庫,旨在簡化用於多個操作系統的渲染或視頻加速API的3D圖形芯片組的設備驅動程序的編程。
Mesa /DRI and Gallium3D have different driver models. Both share a lot of free and open-source code
GalliumStatus提供了一個功能矩陣,並且在Wikipedia中分別記錄了為圖形芯片編寫免費和開源設備驅動程序的工作:Free and open-source graphics device driver。
Software architecture
Gallium3D通過將圖形設備驅動程序分為三個部分來簡化設備驅動程序的編程。 這通過引入兩個接口來實現:Gallium3D狀態跟蹤器接口和Gallium3D WinSys接口(Gallium3D State Tracker Interface and the Gallium3D WinSys Interface)。 這三個組件稱為:
Gallium3D example matrix.
1、Gallium3D State Tracker
用來尋址設備驅動程序的每個圖形API都有自己的狀態跟蹤器,例如 有一個是用於OpenGL的Gallium3D狀態跟蹤器,另一個是用於Direct3D或GLX的跟蹤器。 每個狀態跟蹤器均包含Gallium3D狀態跟蹤器接口的實現,並且是唯一的,這意味着所有現有的Gallium3D設備驅動程序都共享該狀態。
2、Gallium3D hardware device driver
這是實際的代碼,特定於底層3D圖形加速器,但僅在Gallium3D WinSys Interface允許的范圍內。 每個可用的圖形芯片都有一個獨特的Gallium3D硬件設備驅動程序,並且每個驅動程序都實現Gallium3D狀態跟蹤器接口以及Gallium3D WinSys接口。 Gallium3D硬件設備驅動程序僅理解TGSI(鎢圖形着色器基礎結構),這是一種用於描述着色器的中間語言。 此代碼將着色器從GLSL轉換為TGSI,再轉換為GPU實現的指令集。
3、Gallium3D WinSys
這特定於操作系統的基礎內核,每個內核都實現了Gallium3D WinSys接口,以與所有可用的Gallium3D硬件設備驅動程序對接。
Differences from classic graphics drivers
Gallium3D提供了一個統一的API,它公開了標准的硬件功能,例如現代硬件上的着色器單元。 因此,諸如OpenGL 1.x / 2.x,OpenGL 3.x,OpenVG,GPGPU基礎結構甚至Direct3D之類的3D API(在Wine兼容層中都可以找到)僅需要一個后端,即狀態跟蹤器, 以Gallium3D API為目標。 相比之下,經典DRI設備驅動程序對於每個硬件平台都需要不同的后端,而其他幾個API需要轉換為OpenGL(以代碼重復為代價)。 這樣寫意味着,例如 AMD Catalyst同時實現了OpenGL和Direct3D,GeForce的供應商驅動程序也已實現。
在Gallium3D下,Direct Rendering Manager(DRM)內核驅動程序將管理內存,而Direct Rendering Interface(DRI2)驅動程序將更加面向GPU處理。 radeon驅動程序或Intel的驅動程序最終支持DRI1和DRI2,並在系統上可用的情況下使用了DRI2。 此外,Gallium3D還需要一定程度的着色器支持,這在較舊的顯卡(例如,顯卡)上是不可用的。 ATi r100-r200,因此使用這些卡的用戶需要繼續使用帶有DRI2的Mesa 3D進行3D使用。
Tungsten Graphics Shader Infrastructure
Tungsten Graphics Shader基礎結構(TGSI)是一種中間表示,例如LLVM中間表示或Vulkan API和OpenCL 2.1使用的新的標准便攜式中間表示(SPIR)。 將以OpenGL着色語言編寫的着色器翻譯/編譯為TGSI,然后進行優化,然后將TGSI着色器編譯為用於所用GPU指令集的着色器。
LLVM usage
此外,目前使用的Gallium3D的模塊化結構,正在努力使用LLVM編譯器套件並創建一個模塊來動態優化着色器代碼。[129]
該庫使用稱為Tungsten Graphics Shader Infrastructure(TGSI)的可擴展二進制中間表示形式表示每個着色器程序,然后LLVM將其轉換為針對目標硬件優化的GLSL着色器。
Adoption
已經或正在根據通過(clean-room reverse engineering)反向工程獲得的信息編寫的一些免費和開源圖形設備驅動程序采用了Gallium3D提供的驅動程序模型,例如 nouveau等(有關完整列表,請參閱免費和開源圖形設備驅動程序)。 主要原因可能是Gallium3D驅動程序模型減少了所需編寫的代碼量。當然,在獲得免費軟件許可的情況下,任何人都可以隨時重寫此代碼以實施DRI -或其他某種驅動程序模型。