Panfrost ya cuenta con compatibilidad para OpenGL 3.1 para GPU Mali
Los desarrolladores de Collabora no han parado de trabajar y es que en los últimos meses han dado mucho de que hablar y en esta ocasión no es la excepción pues recientemente dieron a conocer él anunció de la implementación en el controlador Panfrost del soporte OpenGL 3.1 para GPU Midgard (Mali-T6xx, Mali-T7xx, Mali-T8xx) y GPU Bifrost (Mali G3x, G5x, G7x), así como soporte OpenGL ES 3.0 para GPU Bifrost.
Estos cambios se esperan que sean incluidos en el lanzamiento de Mesa 21.0, que actualmente se encuentra en la etapa de candidato a lanzamiento.
Hay que recordar que los desarrolladores de Collabora han trabajado ya bastante tiempo sobre la implementación de controladores para mesa y un ejemplo de ello es el pasado 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 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.
Por la parte del nuevo controlador Panfrost, se observa que GPU Midgard y Bifrost comparten estructuras de datos comunes para funciones fijas, pero Bifrost usa un conjunto de instrucciones fundamentalmente diferente, lo que dificulta la implementación sincrónica de la funcionalidad para los datos de GPU.
Arquitectónicamente, Bifrost comparte la mayoría de sus estructuras de datos de función fija con Midgard, pero presenta un nuevo conjunto de instrucciones. Nuestro trabajo para presentar OpenGL ES 3.0 en Bifrost refleja esta división.
Algunas características de función fija, como la creación de instancias y la retroalimentación de transformación, funcionaron sin ningún cambio específico de Bifrost, ya que ya lo hicimos en Midgard. Otras características de sombreado, como objetos de búfer uniformes, requerían implementaciones «desde cero» en el compilador Bifrost, una tarea facilitada por la representación intermedia madura del compilador con soporte de construcción de primera clase.
Por ejemplo, las funciones fijas ya implementadas para Midgard, como la «retroalimentación de transformación», se pueden transferir a Bifrost sin cambios, mientras que las funciones como Multiple Render Targets (MRT) están limitadas a algunos cambios específicos de Bifrost.
Al mismo tiempo, otras operaciones con sombreadores, como los objetos de búfer unificados, requieren una implementación desde cero para el compilador de sombreadores Bifrost.
Esto sigue al soporte de OpenGL ES 3.0 en Midgard que aterrizó durante el verano, así como el soporte inicial de OpenGL ES 2.0 que debutó recientemente para Bifrost. OpenGL ES 3.0 ahora se prueba en Mali G52 en la integración continua de Mesa, logrando una tasa de aprobación del 99.9% en las pruebas correspondientes del Programa de Calidad de DrawElements.
Sin embargo, otras características, como múltiples objetivos de renderizado, requerían un código específico de Bifrost mientras aprovechaban otro código compartido con Midgard. Con todo, el trabajo avanzó mucho más rápido la segunda vez, un testimonio del poder del código compartido. Pero no es necesario limitar el intercambio a solo las GPU Panfrost; Los controladores de código abierto pueden compartir código entre proveedores.
Además, en él anunció se menciona que se evitó parte de la duplicación de trabajo mediante el uso de una representación intermedia en el compilador, que, junto con el código compartido, acelera significativamente el desarrollo y que con este enfoque, el código se puede usar no solo para una familia de GPU, sino también para diferentes controladores.
En particular, los desarrolladores mencionan que para poder implementar OpenGL en sistemas de escritorio, el controlador Panfrost requirió del usó de componentes Mesa listos para usar, mientras que el controlador propietario para Mali solamente se limita a admitir solo OpenGL ES.
Sin embargo, la compatibilidad con OpenGL 3.1 de escritorio es casi «gratuita» para nosotros como un controlador de Mesa ascendente al aprovechar la infraestructura común.
Finalmente, si estás interesado en conocer más al respecto sobre la nueva implementación de Panfrost propuesta por los desarrolladores de Collabora, puedes consultar los detalles en el siguiente enlace.