Mesa 3D
# Mesa 3D

Mesa 3D ist eine freie Grafikbibliothek, die die OpenGL-Spezifikation umsetzt und auf vielen Betriebssystemen wie Linux, AmigaOS3, AmigaOS4, SkyOS, Haiku, ZETA und BSD genutzt wird, um OpenGL-Funktionalität zu implementieren. Hardwarebeschleunigte 3D-Grafik ist durch die Kombination mit der Direct Rendering Infrastructure möglich. Die Quellen der Mesa-Bibliothek stehen unter der MIT-Lizenz.

## Geschichte

Im August 1993 begann Brian Paul mit der Entwicklung einer Grafikbibliothek, die zu der damals neuen OpenGL-Programmierschnittstelle kompatibel sein sollte. Im November 1994 erhielt er die Genehmigung von SGI, Mesa zu veröffentlichen, und im Februar 1995 erschien Mesa 1.0. OpenGL war bis zu diesem Zeitpunkt noch nicht weitreichend verfügbar, und viele Entwickler kamen durch Mesa mit OpenGL in Kontakt. Im Oktober 1996 erschien Mesa 2.0, welches OpenGL 1.1 unterstützte. Die Version 2.2, die im März 1998 erschien, unterstützte die Hardwarebeschleunigung via 3dfx-Glide.

Die am 22. Juni 2007 veröffentlichte Version 7.0 unterstützte erstmals OpenGL 2.1.

Mit der Veröffentlichung der Version 8.0 am 9. Februar 2012 wird die OpenGL-3.0-Spezifikation unterstützt. Mit der Version 9.0 vom 8. Oktober 2012 kam die Unterstützung für OpenGL 3.1 hinzu. Ab der Version 10.0 aus dem Jahr 2013 wird OpenGL 3.3 unterstützt.

Mesa 11.x unterstützt alle Erweiterungen bis OpenGL 4.1 vollständig sowie den Großteil von OpenGL 4.2 bis 4.5.

Seit Mesa 12 implementieren die Treiber für neuere AMD-, Nvidia und Intel-Grafikchips OpenGL 4.3 vollständig. Bis auf eine Erweiterung aus OpenGL 4.4 unterstützt der Intel-Treiber alle Erweiterungen für OpenGL 4.5. Zusätzlich enthält Mesa 12 einen Vulkan-Treiber für Intel-Chips ab der Ivy-Bridge-Generation. Dazu unterstützt ab Mesa 12 offiziell ein neuer Software-Treiber für CPU-Cluster mit dem Namen „OpenSWR“ (Open Software Rasterizer) OpenGL 3.1+. OpenSWR setzt auf LLVMpipe auf, skaliert sehr gut mit der Rechenleistung und ist für große Datensätze gedacht, wie sie in numerischen Simulationen vorkommen. Im Vergleich zu LLVMpipe werden mit Mesa 10.5.1 im Alpha-2-Status aus dem Jahr 2015 Beschleunigungen um den Faktor 29 bis 51 erreicht. In Mesa wird er mit „GALLIUM_DRIVER=swr“ eingeschaltet.

Mit Mesa 13 wird OpenGL 4.4 und 4.5 vollständig unterstützt. Intel ab Broadwell, AMD GCN und Nvidia Fermi und Kepler (Maxwell nur 4.1) unterstützen alle Erweiterungen, aber werden wegen teilweise fehlender Zertifizierung noch mit 4.3 oder 4.4 (13.0.1) angezeigt.

In Version 17.0 (neue Zählung) gibt es einige Verbesserungen (siehe Mesamatrix). Für Intel-Grafik steht bei Haswell OpenGL 4.5 (bisher 3.3, mit nur 3 fehlenden Erweiterungen in 4.0 und 4.1) und OpenGL ES 3.2 fast komplett zur Verfügung. Die Zertifizierung von OpenGL 4.4 für NVIDIA Fermi und Kepler, sowie für OpenGL 4.5 für AMD GCN steht ebenfalls zur Verfügung, nachdem diese in Mesa 13.0.x noch nicht enthalten war. OpenGL 4.3 steht für NVIDIA Maxwell und Pascal (GM107+) zur Verfügung. Jedoch nur Maxwell 1 (GeForce GTX 750 und andere mit GM1xx) profitiert von starken Gewinnen durch Erhöhung der Taktfrequenzen unter Last. Weiterhin leidet Maxwell 2 (GeForce 980 und andere mit GM2xx) unter dieser fehlenden Regelung so stark, dass nur 1/3 bis 1/2 der möglichen Leistung mit Mesa verfügbar ist.

