Collabora anuncia la llegada de NVK, el controlador Vulkan open source para NVIDIA
Hace pocos días Collabora dio a conocer mediante una publicación de blog la noticia la integración del controlador NVK, en la rama principal del proyecto Mesa y que ademas se incluirá como controlador experimental en la versión 23.3 de Mesa.
NVK, es un nuevo controlador abierto con una implementación de la API de gráficos Vulkan para tarjetas de video NVIDIA. El controlador fue creado por un equipo que incluye a Karol Herbst (desarrollador de Nouveau en Red Hat), David Airlie (mantenedor del subsistema DRM en Red Hat) y Jason Ekstrand (desarrollador activo de Mesa en Collabora).
Sobre el desarrollo de NVK, se menciona que este se llevó a cabo con la finalidad de crear un nuevo controlador Vulkan de referencia para Mesa, cuyo código se puede tomar prestado al crear otros controladores.
Para hacer esto, cuando trabajamos en el controlador NVK, intentamos tener en cuenta toda la experiencia disponible en el desarrollo de controladores Vulkan, mantener la base de código en una forma óptima y minimizar la transferencia de código de otros controladores Vulkan, haciendo lo que se debe hacer. para un trabajo óptimo y de alta calidad, y no copiar ciegamente cómo se hace en otros controladores.
Cabe mencionar que a pesar de que el controlador NVK esta incluido en Mesa, el desarrollo del controlador continúa y no se ha implementado toda la funcionalidad deseada. El controlador es compatible con la API de Vulkan 1.0, pero aún no ha superado todas las pruebas de compatibilidad y tiene problemas de rendimiento. Sin embargo, algunos juegos ya funcionan con el nuevo controlador, incluso cuando se usa la capa DXVK.
Para que el controlador funcione de manera efectiva, se requieren cambios en el kernel de Linux relacionados con la extensión API del controlador Nouveau DRM. La necesidad de cambiar la API a nivel de kernel se debe a que inicialmente la API del controlador DRM Nouveau está diseñada para implementar OpenGL y carece de las primitivas necesarias para el funcionamiento eficiente de los controladores Vulkan en Mesa.
En particular, se debe agregar la capacidad de administrar el espacio de direcciones virtuales, ya que las operaciones con búferes de objetos y la asignación de memoria virtual están separadas en Vulkan. Además, enviar comandos a Vulkan requiere el uso de objetos sincronizados. Actualmente, los parches con los cambios necesarios se han transferido a los mantenedores del subsistema DRM del kernel de Linux (Direct Rendering Manager) y, presumiblemente, se incluirán en el kernel 6.6.
Sobre el controlador NVK, se menciona que este, está escrito desde cero y durante la creación del controlador los desarrolladores utilizaron los archivos de encabezado oficiales y los módulos abiertos del kernel publicados por NVIDIA. En el código NVK, los componentes básicos del controlador Nouveau OpenGL se usaron en algunos lugares, pero debido a las diferencias en los nombres de los archivos de encabezado de NVIDIA y los nombres de ingeniería inversa en Nouveau, el préstamo directo del código es difícil y en su mayor parte I Tuve que replantear muchas cosas e implementarlas desde cero.
Actualmente, el controlador solo admite GPU basadas en Turing (RTX 20XX y GTX 16XX) y microarquitecturas más nuevas (tarjetas lanzadas desde septiembre de 2018). En el futuro, planean agregar soporte para la familia de GPU Kepler (GeForce 600 y 700).
En el futuro, está previsto llevar el rendimiento del controlador al nivel adecuado e implementar soporte para la API de Vulkan 1.3. A largo plazo, se espera que el controlador NVK para tarjetas gráficas NVIDIA alcance un nivel de calidad y funcionalidad similar al controlador RADV para tarjetas AMD.
También se está considerando la posibilidad de usar el proyecto Zink para implementar un controlador OpenGL completo para tarjetas de video NVIDIA que funcione a través de la traducción de llamadas a la API de Vulkan.
Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.