Virksomheden Collabora Den nye Gallium-driver til Mesa implementerer et lag til at organisere arbejdet med API'erne OpenCL 1.2 og OpenGL 3.3 oven på drivere, der understøtter DirectX 12 (D3D12). Koden under MIT-licensen.
Den foreslåede driver gør det muligt at bruge Mesa på enheder, der oprindeligt ikke understøtter OpenCL og OpenGL, samt fungerer som et udgangspunkt for portering af OpenGL/OpenCL-applikationer til at køre oven på D3D12. For GPU-producenter giver subsystemet mulighed for at tilbyde understøttelse af OpenCL og OpenGL, når der kun er tilgængelige drivere med D3D12-understøttelse.
Blandt de nærmeste planer er at opnå fuld gennemgang af tests for kompatibilitet med OpenCL 1.2 og OpenGL 3.3, verificere kompatibilitet med applikationer og inkludere resultaterne i hovedstrukturen af Mesa. Udviklingen sker i samarbejde med ingeniører fra Microsoft, der udvikler værktøjer til at overføre spil fra D3D11 til D3D12 og biblioteks , der implementerer standard grafiske primitive oven på D3D12.
Implementeringen inkluderer Gallium-driveren, OpenCL-kompilatoren, OpenCL-runtime og NIR-to-DXIL shaderkompilatoren, der konverterer det anvendte mellemformat af shaders i Mesa (NIR) til det binære format DXIL (DirectX Intermediate Language), som understøttes i DirectX 12 og er baseret på LLVM 3.7-bittkode ( fra Microsoft, som i bund og grund er en udvidet fork af LLVM 3.7). OpenCL-kompilatoren er baseret på resultaterne fra LLVM-projektet og værktøjerne .
Kildekoder med OpenCL-udvidelser kompileres ved hjælp af clang til mellemliggende pseudokode (LLVM IR), som derefter konverteres til et mellemformat for OpenCL-kernel i SPIR-V-format. Kerner i SPIR-V-repræsentation sendes til Mesa, oversættes til NIR-format, optimeres og sendes til NIR-to-DXIL for generering af beregningsshaders i DXIL-format, egnet til udførelse på GPU med et runtime baseret på DirectX 12.
I stedet for Clover, som anvendes i Mesas implementering af OpenCL, er der foreslået en ny OpenCL-runtime, der muliggør flere direkte oversættelser til API'en DirectX 12.
OpenCL og OpenGL-drivere er forberedt ved hjælp af det tilgængelige Gallium-interface i Mesa, der gør det muligt at fokusere mindre på OpenGL-specifikke detaljer, og at oversætte OpenGL-opkald til entiteter, der er tættere på de grafiske primitive, som moderne GPU'er arbejder med. Gallium-driveren modtager OpenGL-kommandoer og ved inddragelse af NIR-to-DXIL oversætteren.
danner kommando buffere, der køres på GPU'en, ved hjælp af D3D12-driveren.
Kilde: opennet.ru
