Azienda Collabora
Il driver proposto consente di utilizzare Mesa su dispositivi che non supportano nativamente OpenCL e OpenGL e anche come punto di partenza per il porting di applicazioni OpenGL/OpenCL da eseguire su D3D12. Per i produttori di GPU il sottosistema consente di fornire il supporto per OpenCL e OpenGL, se sono disponibili solo driver con supporto D3D12.
Tra i piani immediati figurano il raggiungimento del pieno superamento dei test di compatibilità di OpenCL 1.2 e OpenGL 3.3, la verifica della compatibilità con le applicazioni e l'inclusione degli sviluppi nella composizione principale di Mesa. Lo sviluppo viene effettuato in collaborazione con gli ingegneri Microsoft che si occupano di sviluppo
L'implementazione include il driver Gallium, il compilatore OpenCL, il runtime OpenCL e il compilatore shader NIR-to-DXIL, che converte la rappresentazione intermedia degli shader NIR utilizzati in Mesa nel formato binario DXIL (DirectX Intermediate Language), supportato in DirectX 12 e basato su Codice bit LLVM 3.7 (
I sorgenti con estensioni OpenCL vengono compilati utilizzando clang nello pseudocodice intermedio LLVM (LLVM IR), che viene quindi convertito in una rappresentazione intermedia dei kernel OpenCL in formato SPIR-V. I core nella rappresentazione SPIR-V vengono passati a Mesa, tradotti in formato NIR, ottimizzati e passati a NIR-to-DXIL per generare shader di calcolo in formato DXIL, adatti per l'esecuzione su GPU utilizzando il runtime basato su DirectX 12.
Invece di Clover, l'implementazione OpenCL utilizzata in Mesa, viene proposto un nuovo runtime OpenCL, che consente conversioni più dirette all'API DirectX 12.
I driver OpenCL e OpenGL vengono preparati utilizzando l'interfaccia Gallium fornita in Mesa, che consente di creare driver senza entrare nei dettagli specifici di OpenGL e tradurre le chiamate OpenGL in sostanza più vicine alle primitive grafiche su cui operano le moderne GPU. Driver Gallium, accetta comandi OpenGL e quando si utilizza il traduttore NIR-to-DXIL
genera buffer di comandi che vengono eseguiti sulla GPU utilizzando il driver D3D12.
Fonte: opennet.ru