一、Mesa 介紹
Mesa (或Mesa3D)是一個 OpenGL/Vulkan 的實現,以及為所有開源圖形驅動提供各種 GL 的入口點, 它是一個專案的名字。由它編譯出來的庫是下面這些:
或者這些檔案:
其中需要注意的是這幾個檔案:libGL.so,libEGL.so,libGLESv2.so,根據名字很顯然,他們分別實現了對應的API。
Mesa有兩個作用:
- 對接各種GPU硬體,將應用層對GL API的呼叫轉換到對硬體GPU的呼叫上;
- 各種 GL API 的純軟實現,當沒有可用的硬體時,它可以提供傳軟體的 GL API 的實現;
它可以用於Linux,Windows,Mac等系統平臺。在Windows上執行時它提供OpenGL API over DirectX的轉換。
它實現了 OpenGL,Vulkan以及其他的圖形API。Mesa把這些API呼叫轉換到相應驅動程式(其實並不是真正的驅動程式,是使用者態的DRI驅動程式)呼叫上。AMD和Intel都提供他們對Mesa支援的驅動程式,Nvidia官方沒有提供開源的支援Mesa的驅動程式,只提供了商用的驅動程式,因此開源界開發了 Nouveau 作為支援Nvidia顯示卡的開源版本的支援Mesa的驅動程式。
在Ubuntu上它由libglvnd-dev包提供(vnd=Vendor neutral GL dispatch library),大部分帶圖形介面的Linux發行版會內建Mesa(還沒有找到特例,甚至ChromeOS系統都內建Mesa)。
具體來講它實現了包括但不限於這些API: OpenGL,Vulkan,OpenVG,OpenGL ES,EGL,GLX。對每種API的支援情況如下:
二、Mesa對SL的支援情況
SL指 Shading Language,著色器語言,是用來寫那些跑在GPU上的程式的語言,常見的有微軟的 HLSL,以及OpenGL的 GLSL。他們需要先轉換成IR(類似彙編指令)指令才能跑在GPU上,就像不同的CPU架構會有不同的指令集一樣,各個GPU廠家也都開發了不同的GPU指令集。NIR是Mesa支援的用來統一各種IR的指令集。Intel對它的支援是最完善的。
Mesa中的IR架構:
三、Gallium3D
Gallium3D 是Mesa提出的用於簡化GPU驅動開發的框架。
下面是Mesa結構圖,展示了mesa如何通過libGL庫跟核心打交道,以及展示了新舊兩種使用者態裝置驅動程式的實現方式。
左邊的驅動實現方式非常簡單直接,DeviceDriver部分直接是和硬體相關的,一般由硬體廠商開發,這個方案的mesa就相當於一個OpenGL的轉換器,把上層應用對OpenGL的呼叫轉換到對特定硬體的呼叫上,缺點是裝置廠商需要針對不同的作業系統,不同的GL API開發不同的驅動。
右邊的方案是Gallium3D的方案,特點是新增了分層,它把DeviceDriver部分的上下都給抽象了出來,OS WInSys部分抽象了當前的作業系統使得同一個DeviceDriver可以用於不同的作業系統,API State Tracker部分抽象了上層的不同的GL介面,使得同一個DeviceDriver可以支援不同的GL介面。整體大大降低了DeviceDriver的開發和適配難度。
下圖展示了基於Gallium3D的驅動實現方案的詳細資訊,可以看到各種GL API都可以通過不同的State Tracker來統一和不同的硬體驅動互動,並且不同的硬體驅動也可以通過WinSys和不同的系統對接。
四、極客發燒友動手指南
如果你想從0到1手工搭建出來GUI圖形棧,你需要知道一個廠家是如何支援Linux圖形棧的,以及如何使用各個廠家的驅動程式,可以去他們的官網上查詢,比如Intel整合顯示卡的相關驅動以及韌體可以在 01.org/zh/linuxgra… 下載。
其他廠商的驅動:
Hardware drivers include:
- Intel i965, i945, i915. See Intel's website
- AMD Radeon series. See RadeonFeature
- NVIDIA GPUs. See Nouveau Wiki
- VMware virtual GPU
Software drivers include:
- llvmpipe - uses LLVM for x86 JIT code generation and is multi-threaded
- softpipe - a reference Gallium driver
- swrast - the legacy/original Mesa software rasterizer
Additional driver information:
- DRI hardware drivers for the X Window System
- Xlib / swrast driver for the X Window System and Unix-like operating systems
- Microsoft Windows
- VMware guest OS driver
參考連結:
www.freedesktop.org/software/ga…
www.freedesktop.org/wiki/Softwa…
packages.debian.org/sid/libglvn…
www.linuxfromscratch.org/blfs/view/s…