NVK é um novo driver Vulkan de código aberto para hardware gráfico NVIDIA
Alguns dias atrás Collabora revelado através de um blog postar a notícia a integração do driver NVK, no ramo principal do projeto Mesa e que também será incluído como driver experimental na versão 23.3 do Mesa.
NVK, é um novo driver aberto com uma implementação da API de gráficos Vulkan para placas de vídeo NVIDIA. O driver foi criado por uma equipe que inclui Karol Herbst (desenvolvedor Nouveau na Red Hat), David Airlie (mantenedor do subsistema DRM na Red Hat) e Jason Ekstrand (desenvolvedor ativo do Mesa na Collabora).
Em relação ao desenvolvimento do NVK, é mencionado que este foi realizado para criar um novo driver Vulkan de referência para o Mesa, cujo código pode ser emprestado ao criar outros 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 deve fazer. para um trabalho ideal e de alta qualidade, e não copiar cegamente como isso é feito em outros drivers.
Vale ressaltar que, embora o controlador O NVK está incluído no Mesa, o desenvolvimento do driver continua e nem todas as funcionalidades desejadas foram implementadas. O driver é compatível com a API Vulkan 1.0, mas ainda não passou em todos os testes de compatibilidade e apresenta problemas de desempenho. No entanto, alguns jogos já funcionam com o novo driver, mesmo usando a camada DXVK.
Para o controle funcionar efetivamente, São necessárias alterações no kernel do Linux relacionadas à extensão da API do driver Nouveau DRM. A necessidade de alterar a API no nível do kernel ocorre porque a API do driver Nouveau DRM foi projetada inicialmente para implementar o OpenGL e não possui as primitivas necessárias para a operação eficiente dos drivers Vulkan no Mesa.
Em particular, a capacidade de gerenciar o espaço de endereço virtual deve ser adicionada, já que as operações com buffers de objeto e alocação de memória virtual são separadas no Vulkan. Além disso, enviar comandos para Vulkan requer o uso de objetos sincronizados. Atualmente, os patches com as alterações necessárias foram enviados aos mantenedores do subsistema DRM do kernel Linux (Direct Rendering Manager) e presumivelmente serão incluídos no kernel 6.6.
Sobre o driver NVK, é mencionado que este, é escrito do zero, já que o objetivo disso era que durante a criação do controlador os desenvolvedores usou os arquivos de cabeçalho oficiais e os módulos abertos do kernel publicados pela NVIDIA. No código NVK, os componentes básicos do driver Nouveau OpenGL foram usados em alguns lugares, mas devido a diferenças nos nomes dos arquivos de cabeçalho da NVIDIA e nomes de engenharia reversa no Nouveau, o empréstimo direto do código é difícil e, na maioria das vezes, tive que repensar muitas coisas e implementá-las do zero.
Atualmente, o driver suporta apenas GPUs baseadas em Turing (RTX 20XX e GTX 16XX) e microarquiteturas mais recentes (placas lançadas desde setembro de 2018). No futuro, eles planejam adicionar suporte para a família Kepler de GPUs (GeForce 600 e 700).
No futuro, está planejado trazer o desempenho do controlador para o nível adequado e implementar suporte para a API Vulkan 1.3. A longo prazo, espera-se que o driver NVK para placas gráficas NVIDIA atinja um nível de qualidade e funcionalidade semelhante ao driver RADV para placas gráficas AMD.
Também estamos considerando usar o projeto Zink para implementar um driver OpenGL completo para placas de vídeo NVIDIA que funcione por meio da tradução de chamadas API Vulkan.
finalmente se você está interessado em saber mais sobre isso, você pode verificar os detalhes no link a seguir