Khronos stellt seine CTS (test Suite) für OpenGL 4.4, 4.5 und OpenGL ES 3.0+ nun als Open Source zur Verfügung. Damit sind Tests für alle Entwickler kostenlos verfügbar. Für Mesa 13 und 17 sind nach bestandenen Tests für einige Module wie Nouveau höhere OpenGL-Stufen möglich.

Version 17.1.0 ist seit 10. Mai 2017 verfügbar und enthält einige Verbesserungen wie OpenGL 4.2 für Intel Ivy Bridge (für Gen 7 bisher 3.3) und weiterer Beschleunigung für Nvidia Maxwell und Pascal, sowie für Vulkan mit verbessertem RADV und ANV.

In Version 17.2 werden Intel und AMD zum Teil stark in 3D-Spielen beschleunigt. Dazu werden einige OpenGL 4.6-Erweiterungen unterstützt. Für NVIDIA ist Nouveau weiterhin nur 2. Wahl, weil Hardwareinformationen zur Beschleunigung, wie sie den Nvidia-Entwicklern der originalen Treibern zur Verfügung stehen, nicht frei verfügbar sind. Die Tests zu OpenGL 4.5 waren für Kepler zu 98,6 % erfolgreich.

In Version 17.3 wurden einige Erweiterungen für OpenGL 4.6 integriert, so dass in der nächsten Version mit Spir-V-Unterstützung OpenGL 4.6 komplett unterstützt würde. Beim Vulkan-Treiber wurden deutliche Fortschritte für Radeon-Grafikkarten erreicht und die Unterstützung einer wichtigen Kompressionstechnik ist neu. Darüber hinaus gibt es viele Optimierungen bei den OpenGL-Treibern für die GPUs von AMD und Intel. RADV als Vulkan-Treiber für AMD erfüllt nun vollständig den Khronos-Test.

In Version 18.0 wurden weitere Erweiterungen für OpenGL fertiggestellt, um die Unterstützung von OpenGL 4.6 zu komplettieren. Es fehlt weiterhin Spir-V. Vulkan 1.0 wurde weiter ausgebaut und auf eine neue Stufe optimiert. Nvidia Nouveau unterstützt auch wegen einiger Fehler in Mesa, die zu Testfehlern in OpenGL 4.4 und 4.5 in den Tests führen, offiziell nur OpenGL 4.3. Die Intel und AMD-Treiber wie RadeonSI unterstützen OpenGL 4.5 mit den gleichen Fehlern. Der AMD R600g-Treiber für ältere AMD Terascale-Karten ist auf dem Weg OpenGL 4.5 zu unterstützen und übertrifft damit AMD mit maximal OpenGL 4.4 mit seinen offiziellen Treibern. Dabei bleiben R600 und Evergreen wegen fehlender FP64-Einheiten auf maximal OpenGL 4.3 limitiert. Intel Cannon Lake wird nun auch unterstützt und damit auch die neueste Hardware von Intel. Dazu wurde das neue Build-System Meson als neuer Standard freigeschaltet.

In Version 18.1 steht Vulkan 1.1 für Intel ab Sky Lake (ANV) und AMD GCN (RADV) zur Verfügung. Dabei muss natürlich die Hardware alle Erweiterungen unterstützen. Für AMD GCN der 1. und 2. Generation (GCN 1.0 und 1.1) wurde dies bei AMD in den eigenen Windows-Treibern und Conformance Tests bei Khronos verneint. Intel stellt ab Sky Lake Vulkan 1.1 zur Verfügung. AMD RX 550 und RX Vega 64 sind dort schon mit RADV für Vulkan 1.1 registriert.

