Компания Сollabora объявила о доведении открытого драйвера NVK для видеокарт NVIDIA до готовности к повседневному использованию широким кругом пользователей и сертификации данного драйвера в консорциуме Khronos, занимающемся разработкой графических стандартов. Драйвер признан полностью совместимым со спецификацией Vulkan 1.3, успешно прошёл все тесты из набора CTS (Khronos Conformance Test Suite) и включён в список сертифицированных драйверов.
Сертификация пройдена для GPU NVIDIA на базе микроархитектур Turing (серии GeForce GTX 16xx, RTX 20xx и Quadro RTX), Ampere (серии GeForce RTX 30xx и RTX A2000/4000/5000/6000) и Ada (серии GeForce RTX 4xxx, RTX 4000 SFF, RTX 4xxx/5000/6000 Ada). Проверка была выполнена в окружении с ядром Linux 6.5 и 6.8rc1. Получение сертификата даёт возможность официально заявлять о совместимости с графическими стандартами и использовать связанные с ними торговые марки Khronos. Изменения уже приняты в кодовую базу Mesa и войдут в состав выпуска Mesa 24.1.
Кроме улучшений в NVK отмечается значительный прогресс в обеспечении поддержки OpenGL для видеокарт NVIDIA. В Mesa принято изменение, позволяющее задействовать драйвер Zink для обеспечения поддержки OpenGL 4.6 на системах с новыми сериями видеокарт NVIDIA (начиная с GeForce RTX 20xx), с которыми могут наблюдаться проблемы в штатном OpenGL-драйвере Nouveau (NVC0). Для включения Zink вместо NVC0 в Mesa 24.1 достаточно выставить переменную окружения “NOUVEAU_USE_ZINK=1”.
Внесённые в Mesa изменения также предусматривают возможность использования Zink для поддержки OpenGL и в других драйверах в качестве запасного варианта, применяемого для GPU, не поддерживаемых штатными OpenGL-драйверами Mesa. Например, подобный подход уже применяется для предоставления поддержки OpenGL в драйвере freedreno для GPU Qualcomm Adreno 700 и в драйвере powervr для GPU Imagination PowerVR на базе микроархитектуры Rogue.
Zink предоставляет реализацию OpenGL поверх Vulkan, позволяющую получить аппаратно ускоренный OpenGL на устройствах, поддерживающих только API Vulkan. В следующем выпуске Mesa драйвер Zink будет активирован при сборке по умолчанию. Производительность Zink близка к производительности родных реализаций OpenGL, что даёт возможность вместо траты ресурсов на сопровождение отдельных OpenGL-драйверов, сосредоточиться на качественной поддержке API Vulkan, а поддержку OpenGL реализовать поверх Vulkan.
Старый OpenGL-драйвер Nouveau пока не планируют убирать, но в текущем виде связка Zink + NVK демонстрирует более высокую производительность во многих тестах. На текущем этапе разработки при запуске многих игр связка Zink + NVK позволяет добиться производительности 60 FPS и выше на новых моделях GPU, но ещё остаются некоторые нерешённые проблемы и неоптимизированные области, которые со временем будут решены.
Также отмечается работа по стабилизации работы поверх драйвера NVK прослойки DXVK, предоставляющей реализацию Direct3D 9, 10 и 11, работающую через трансляцию вызовов в API Vulkan. Не все игры D3D11 пока гарантированно работают с немодифицирвонной связкой NVK+DXVK из Mesa, но базовые возможности доступны и постепенно ведётся устранение выявляемых недоработок. Аналогично развивается связка NVK с VKD3D-Proton для обеспечения поддержки D3D12, но её состояние пока отстаёт от NVK+DXVK и необходима реализация некоторых отсутствующих возможностей.
Драйвер NVK создан c нуля командой, в которую входят Карол Хербст (Karol Herbst, разработчик Nouveau из Red Hat), Дэвид Эйрли (David Airlie, мэйнтейнер подсистемы DRM из Red Hat) и Джейсон/Фэй Экстранд (Jason/Faith Ekstrand, активный разработчик Mesa из Collabora). При создании драйвера разработчики использовали официальные заголовочные файлы и открытые модули ядра, опубликованные компанией NVIDIA. В коде NVK местами использовались базовые компоненты OpenGL-драйвера Nouveau, но из-за отличий наименований в заголовочных файлах NVIDIA и наименований в Nouveau, полученных на основе обратного инжиниринга, прямое заимствование кода затруднено и по большей части пришлось переосмысливать многие вещи и реализовывать их с нуля.
Разработка велась с оглядкой на создание нового эталонного Vulkan-драйвера для Mesa, код которого можно будет заимствовать при создании других драйверов. Для этого при работе над драйвером NVK попытались учесть весь имеющийся опыт разработки Vulkan-драйверов, поддерживать кодовую базу в оптимальной форме и минимизировать перенос кода из других Vulkan-драйверов, делая как должно быть для оптимальной и качественной работы, а не слепо копируя то, как сделано в других драйверах. Драйвер уже входит в состав Mesa, а необходимые для работы изменения в API DRM-драйвера Nouveau включены в состав ядра Linux 6.6.