248 подписчиков

NVK - драйвер NVIDIA Vulkan с открытым исходным кодом теперь может запускать больше игр

После того, как NVIDIA, все таки, открыли исходный код модулей ядра для своих видеокарт, разработка драйвера Nouveau обрела новую жизнь.

После того, как NVIDIA, все таки, открыли исходный код модулей ядра для своих видеокарт, разработка драйвера Nouveau обрела новую жизнь. Теперь драйвер активно развивается и разработчики добились больших успехов. Однако, им предстоит пройти еще очень долгий путь. 

  В блоге Collabora был опубликован новый пост о достигнутых успехах. Фэйт Экстранд (Faith Ekstrand) рассказал о последних усилиях, связанных с NVK, драйвером Vulkan с открытым исходным кодом для аппаратного обеспечения NVIDIA, разработанным именно сообществом разработчиков Nouveau.

  Некоторые основные моменты включают:

  • Восстановление поддержки GPU Maxwell и Kepler для драйвера NVK. Конечно, оборудование GTX 900 Maxwell находится в сложном положении из-за отсутствия поддержки разгона для настольных GPU, а также из-за отсутствия прошивки GPU System Processor (GSP), представленной в серии RTX 2000.
  • Продолжается работа над шейдерами геометрии, шейдерами тесселяции и поддержкой обратной связи при трансформации.
  • Несколько игр начали работать на NVK, например Hollow Knight и F1 2017.
  • В последние месяцы было реализовано множество расширений Vulkan. NVK близок к тому, чтобы использовать Vulkan 1.2 или, возможно, Vulkan 1.3.
  • Было исправлено более 1000 сбоев.
  • Работа над производительностью драйвера Vulkan все еще продолжается.
  • Ведется работа над новым внутренним компилятором под названием NAK для "NVIDIA Awesome Kompiler". Этот внутренний компилятор Mesa пишется на языке Rust.

Выявленные проблемы с производительностью:

  • В настоящее время формы проходят через глобальную память. В долгосрочной перспективе, планируется использовать доступ к постоянным буферам без привязки на Turing и более поздних версиях и, возможно, перейти к связанным буферам на более раннем оборудовании. Бессвязные константные буферы потребуют значительной доработки компилятора, и, вероятно, им придется подождать компилятора, над которым сейчас ведется работа.
  • Доступ к дескрипторам требует слишком много непрямых действий. В настоящее время любой доступ к ресурсу, кроме встроенных UBO, требует двух зависимых чтений памяти, прежде чем вы сможете получить доступ к ресурсу: Одно для поиска адреса набора дескрипторов и одно для получения дескриптора. Есть возможность уменьшить это, обнаружив определенные случаи дескрипторов, переведя их в категорию связанных и выполнив некоторую работу по связыванию во время отрисовки. К сожалению, это усложняет всю логику набора дескрипторов, и разработчик не решается сделать это, пока не будет возможности адекватно провести регрессионное тестирование и оценить компромиссы в производительности.
  • В настоящее время каждый вызов vkCmdPipelineBarrier() выполняет полное бездействие, независимо от того, какие барьеры запрашиваются. Это намного агрессивнее, чем нам на самом деле нужно, и ослабление правил ожидания будет необходимо для хорошей производительности.
  • Оптимизация доступа к памяти. Существует множество случаев, когда мы могли бы загружать, скажем, 16B за раз, но вместо этого загружаем кусками по 4B, что гораздо менее эффективно.

Пока нет конкретных сроков внедрения NVK в Mesa, но это произойдет примерно в то же время, когда код нового драйвера Nouveau будет внедрен в ядро Linux. Изменения в драйвере ядра Nouveau DRM предлагают новый и улучшенный API пользовательского пространства, а также работу по интеграции GSP, чтобы обеспечить лучшую производительность на RTX 20 серии и новее.

Более подробная информация в блоге Collabora.