Colaboración de la empresa
El controlador propuesto le permite usar Mesa en dispositivos que no son compatibles de forma nativa con OpenCL y OpenGL, y también como punto de partida para portar aplicaciones OpenGL/OpenCL para que se ejecuten sobre D3D12. Para los fabricantes de GPU, el subsistema permite brindar soporte para OpenCL y OpenGL, si solo hay disponibles controladores con soporte D3D12.
Entre los planes inmediatos se encuentran la superación completa de las pruebas de compatibilidad de OpenCL 1.2 y OpenGL 3.3, la verificación de la compatibilidad con las aplicaciones y la inclusión de desarrollos en la composición principal de Mesa. El desarrollo se lleva a cabo en conjunto con los ingenieros de Microsoft que desarrollan
La implementación incluye el controlador Gallium, el compilador OpenCL, el tiempo de ejecución OpenCL y el compilador de sombreadores NIR a DXIL, que convierte la representación intermedia de los sombreadores NIR utilizados en Mesa al formato binario DXIL (DirectX Intermediate Language), compatible con DirectX 12 y basado en Código de bits LLVM 3.7 (
Las fuentes con extensiones OpenCL se compilan usando clang en un pseudocódigo intermedio LLVM (LLVM IR), que luego se convierte en una representación intermedia de los núcleos OpenCL en formato SPIR-V. Los núcleos en la representación SPIR-V se pasan a Mesa, se traducen al formato NIR, se optimizan y se pasan a NIR a DXIL para generar sombreadores informáticos en formato DXIL, adecuados para su ejecución en GPU que utilizan el tiempo de ejecución basado en DirectX 12.
En lugar de Clover, la implementación de OpenCL utilizada en Mesa, se propone un nuevo tiempo de ejecución de OpenCL, que permite conversiones más directas a la API de DirectX 12.
Los controladores OpenCL y OpenGL se preparan utilizando la interfaz Gallium proporcionada en Mesa, que le permite crear controladores sin entrar en detalles específicos de OpenGL y traducir las llamadas OpenGL esencialmente más cerca de las primitivas gráficas con las que operan las GPU modernas. Controlador Gallium, acepta comandos OpenGL y cuando se utiliza el traductor NIR a DXIL
Genera búferes de comandos que se ejecutan en la GPU utilizando el controlador D3D12.
Fuente: opennet.ru