Collabora, la empresa que está detrás de la implementación en la nube de LibreOffice y que contribuye a los soportes de realidad virtual en Linux y de Wayland para Wine, ha presentado oficialmente NVK, un driver de Vulkan para Mesa orientado a funcionar junto a Nouveau, el driver Open Source del kernel para las gráficas de NVIDIA.
NVK ha sido escrito principalmente por Jason Ekstrand, empleado de Collabora que lo ha presentado, junto a Karol Herbst y Dave Airlie, quienes trabajan para Red Hat. La presencia de un driver de Vulkan para Nouveau empezaba a ser necesaria debido a que la API de Khronos Group está ganando terreno poco a poco y puede que en un futuro sea empleada hasta por aplicaciones comunes. Hablar de videojuegos es volar un tanto alto, pero es una idea que Ekstrand no descarta.
En la entrada publicada en el blog oficial de Collabora, la cual es bastante extensa, Ekstrand ha resumido la trayectoria del soporte de NVIDIA a través del kernel Linux y Mesa. Aquí nos encontramos con una historia que ya hemos contado, en la que sobresale la escasa contribución del gigante verde a la hora ayudar a Nouveau, cosa que se ha traducido en unos drivers a los que “a menudo les faltan funciones, tienen errores o simplemente no son compatibles con ciertas tarjetas”.
El empleado de Collabora explica que la mayoría del conocimiento sobre el hardware de NVIDIA ha derivado de la ingeniería inversa, de indagar por la documentación de CUDA y de lo poco que ha soltado el fabricante. Esto contrasta con una Intel y una AMD que desde hace años están comprometidas con la pila gráfica estándar de GNU/Linux, aunque en el caso de la segunda el soporte de Vulkan está ocupado por un proyecto comunitario, RADV, que tiene a Valve como principal contribuidora.
Leyendo la entrada, parece que la intención con NVK es repetir la jugada realizada con RADV, sin embargo, hay una diferencia importante. Mientras que RADV se apoya en AMDGPU, el driver del kernel y oficial para gráficas Radeon, NVK está condenado a apoyarse en el todavía discreto Nouveau.
A pesar de la escasa contribución de NVIDIA, Ekstrand dice que ha habido “algunas cosas que han cambiado recientemente para hacer que el panorama técnico sea un poco más amigable. El primer cambio ocurrió hace algunos años cuando NVIDIA lanzó su hardware Turing. Las GPU Turing utilizan un nuevo blob de firmware unificado. El firmware de GSP contiene todo lo necesario para abrir la GPU y, una vez que se carga el firmware de GSP, carga todos los demás firmware que necesitan varias de las piezas de la GPU. Si podemos hacer que GSP funcione, esto nos permitirá usar el mismo firmware que los controladores privativos de NVIDIA y debería resolver muchos de los errores misteriosos”.
El segundo acontecimiento fue la publicación una versión Open Source y oficial del driver de NVIDIA, el cual no parece estar muy documentado y no se ajusta a las líneas de diseño del kernel Linux, pero ha abierto las puertas para mejorar y corregir cosas.
Por último, “NVIDIA ha comenzado a proporcionar encabezados oficiales para el hardware de computación y 3D. Si bien esto tampoco es tan bueno como la documentación real, al menos nos da nombres para todos los registros que hemos estado programando”.
Sobre el desarrollo de NVK, este ha sido empezado casi desde cero a partir de las nuevas cabeceras publicadas por NVIDIA. Ekstrand ha explicado que “ocasionalmente hacemos referencia al controlador OpenGL para Nouveau existente, pero, debido a que los encabezados oficiales a menudo usan nombres diferentes para las cosas que el controlador de ingeniería inversa, muchas veces no podemos copiar y pegar directamente. Vulkan también es lo suficientemente diferente de OpenGL como para que tengamos que repensar las cosas”.
El trabajador de Collabora expone un dato interesante, y es que el linaje de todos los controladores de Vulkan presentes en Mesa puede ser rastreado hasta llegar a ANV, el driver de Vulkan para las gráficas de Intel, del que se ha copiado y pegado su código. Esto llega a ser un tanto sorprendente si vemos que ANV no está tan preparado para contextos como el gaming como RADV y el driver oficial de NVIDIA, pero no es menos cierto que el segundo gigante azul (el primero es IBM) suele ser la que mejor cumple con los estándares.
A pesar de que NVK ha empezado casi desde cero, en Collabora esperan que en un futuro pueda soportar el copiado y pegado de código para su desarrollo. Con el fin de llegar a ese punto, Ekstrand ha dicho que ha creado NVK “con todas las mejores prácticas que hemos desarrollado para los controladores de Vulkan durante los últimos siete años y medio y trato de mantener la base de código limpia y bien organizada”.
Parece que el desarrollo de NVK va a buen ritmo y que a nivel de arquitectura se encuentra en un buen momento, pero sus cimientos todavía tienen que ser terminados, lo que incluye una base de código relativamente estable. De no hacerse eso antes, podría haber conflictos a la hora de trabajar con características que no están relacionadas.
Gracias al firmware GSP, el terreno parece allanarse para soportar las generaciones Turing, Ampere y Ada Lovelace de NVIDIA, mientras que el soporte para Kepler, Maxwell y Pascal está incompleto. Viendo la cuota de mercado de cada una de las generaciones de gráficas de NVIDIA, lo suyo sería tener como mínimo el suelo en Pascal, cuya GTX 1060 es todavía ampliamente utilizada debido a las dificultades que han tenido los consumidores a la hora de renovar la gráfica en los últimos años.
Es posible que el trabajo en torno a NVK termine influenciando en el driver de OpenGL para Nouveau, el cual se basa en Gallium3D. Aquí se ha planteado su mejora mediante la implementación de lo aprendido con NVK, su reescritura completa o incluso su sustitución por Zink, un driver que permite renderizar OpenGL sobre Vulkan de forma similar a lo que hace DXVK, que renderiza Direct3D 11 sobre Vulkan.
En lo que respecta a la fusión oficial de NVK en Mesa, hay un obstáculo importante: la necesidad de introducir una nueva API universal a nivel del kernel para soportar Vulkan correctamente. Si bien NVK puede ser implementado directamente en Mesa, su mantenimiento se haría complicado, así que la incorporacion de una nueva API universal se hace muy necesaria.
Como vemos, parece que la situación del uso de las gráficas de NVIDIA en GNU/Linux puede cambiar en un futuro no muy lejano. Además de todo lo mencionado se suman las intenciones de Jason Ekstrand de crear un nuevo compilador de shaders para Nouveau. Por delante hay muchísimo que hacer y NVIDIA, aparentemente, sigue sin contribuir todo lo que debería, pero es posible que en pocos años los usuarios no tengan que emplear el driver privativo para usar un escritorio con una experiencia satisfactoria.
Fuente: muylinux