Collabora nuovo driver Gallium per Mesa che implementa uno strato per far funzionare le API OpenCL 1.2 e OpenGL 3.3 sopra i driver con supporto DirectX 12 (D3D12). Codice sotto licenza MIT.
Il driver proposto consente l'uso di Mesa su dispositivi che inizialmente non supportano OpenCL e OpenGL, fungendo anche da punto di partenza per il porting di applicazioni OpenGL/OpenCL per funzionare su D3D12. Per i produttori di GPU, il sottosistema offre la possibilità di fornire supporto per OpenCL e OpenGL, avendo solo driver con supporto D3D12.
Tra i prossimi obiettivi c'è il completamento dei test di compatibilità per OpenCL 1.2 e OpenGL 3.3, la verifica della compatibilità con le applicazioni e l'inclusione delle innovazioni nel core di Mesa. Lo sviluppo avviene in collaborazione con ingegneri Microsoft che stanno sviluppando strumentazione per convertire i giochi da D3D11 a D3D12 e la libreria , che implementa primitive grafiche standard sopra D3D12.
L'implementazione include il driver Gallium, il compilatore OpenCL, il runtime OpenCL e il compilatore di shader NIR-to-DXIL, che trasforma la rappresentazione intermedia degli shader NIR utilizzata in Mesa nel formato binario DXIL (DirectX Intermediate Language), supportato in DirectX 12 e basato su LLVM 3.7. di Microsoft, fondamentalmente un fork avanzato di LLVM 3.7). Il compilatore OpenCL è stato sviluppato sulla base delle risorse del progetto LLVM e degli strumenti. .
I codici sorgente con estensioni OpenCL vengono compilati utilizzando clang in un pseudocodice intermedio LLVM (LLVM IR), che viene poi trasformato in una rappresentazione intermedia dei kernel OpenCL nel formato SPIR-V. I kernel nella rappresentazione SPIR-V vengono inviati a Mesa, traslati nel formato NIR, ottimizzati e inviati a NIR-to-DXIL per generare shader computazionali nel formato DXIL, idonei per l'esecuzione sulla GPU utilizzando un runtime basato su DirectX 12.
Invece di Clover, utilizzata nell'implementazione OpenCL di Mesa, è stato proposto un nuovo runtime OpenCL che consente più trasformazioni dirette nell'API DirectX 12.
I driver OpenCL e OpenGL sono stati preparati utilizzando l'interfaccia Gallium fornita in Mesa, che consente la creazione di driver senza approfondire i dettagli specifici di OpenGL e di tradurre le chiamate OpenGL in entità più vicine ai primitivi grafici utilizzati dalle moderne GPU. Il driver Gallium riceve i comandi OpenGL e, coinvolgendo il traduttore NIR-to-DXIL,
forma i buffer di comandi che vengono eseguiti sulla GPU utilizzando il driver D3D12.
Fonte: opennet.ru
