Nesta charla impartida por Alejandro Piñeiro de Igalia, darase unha introdución
a Mesa, librería open-source para o desenvolvemento de drivers gráficos.
Explicarase a súa historia, os seus compoñentes máis importantes, que
utilidades proporcionan aos desenvolvedores e unha lista de hardware ás que dan
soporte. Finalmente explicarase o caso concreto do soporte proporcionado para
as GPUs dos dispositivos da serie Raspberry Pi, centrándonos nas Raspberry Pi 4
e Raspberry Pi 5
Igalia é unha empresa galega, con sede na Coruña, especializada en servizos de
consultoría, e que desenvolve solucións innovadoras de código aberto para un
gran conxunto de plataformas de software e hardware. En Igalia traballan nas
áreas máis interesantes do software de código aberto, incluídos navegadores,
gráficos e multimedia.
Igalia desenvolveu os controladores OpenGL ES 3.1 e Vulkan 1.2 conformes para a
GPU VideoCore VII Broadcom que se fornece coa nova Raspberry Pi 5.
Alejandro Piñeiro é enxeñeiro de Software e socio en Igalia, é desenvolvedor de
Software Libre desde 2004. A súa experiencia inclúe unha variedade de proxectos
de GNOME e freedesktop.org, enfocándose desde 2015 en Mesa, especificamente os
drivers Intel e Broadcom. É un dos responsables do desenvolvemento do
controlador Broadcom Vulkan para Raspberry Pi 4 & 5.
Máis información en https://aindustriosa.org/Mesa/
Esta actividade está patrocinada pola Xunta de Galicia e pola Axencia Para a
Modernización Tecnolóxica (AMTEGA).
(c) A Industriosa
https://aindustriosa.org
28 de Outubro (Vigo)
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
1. Introducción a Mesa: Caso
específico de los dispositivos
Raspberry Pi
Alejandro Piñeiro Iglesias
2023-10-28
2. Introducción a Mesa. Rasperry Pi.
Alejandro Piñeiro Iglesias
Sobre mí
● Desarrollador de Igalia desde el 2006
● Miembro del Graphics Team en Igalia
● Desarrollador de drivers gráficos desde el 2015
● Principalmente en los drivers libres de GPUs de Intel
y Broadcom
3. Introducción a Mesa. Rasperry Pi.
Alejandro Piñeiro Iglesias
Drivers gráficos?
● Además de la CPU, existen otros tipos de
procesadores, más especializados (DSP, VPU, etc)
● GPU (Graphics Processor Unit): procesador
especializado en el renderizado y tratamiento de
imagenes.
● Un driver gráfico es el sw que permite usar esa GPU
● Como se usa cada GPU depende del
modelo/fabricante
4. Introducción a Mesa. Rasperry Pi.
Alejandro Piñeiro Iglesias
Interfaces/APIs
● Existen varias APIs que abstraen/estandarizan el uso
de las funcionalidades de la GPU:
● OpenGL (1992)
● OpenGL ES (2003)
● Vulkan (2016)
6. Introducción a Mesa. Rasperry Pi.
Alejandro Piñeiro Iglesias
Lenguajes de Shading
● Lenguajes de programación gráficos
● Diseñados para ser ejecutados directamente en la
GPU
● Cada API gráfica moderna usa al menos uno:
● GLSL: OpenGL y OpenGL ES
● SPIR-V: Vulkan
9. Introducción a Mesa. Rasperry Pi.
Alejandro Piñeiro Iglesias
Mesa
● Mesa es una librería open-source que implementa
soporte del OpenGL y Vulkan (y otras APIs) para una
gran variedad de hardware
● Fue creada por Brian Paul en los años 90
● La versión 1.0 fue publicada en Febrero de 1995
● La version actual es las 23.3.0
Actualmente hay una release por trimestre: AÑO.YY
11. Introducción a Mesa. Rasperry Pi.
Alejandro Piñeiro Iglesias
Comunidad
● La comunidad está formada por desarrolladores
voluntarios y múltiples empresas
12. Introducción a Mesa. Rasperry Pi.
Alejandro Piñeiro Iglesias
Funcionalidades (I)
● Traducir llamadas a las APIs a instrucciones que serán
ejecutadas por el HW
● Configuración del HW para la ejecución de los
shaders: configurar depth, stencil test, blend, etc
● Buscar soluciones para limitaciones HW: soporte de
tipos de 64 bits, falta de instrucciones en el ISA final,
etc.
● Indicar a la aplicación los límites del HW
13. Introducción a Mesa. Rasperry Pi.
Alejandro Piñeiro Iglesias
Funcionalidades (II)
● Se encarga de compilar los shaders (GLSL o SPIR-V)
● Hay un frontend compiler que produce como salida
un lenguaje intermedio llamado NIR
● Cada uno de los drivers de Mesa implementa un
backend compiler para obtener el código
ensamblador a partir de NIR
14. Introducción a Mesa. Rasperry Pi.
Alejandro Piñeiro Iglesias
Mesa CI
● Cualquier cambio en Mesa requiere pasar por varios
requisitos:
● Revisión por otro desarrollador
● Sin fallos en test suites: piglit, vk-gl-cts
● Vk-gl-cts es la test suite mantenida por Khronos. Es la
que se usa para determinar si un driver es conforme al
API de Khronos (OpenGL, Vulkan, etc)
19. Introducción a Mesa. Rasperry Pi.
Alejandro Piñeiro Iglesias
Broadcom GPU (I)
● Basada en tiling, en vez de renderizar toda la escena
de una pasada, la divide en “tiles” (mosaicos):
● Solo carga en memoria lo necesario para cada tile,
reduciendo la cantidad de memoria y ancho de
banda
● Optimización de la caché
● Arquitecturas de tiling es lo más habitual en GPU para
embebidos/mobiles
20. Introducción a Mesa. Rasperry Pi.
Alejandro Piñeiro Iglesias
Broadcom GPU (II)
● Soporte HW orientado a OpenGL ES y (desde
VideoCore VI) Vulkan
● Varias funcionales necesarias para las últimas
versiones de OpenGL no soportadas
● Subsistema principal son los QPUs (SIMD)
● Cada uno tiene dos unidades de procesamiento
aritmético (ALUs), lo que permite hasta dos
operaciones aritméticas por instrucción
21. Introducción a Mesa. Rasperry Pi.
Alejandro Piñeiro Iglesias
Raspberry Pi
● Serie de dispositivos embebidos desarrollados por
Raspberry Pi Ltd
● Objetivos originales orientados a la promoción de la
enseñanza de programación en escuelas
● Se han convertido en modelos muy populares y
extendiendo su rango de uso
● Procesador ARM, GPU Broadcom de la serie
VideoCore
22. Introducción a Mesa. Rasperry Pi.
Alejandro Piñeiro Iglesias
Raspberry Pi - timeline
● Raspberry Pi – 2012 (VideoCore IV)
● Raspberry Pi 2 – 2015 (VideoCore IV)
● Raspberry Pi 3 – 2016 (VideoCore IV)
● Raspberry Pi 4 – 2019 (VideoCore VI)
● Raspberry Pi 5 – 2023 (VideoCore VII)
23. Introducción a Mesa. Rasperry Pi.
Alejandro Piñeiro Iglesias
Raspberry Pi - drivers
● Raspberry Pi, Raspberry Pi 2, y Raspberry Pi 3 tienen el
driver de Mesa VC4, que soporta OpenGL y OpenGL ES
● Raspberry Pi 4 y Raspberry Pi 5 tienen el driver de
Mesa V3D que soporta OpenGL y OpenGL ES, y v3dv
que soporta Vulkan
● Inicialmente v3d se llamaba VC5, pero se cambio ya
que era posible soportar varias generaciones con el
mismo driver
24. Introducción a Mesa. Rasperry Pi.
Alejandro Piñeiro Iglesias
Raspberry Pi - experiencia
● Empezamos a involucrarnos a finales del 2018, un
poco antes del lanzamiento oficial de la Raspberry Pi 4
● VC4 y V3D ya existían, creados inicialmente por
Broadcom
● Trabajo inicial basado en consolidar los drivers, y
extender su funcionalidad (nuevas extensiones) en
todos los dispositivos, pero más trabajo en la rpi4
● Rpi4 Oficialmente OpenGL ES 3.1 desde 2020-01
25. Introducción a Mesa. Rasperry Pi.
Alejandro Piñeiro Iglesias
Raspberry Pi – v3dv (I)
● Driver de Vulkan inicialmente para la rpi4
● “De cero”: se intentó reutilizar todo lo posible:
● El frontend de Mesa proporciona varias
funcionalidades (conversion de SPIR-V a NIR,
abstracciones de Mesa etc)
● Varios componentes de v3d se reutilizaron: definición
de los comandos de la GPU, definición del ISA,
simulador, etc
26. Introducción a Mesa. Rasperry Pi.
Alejandro Piñeiro Iglesias
Raspberry Pi – v3dv (II)
● Desarrollo inicial lo empezó Iago Toral
● Una vez que hubo una base funcional (posible ejecutar
programas sencillos) se incorporó Alejandro Piñeiro, y
se empezaron a dividir tareas
● Objetivo inicial conseguir la funcionalidad mínima de
Vulkan 1.0 (con unas pocas excepciones)
28. Introducción a Mesa. Rasperry Pi.
Alejandro Piñeiro Iglesias
Raspberry Pi – v3dv (IV)
29. Introducción a Mesa. Rasperry Pi.
Alejandro Piñeiro Iglesias
Raspberry Pi – rpi5 (I)
● Incremento significativo en rendimiento y
funcionalidad:
● 8 render targets (4 en la rpi4)
● Incremento en varios límites
● Más formatos de imagen
● Más operaciones del procesador
● FullDrawIndexUint32, depthClamp, depthBounds,
scalarBlockLayout, etc
30. Introducción a Mesa. Rasperry Pi.
Alejandro Piñeiro Iglesias
Raspberry Pi – rpi5 (II)
● Trabajo inicial totalmente basado en el simulador (aún
no había dispositivo)
● Como con la rpi4, se hizo un trabajo inicial individual,
hasta llegar a una funcionalidad base (triangulo),
luego se incorporó un segundo desarrollador
31. Introducción a Mesa. Rasperry Pi.
Alejandro Piñeiro Iglesias
Raspberry Pi – rpi5 (III)
● Cambios significativos en los comandos, en el ISA y en
los registros.
● Aún así se inició bajo la idea de que no se necesitaría
un nuevo driver, sino codepaths para cada versión
● Quedó confirmado una vez el driver estuvo terminado
(pasando CTS)
● Con el simulador no se pudieron hacer pruebas con
aplicaciones reales
32. Introducción a Mesa. Rasperry Pi.
Alejandro Piñeiro Iglesias
Raspberry Pi – rpi5 (IV)
● Llega el dispositivo!
● Primero se necesita dar soporte en el kernel de Linux
de la nueva GPU
● Sorpresas
● Diferencia en gestión de compute shaders
● Documentación incompleta
● Version HW final diferente (7.1.2 vs 7.1.6)
● Testeo con aplicaciones reales
33. Introducción a Mesa. Rasperry Pi.
Alejandro Piñeiro Iglesias
Raspberry Pi – rpi5 (V)
● El 28 de Septiembre se hace el anuncio oficial.
● El mismo día se manda el código para integración en
el repositorio upstream de Mesa
● El 14 de Octubre el soporte para la rpi5 se integra
● Siguiente:
● Pasar el conformance de Khronos (CTS)
● Arreglar posibles issues de los usuarios
● Seguir con la evolución del driver