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 -或其他某种驱动程序模型。