Desarrolladores de Collabora presentaron un nuevo controlador Gallium para Mesa
Recientemente los desarrolladores de Collabora dieron a conocer mediante una publicación en su blog, el nuevo controlador Gallium para Mesa, que implementa una capa intermedia para organizar la API OpenCL 1.2 y OpenGL 3.3 sobre los controladores con soporte DirectX 12 (D3D12) y que su código fuente se publica bajo la licencia MIT.
El controlador propuesto le permite usar Mesa en dispositivos que inicialmente no son compatibles con OpenCL y OpenGL y también como una posición inicial para portar aplicaciones OpenGL/OpenCL para trabajar sobre D3D12. Para los fabricantes de GPU, el subsistema permite proporcionar soporte para OpenCL y OpenGL, con controladores solo con soporte para D3D12.
En la publicación de su blog, los desarrolladores comparten:
Durante los últimos meses, hemos estado trabajando en dos proyectos nuevos y emocionantes en Collabora, y finalmente es hora de compartir información sobre ellos con el mundo…
De los planes inmediatos, se observa el logro de la aprobación completa de las pruebas de compatibilidad con OpenCL 1.2 y OpenGL 3.3, la verificación de la compatibilidad con las aplicaciones y la inclusión de las mejores prácticas en la composición principal de Mesa.
Sobre el nuevo controlador
El desarrollo del nuevo controlador se lleva a cabo en conjunto con los ingenieros de Microsoft para desarrollar herramientas D3D11On12 a los juegos de transferencia a D3D11 y biblioteca D3D12 D3D12TranslationLayer, asi como tambien implementos primitivos gráficos estándar en la parte superior D3D12.
La implementación incluye el controlador Gallium, el compilador OpenCL, el tiempo de ejecución de OpenCL y el compilador de sombreadores NIR-a-DXIL, que convierte la representación intermedia de sombreadores NIR utilizados en Mesa al formato DXIL binario (lenguaje intermedio DirectX), compatible con DirectX 12 y basado en el código de bits LLVM 3.7 (DirectX Shader Compiler de Microsoft es esencialmente una bifurcación extendida de LLVM 3.7). El compilador OpenCL fue preparado en base a la experiencia del proyecto LLVM y el kit de herramientas SPIRV-LLVM.
Este trabajo se basa en muchos trabajos anteriores. En primer lugar, estamos construyendo esto usando Mesa 3D, con la interfaz Gallium como base para la capa OpenGL y NIR como base para el compilador OpenCL. También estamos utilizando LLVM y el traductor SPIRV-LLVM de Khronos como compilador.
Además, estamos aprovechando la experiencia de Microsoft en la creación de su capa de traducción D3D12, así como nuestra propia experiencia en el desarrollo de Zink.
El código fuente de OpenCL se compila con clang en el pseudocódigo LLVM intermedio (LLVM IR), que luego se convierte en una representación intermedia del núcleo OpenCL en el formato SPIR-V.
Los núcleos en la representación SPIR-V se transfieren a Mesa, se traducen al formato NIR, se optimizan y se transfieren a NIR-a-DXIL para generar sombreadores computacionales en formato DXIL adecuados para la ejecución en GPU utilizando tiempo de ejecución basado en DirectX 12. En lugar de utilizar Clover en Implementación Mesa de OpenCL, se propone un nuevo tiempo de ejecución OpenCL, que permite conversiones más directas a la API DirectX 12.
Los controladores OpenCL y OpenGL se preparan utilizando la interfaz Gallium provista en Mesa, que le permite no entrar en detalles específicos de OpenGL al crear controladores y traducir las llamadas OpenGL en entidades que están más cerca de las primitivas gráficas en las que operan las GPU modernas.
El controlador Gallium acepta comandos OpenGL y con la participación del traductor NIR-a-DXIL, forma buffers de comandos que se ejecutan en la GPU utilizando el controlador D3D12.
Finalmente, los desarrolladores mencionan que este es un trabajo inicial y que esperan que el controlador mejore conforme al tiempo:
Este es solo el anuncio, y queda mucho trabajo por hacer. Tenemos algo que funciona en algunos casos en este momento, pero apenas estamos comenzando a arañar la superficie.
En primer lugar, necesitamos llegar al nivel de características al que nos dirigimos. Nuestros objetivos en este momento es pasar las pruebas de conformidad para OpenCL 1.2 y OpenGL 3.3. Tenemos un largo camino por recorrer, pero con un poco de trabajo duro y sudor, estoy seguro de que llegaremos allí.
Si estás interesado en conocer más al respecto, puedes consultar la nota original en el siguiente enlace o para quienes estén interesados en revisar el código fuente pueden hacerlo desde este enlace.