In Version 18.2 stehen viele Verbesserungen zur Verfügung. OpenGL 4.6 vollständig zu unterstützen wurde noch nicht erreicht. Der neue Soft-Treiber VIRGL unterstützt nun OpenGL 4.3 und OpenGL ES 3.2. RadeonSI unterstützt nun ebenfalls OpenGL ES 3.2 und im Kompatibilitätsmodus nun OpenGL 4.4 nach 3.1 in Version 18.1. Die Unterstützung der ASTC-Texturkompression für RadeonSI dient in Zukunft in anderen Treibern als Vorbild für diese Erweiterung. Dazu kommt für die neue Vega-20-Baureihe Unterstützung im RadeonSI-Treiber. Vulkan 1.1-Erweiterungen und weitere Erweiterungen werden im Intel ANV und AMD RADV unterstützt.

In Version 18.3 im Dezember 2018 stehen viele Verbesserungen zur Verfügung. Unterstützung für AMD Raven 2, Picasso, Vega 20 in RadeonSI und RADV ist nur ein Punkt von vielen. Intel Whiskey Lake und Amber Lake werden nun ebenfalls unterstützt. OpenGL 4.6 wurde mangels SPIR-V noch nicht erreicht.

In Version 19.0 im März 2019 stehen viele Verbesserungen zur Verfügung. RadeonSI unterstützt AMD Freesync mit Linux 5.0+. Meson löst Autotools in der Erstellung des Treiber-Paketes ab.

In Version 19.1 im Juni 2019 stehen viele Verbesserungen zur Verfügung. Es wurden viele Vulkan-Module fertig gestellt. RadV unterstützt AMD Freesync mit Linux 5.0+.

In Version 19.2 im September 2019 stehen viele Verbesserungen besonders für AMD Navi und Vulkan Features zur Verfügung. Dazu steht OpenGL 4.5 auf einigen Karten mit R600-Architektur zur Verfügung.

OpenGL 4.6 steht nun in Intel i965 und Iris in Mesa 19.3 zur Verfügung. Für den neuen Treiber Iris für Intel ab Broadwell Gen 8 zeigt sich eine stark verbesserte Performance in vielen Tests, obwohl noch einige Fehler vorhanden sind.

In Version 20.0 unterstützt AMD RadeonSI OpenGL 4.6 und der neue Intel Iris Treiber für neuere Hardware ab Broadwell Gen 8 wurde weiter verbessert. Intel i965 wird für ältere Hardware bis Haswell Gen 7.5 weiterentwickelt.

In 20.1 wurde der neue Virtuelle Treiber Zink basierend auf Vulkan mit ersten OpenGL Funktionen vorgestellt. Open GL 3.0 bis 3.3 sind vollständig verfügbar in 20.3. LLVM-pipe unterstützt in 20.2 OpenGL 4.3 und in 20.3 OpenGL 4.4 und 4.5. Softpipe unterstützt in 20.3 OpenGL ES 3.1. Intel Alderlake 12. Gen mit der neuen Xe-Grafik wird auch in 20.3 unterstützt. d3d12 ist eine neue Emulation von Microsoft und Collabora für OpenGL und OpenCL mit DirectX 12 als API für WSL in Windows 10. OpenGL bis 3.3 wird in Mesa 21.0 unterstützt. Zink wird OpenGL 4.0 und 4.1 unterstützen. In ARM Panfrost wurde OpenGL 3.1 komplettiert. In Qualcomm Freedreno wird OpenGL 3.3 voll unterstützt. Der aktuelle Stand der Entwicklung ist in Mesamatrix verfügbar.

21.1 ist seit Anfang Juni verfügbar mit über 1000 Änderungen in den Release Notes. Zink unterstützt nun voll OpenGL 4.6 und OpenGL ES 3.1. Treiber für Vulkan mit Lavapipe, Qualcomm Turnip, Broadcom v3dv und neu Google Venus sind zur Zeit Hot Spot der Entwicklung. Im Bereich der OpenGL-Treiber machen ARM Panfrost und die Emulation Zink zurzeit die größten Fortschritte.

21.3 ist seit Mitte November verfügbar. U. a. für Lavapipe ist Vulkan 1.2 nun voll unterstützt, LLVMpipe wurde für 2D um den Faktor 2-3 beschleunigt und VA-API kann nun auch mit AV1-Videos umgehen.

In Mesa 22.1 wird der Nvidia-Driver Nouveau auf NIR als Default umgestellt. Das hat erhebliche Vorteile in Performance und weiteren Entwicklung. Treiber ohne NIR-Unterstützung werden bei Mesa nicht mehr in Zukunft weiterentwickelt. Sie werden jedoch als Classic-Driver in Projekten wie Amber weitergeführt, damit hier die zugehörige Hardware mit neuen Linux-Kernel-Varianten funktioniert.

Ab Mesa 22.2 ist NIR noch wichtiger. Etwa 22.000 Zeilen alter Code für GLSL-to-TGSI entfallen. NIR-to-TGSI übernimmt mit GLSL-to-NIR diese Aufgabe. TGSI soll dann später ganz entfallen und nur noch native NIR-Treiber mit nur noch GLSL-to-NIR unterstützt werden.

In Mesa 22.3 ist RustiCL experimentell verfügbar mit OpenCL 3.0 und image support für Darktable. Der Asahi Treiber für Apple M1 und M2 unterstützt schon viele OpenGL 3.x-Funktionen. AMD RDNA 3 wird erstmals unterstützt. Intel Arc Treiber wird besser unterstützt. Qualcomm Adreno unterstützt nun OpenGL 4.5+. Google Venus unterstützt nun Vulkan 1.3+.

In Mesa 23.0 ist mit Vulkan Ray Tracing ein Entwicklungsschwerpunkt. Intel Arc und AMD RDNA sind hier die ersten Treiber, die hier profitieren. Microsoft entwickelt mit Dozen einen Vulkan Treiber für WSL.

In 23.1 unterstützt Dozen Vulkan 1.2+. In Mesamatrix wurde nur bisher 1.0+ bestätigt. Video Codecs 264 und 265 werden über Vulkan unterstützt. VP9 und AV1 sollen später folgen. RustiCL wird mit Spir-V erweitert für HIP und SYCL. VirGL wird in 23.2 OpenGL 4.6 voll unterstützen. Dazu wird der Vulkan Support wieder stark besetzt. Vulkan Ray Tracing für AMD RDNA 2 und 3 wurde frei geschaltet. OpenGL Emulation mit Zink basierend auf dem RadV Vulkan-Treiber erreicht schon oft die Performance von dem nativen RadeonSI-Treiber bei AMD RDNA-Hardware. RustiCL ist auf dem schnellen Weg Clover abzulösen.

## Softwarearchitektur

### Implementierte APIs

Das Mesa 3D-Projekt beinhaltet und pflegt auch Implementierungen von diversen Programmierschnittstellen für die Hardware-beschleunigte Rasterung:

* OpenGL (voll unterstützt bis zu 4.6, weitere Zusätze in Arbeit)
* OpenGL ES (voll unterstützt bis zu 3.2, weitere Zusätze in Arbeit)
* GLX (voll unterstützt bis zu 1.4)
* EGL (voll unterstützt bis zu 1.5)
* OpenVG (1.1, ab Version 10.6 nicht mehr vorhanden)
* Glide (überholt)
* Vulkan (1.0: Intel Graphic Gen7+ ANV ab Version 12, AMD GCN mit RADV ab Version 13, 1.1: in 18.1 für ANV mit Intel Graphic Gen9+ und für RADV mit AMD GCN Gen3+, 1.2: ab Mesa 20.0 für ANV mit Intel Graphics Gen8+ und RADV mit AMD GCN2+)
* Direct3D9 (unter der Bezeichnung "Gallium Nine" existiert eine vollständige Implementierung der Direct3D9 API von Microsoft)
* OpenCL (mit Mesa 20.3 komplett 1.0, 1.1 und 1.2 in aktuell langsamer Entwicklung in GalliumCompute, neue Impulse durch Umstellung von TGSI auf NIR und modularem OpenCL 3.0), OpenCL mit RustiCL (experimentell ab 22.2, löst Clover in 23.x ab, mit wichtigem Image Support). Dabei wird hier Rust als moderne Programmiersprache verwendet, auch um Speicherfehler zu vermeiden.

Das ebenfalls unter einer freien Lizenz entwickelte Wine-Projekt beinhaltet Unterstützung von Microsofts Direct3D. Diese kann entweder unter Zuhilfenahme einer Übersetzung von Direct3D auf OpenGL genutzt werden, oder aber im Falle von Direct3D9 auch direkt mittels dem Gallium3D State-Tracker "Gallium Nine". Dadurch entstehen so gut wie keine Leistungseinbußen bei Spielen und Grafik-Benchmarks.

