Переключение драйверов Vulkan для различных программ.
Введение.
В 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.
Чтобы это решить, необходимо вручную включить использование драйвера RADV. Пример:
env VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/radeon_icd.x86_64.json /home/$USER/WarThunder/linux64/aces
Таким образом игра успешно запустится.
фиг вам сказала игра и не стала запускаться вообще но во второй раз запустилась но как ранее звук слышен картинки нет. И в Дебе 11 нет Mesa21 только 20
Требуется видеокарта AMD.
Проблема в том что WarThunder и под другими драйверами не запускается (у меня старенькая Radeon R5 m320, но вулкан она поддерживает, radeon-vulkan точно), ни радеоновскими, ни амд. Я уже и не знаю что делать на самом деле т.к. убунту ни в какую не хочет даже придать используемый драйвер для видеокарты
Есть большие сомнения в наличии поддержки. Мало того, что серия на данный момент весьма старая (+7 лет от роду), так ещё и ноутбучная, что намекает на множественные аппаратные ужимки. Попробуй этот тест:
vkcube
Если не работает, то значит Vulkan не поддерживается. Если работает, то стоит запустить игру в терминале и посмотреть вывод. Наверняка укажет на то, чего не хватает. Вполне вероятно, что видеокарта не поддерживает требуемые vulkan-расширения.