Das Unternehmen Collabora neuer Gallium-Treiber für Mesa, der eine Schicht zur Organisation der Arbeit von API OpenCL 1.2 und OpenGL 3.3 über Treiber mit Unterstützung für DirectX 12 (D3D12) implementiert. Code unterliegt der MIT-Lizenz.
Der vorgeschlagene Treiber ermöglicht die Nutzung von Mesa auf Geräten, die ursprünglich OpenCL und OpenGL nicht unterstützen, sowie als Ausgangspunkt für die Portierung von OpenGL/OpenCL-Anwendungen, um über D3D12 zu arbeiten. Für GPU-Hersteller bietet das Subsystem die Möglichkeit, Unterstützung für OpenCL und OpenGL bereitzustellen, wenn nur Treiber mit D3D12-Unterstützung vorhanden sind.
Zu den nahen Plänen gehört das Erreichen einer vollständigen Kompatibilität von OpenCL 1.2 und OpenGL 3.3, die Überprüfung der Kompatibilität mit Anwendungen und die Integration von Entwicklungen in die Hauptversion von Mesa. Die Entwicklung erfolgt in Zusammenarbeit mit Ingenieuren von Microsoft, die Toolkit für die Umstellung von Spielen von D3D11 auf D3D12 und die Bibliothek , die typische grafische Grundelemente über D3D12 implementiert.
Die Implementierung umfasst den Gallium-Treiber, den OpenCL-Compiler, das OpenCL-Laufzeitsystem und den NIR-to-DXIL-Shader-Compiler, der die in Mesa verwendete Zwischenrepräsentation der NIR-Shader in das binäre DXIL-Format (DirectX Intermediate Language) umwandelt, das in DirectX 12 unterstützt wird und auf dem LLVM 3.7 Bitcode basiert ( von Microsoft, im Wesentlichen ein erweiterter Fork von LLVM 3.7). Der OpenCL-Compiler wurde auf der Grundlage der Entwicklungen des LLVM-Projekts und der Toolbox .
erstellt. Quelltexte mit OpenCL-Erweiterungen werden mithilfe von clang in eine Zwischenrepräsentation von LLVM (LLVM IR) kompiliert, die anschließend in die Zwischenrepräsentation von OpenCL-Kernen im SPIR-V-Format umgewandelt wird. Kerne in der SPIR-V-Darstellung werden in Mesa übertragen, in das NIR-Format übersetzt, optimiert und an NIR-to-DXIL übergeben, um Compute-Shader im DXIL-Format zu generieren, die zur Ausführung auf GPU mit der auf DirectX 12 basierenden Laufzeit geeignet sind.
Statt Clover, das in der Mesa-Implementierung von OpenCL verwendet wird, wurde ein neuer OpenCL-Laufzeitumgebung vorgeschlagen, die mehr direkte Umwandlungen in die API DirectX 12 zulässt.
OpenCL- und OpenGL-Treiber wurden mit der in Mesa bereitgestellten Gallium-Schnittstelle erstellt, die es ermöglicht, bei der Erstellung von Treibern nicht auf spezifische OpenGL-Details einzugehen und OpenGL-Aufrufe in Entitäten zu transkribieren, die den grafischen Grundelementen näher sind, mit denen moderne GPUs arbeiten. Der Gallium-Treiber akzeptiert OpenGL-Befehle und nutzt den NIR-to-DXIL-Übersetzer.
bildet Befehls-Puffer, die auf der GPU unter Verwendung des D3D12-Treibers ausgeführt werden.
Quelle: opennet.ru
