Переключение драйверов Vulkan для различных программ.

04. ноября 2021 Linux 4

Введение.

В Linux для видеокарт AMD используется несколько реализаций Vulkan-драйвера, эта заметка призвана решить задачу, когда угораздило работать с программами, включая тестирование, требующими конкретный Vulkan-драйвер или его версию. В Linux есть простая возможность явно указывать какой драйвер задействовать для той или иной программы в отдельности.

Основные Vulkan-драйверы:

  • RADV — Radeon Vulkan Driver — это свободный драйвер, входящий в Mesa, что делает его основным Vulkan-драйвером для подавляющего числа дистрибутивов Linux. Развивается под покровительством компании Valve. Отличается высокой производительностью, реализацией различных оптимизационных техник и продвинутым компилятором шейдеров ACO. В его развитии основной упор сделан на производительности игр, в особенности трансляции вызовов DX в Vulkan.
  • AMDVLK — AMD Open Source Driver For Vulkan — официальный свободный драйвер от AMD. Не входит в состав Mesa и поставляется отдельным пакетом. Практически полностью аналогичен их проприетарному Vulkan-драйверу, входящему в состав AMDGPU Pro. Ключевое отличие заключается в использовании разных шейдерных компиляторов: свободный использует LLVM, закрытый — собственный. В виду официального статуса, ряд профессиональных программ и ранних портов игр (в основном от Feral Interactive) ориентировались только на AMDVLK, тем самым выдавая несколько более высокую производительность, чем на RADV. Причём существуют единичные программы, работающие исключительно с AMDVLK.
  • Lavapipe — предназначен для программной отрисовки 2D и 3D графики силами центрального процессора, что позволяет работать с графикой без наличия отдельного видеочипа. Был создан в качестве замены менее производительного LLVMpipe, базирующегося на OpenGL, который, в свою очередь, постепенно выходит из оборота и заменяется Vulkan.

Для Debian и Ubuntu, включая деривативы, RADV и Lavapipe входят в пакет mesa-vulkan-drivers. Пакет AMDVLK можно брать из официального репозитория: https://github.com/GPUOpen-Drivers/AMDVLK/releases

Выбор драйвера определяется специальным json-скриптом. Для RADV и Lavapipe скрипты располагаются в /usr/share/vulkan/icd.d/, а для AMDVLK — в /etc/vulkan/icd.d/. Тем самым для использования того или иного драйвера должен быть задействован определённый скрипт:

  • radeon_icd — включает использование RADV.
  • amd_icd64 — AMDVLK.
  • lvp_icd — Lavapipe.

Пример содержимого:

{
"ICD": {
"api_version": "1.2.182",
"library_path": "/usr/lib/x86_64-linux-gnu/libvulkan_radeon.so"
},
"file_format_version": "1.0.0"
}

Суффикс i686 означает, что драйвер для 32-битных программ, а x86_64 — 64-битных.

Библиотеки находятся здесь: /usr/lib/x86_64-linux-gnu/

  • libvulkan_radeon.so
  • amdvlk64.so
  • libvulkan_lvp.so

Применение.

Выбор драйвера определяется переменной VK_ICD_FILENAMES. Чтобы задействовать желаемый драйвер, необходимо передать ей путь до соответствующего скрипта.

Пример запуска Unreal Engine 4 с драйвером AMDVLK:

env VK_ICD_FILENAMES=/etc/vulkan/icd.d/amd_icd64.json '/home/$USER/UnrealEngine/Engine/Binaries/Linux/UE4Editor'

Подобным образом можно запускать любую программу с желаемым драйвером.

В виду того, что для переменной есть возможность указать собственный скрипт, можно использовать Vulkan-библиотеки различных версий, что очень полезно для того же тестирования.

Бонус.

При использовании Mesa 21.x игра War Thunder (на момент 2021 года) не могла запуститься. Проблема оказалась в том, что по какой-то причине она предпочитала задействовать драйвер Lavapipe, который предназначен для программной отрисовки средствами процессора, вместо штатного RADV, что приводило к ошибке:

WARNING: lavapipe is not a conformant vulkan implementation, testing use only.
vulkan: error waiting for GPU — timeout (code: 00000002)
Call stack (12 frames)

Чтобы это решить, необходимо вручную включить использование драйвера RADV. Пример:

env VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/radeon_icd.x86_64.json /home/$USER/WarThunder/linux64/aces

Таким образом игра успешно запустится.


4 отзыва к статье “Переключение драйверов Vulkan для различных программ.”

  • 1
    user в 14.11.2021 Ответить

    фиг вам сказала игра и не стала запускаться вообще но во второй раз запустилась но как ранее звук слышен картинки нет. И в Дебе 11 нет Mesa21 только 20

  • 3
    Семён в 21.04.2022 Ответить

    Проблема в том что WarThunder и под другими драйверами не запускается (у меня старенькая Radeon R5 m320, но вулкан она поддерживает, radeon-vulkan точно), ни радеоновскими, ни амд. Я уже и не знаю что делать на самом деле т.к. убунту ни в какую не хочет даже придать используемый драйвер для видеокарты

    • 4
      Igor в 02.05.2022 Ответить

      Есть большие сомнения в наличии поддержки. Мало того, что серия на данный момент весьма старая (+7 лет от роду), так ещё и ноутбучная, что намекает на множественные аппаратные ужимки. Попробуй этот тест:
      vkcube

      Если не работает, то значит Vulkan не поддерживается. Если работает, то стоит запустить игру в терминале и посмотреть вывод. Наверняка укажет на то, чего не хватает. Вполне вероятно, что видеокарта не поддерживает требуемые vulkan-расширения.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *