Azienda Collabora nuovo driver Gallium per Mesa, che implementa uno strato per l'organizzazione del funzionamento delle API OpenCL 1.2 e OpenGL 3.3 sopra i driver con supporto DirectX 12 (D3D12). Codice sotto licenza MIT.
Il driver proposto consente di utilizzare Mesa su dispositivi che inizialmente non supportano OpenCL e OpenGL, nonché come punto di partenza per il porting di applicazioni OpenGL/OpenCL per lavorare sopra D3D12. Per i produttori di GPU, il sottosistema offre la possibilità di fornire supporto per OpenCL e OpenGL, in presenza di driver con supporto solo per D3D12.
Tra i prossimi piani si segnalano il raggiungimento del superamento completo dei test di compatibilità OpenCL 1.2 e OpenGL 3.3, il controllo della compatibilità con le applicazioni e l'inclusione dei risultati nel nucleo principale di Mesa. Lo sviluppo è condotto congiuntamente con ingegneri di Microsoft, che stanno sviluppando un toolkit per il trasferimento di giochi da D3D11 a D3D12 e la libreria , che implementa primitivi grafici 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 usata in Mesa nel formato binario DXIL (DirectX Intermediate Language), supportato in DirectX 12 e basato sul bytecode LLVM 3.7 ( di Microsoft, essenzialmente un fork avanzato di LLVM 3.7). Il compilatore OpenCL è stato preparato sulla base dei risultati del progetto LLVM e degli strumenti .
I codici sorgente con estensioni OpenCL vengono compilati utilizzando clang in 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 trasferiti in Mesa, traslati nel formato NIR, ottimizzati e inviati a NIR-to-DXIL per la generazione di shader computazionali nel formato DXIL, adatto per l'esecuzione su GPU utilizzando un runtime basato su DirectX 12.
Invece di Clover, utilizzato 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 di non approfondire dettagli specifici per OpenGL durante la creazione dei driver e di traslare le chiamate OpenGL in entità più vicine ai primitivi grafici manovrati dalle moderne GPU. Il driver Gallium accetta comandi OpenGL e, con il coinvolgimento del traduttore NIR-to-DXIL.
forma i buffer dei comandi che vengono eseguiti sulla GPU, utilizzando il driver D3D12.
Fonte: opennet.ru
