
После того, как 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.