Все об Arch Linux

Arch Linux будет тем, что вы из него сделаете!

AMDGPU-Vulkan и Mesa: настройка RADV и ACO для игр

Если играешь на Arch с картой AMD, глубокого тюнинга драйверов тебе не нужно: Mesa из репозитория уже даёт RADV, а ACO компилирует шейдеры быстрее старого LLVM-пути. Настройка сводится к трём шагам — поставить правильные пакеты, проверить, какой драйвер Vulkan реально загрузился, и добавить пару переменных окружения в Steam. Пройди эти шаги на чистой системе — и получишь ровный кадртайм без фризов на старте.

Из чего состоит игровой стек на AMD?

Работа игры на AMD опирается на четыре слоя, и ломается обычно один из двух последних.

  • Ядро amdgpu — модуль ядра: он поднимает GPU, управляет питанием и переключает карту между режимами.
  • Firmware — микропрограмма самой видеокарты. Поставляется в пакете linux-firmware-amdgpu, который тянет linux-firmware. Без неё карта остаётся чёрной. Если после обновления ядра видеокарта пропала из системы, начни с разбора поломок amdgpu после обновления Linux и firmware.
  • Mesa — набор userspace-библиотек: драйвер radeonsi для OpenGL и RADV для Vulkan. Проекты в Steam, DXVK и Proton работают через Vulkan, поэтому именно RADV решает скорость.
  • Загрузчик Vulkan — vulkan-icd-loader читает каталог /usr/share/vulkan/icd.d/ и выбирает, какую реализацию Vulkan грузить.

Как поставить Mesa и Vulkan-драйверы на Arch?

Обнови систему, затем поставь минимальный набор: сам Mesa, RADV и 32-битные библиотеки — без последних не запустятся 32-битные игры и часть старых движков через Wine.

sudo pacman -Syu --needed mesa vulkan-radon lib32-mesa lib32-vulkan-radon vulkan-icd-loader

Полный набор, если хочешь все драйверы Vulkan сразу:

sudo pacman -Syu --needed mesa-vulkan-drivers lib32-mesa-vulkan-drivers

Пакет mesa-vulkan-drivers тянет за собой RADV, AMDVLK, Nouveau и программный lavapipe. Проверь, что всё встало, и посмотри версию Mesa — на свежей версии RADV ощутимо быстрее:

pacman -Q mesa vulkan-radon
mesa --version

Если ты ставишь нестандартное ядро или собираешь модуль amdgpu через DKMS, проверь, что модуль и firmware на месте:

modinfo amdgpu | head -3
ls /usr/lib/firmware/amdgpu | head

Как проверить, какой драйвер Vulkan реально работает?

Поставь vulkan-tools — это набор диагностики с утилитой vulkaninfo:

sudo pacman -S vulkan-tools
vulkaninfo | grep driverName

Две строки, которые тебе нужны:

  • driverName = AMD RADV — активен RADV из Mesa. Это правильный выбор для игр.
  • driverName = AMD Vulkan — активен AMDVLK, проприетарная реализация от AMD.

То же самое для имени устройства:

vulkaninfo | grep -A2 deviceName

Если в списке устройств только llvmpipe или lavapipe, GPU не подхватился драйвером — это программный рендеринг, а не видеокарта. Проверяй ядро, firmware и загрузку модуля: если карта видна в lspci, но не появилась в Vulkan, дело в Mesa или в ICD, а не в железе.

RADV или amdvlk: какой выбрать?

RADV стоит в системе по умолчанию и для игр быстрее: компиляция шейдеров у него идёт коротким путём, воркеры обходятся аккуратно, а лишней валидации меньше. AMDVLK имеет смысл поднимать в двух случаях — конкретная игра глючит с артефактами на RADV, либо нужен быстрый эксперимент с настройками, которых нет в Mesa.

sudo pacman -S amdgpu-vulkan-drivers
ls /usr/share/vulkan/icd.d/

Пакет подкладывает свою реализацию Vulkan со своим ICD и amdvlk.pc, после чего vulkaninfo начнёт показывать AMD Vulkan. Чтобы не трогать систему глобально, включай его только на один запуск:

VK_DRIVER_FILES=/usr/share/vulkan/icd.d/<имя-amdvlk>.json DXVK_HUD=1 vblank_mode=0 game

Вернуть RADV проще всего удалением пакета — загрузчик снова подхватит Mesa:

sudo pacman -Rns amdgpu-vulkan-drivers

Что такое ACO и зачем он нужен?

RADV умеет компилировать шейдеры двумя бэкендами. Старый путь — GLSL компилируется через LLVM, это медленно и печатает в терминал гору сообщений. ACO — компилятор AMD, который сразу даёт бинарный код для GPU: он быстрее, чище и с момента Mesa 22 включён по умолчанию. Явно задать бэкенд можно переменной:

RADV_PERFTEST=aco vblank_mode=0 game

Значение RADV_PERFTEST=gpl возвращает старый LLVM-путь — полезно для замера, дало ли ACO прирост на конкретной игре. Третий вариант, RADV_PERFTEST=llvm, заставляет компилировать шейдеры из байткода SPIR-V, он нужен редко. Если ты не выставлял RADV_PERFTEST вообще, ACO уже работает, и добавлять переменную стоит только ради явности.

Какие переменные реально влияют на FPS?

  • vblank_mode=0 — снимает ожидание вертикального отсчёта и убирает ограничение в 60 fps на некоторых композиторах. Это первая переменная, которую стоит попробовать.
  • MESA_VK_WSI_PRESENT_MODE — режим презентации: fifo (безопасно и предсказуемо), mailbox (меньше задержка), immediate (минимальная задержка ввода, рвётся при vsync). Начал с fifo, дальше экспериментируй.
  • RADV_PERFTEST=aco — фиксированный компилятор шейдеров.
  • RADV_TEX_ANISO=16 — максимальная анизотропная фильтрация, заметно видно в открытых мирах на низком качестве текстур.
  • DXVK_HUD=1 — оверлей с fps и таймингами, работает в играх, которые идут через DXVK.

Взаимодействие с FreeSync стоит проверить отдельно: при включённом vblank_mode=0 адаптивная синхронизация может работать не так, как ожидаешь, — разбор настройки FreeSync на AMD поможет свести это к нормальному виду.

Как прописать переменные в Steam?

В Steam открой свойства игры → «Параметры запуска» и начни строку с %command% — это подстановка, к которой Steam допишет саму игру.

DXVK_HUD=1 vblank_mode=0 RADV_PERFTEST=aco MESA_VK_WSI_PRESENT_MODE=fifo %command%

Для Windows-игр через Proton добавляется префикс: переменные читаются и DXVK, и нативный Vulkan-слой Proton. Если ты гоняешь игры через префикс, а не через Steam-библиотеку, настройку переменных проще делать через окружение лаунчера — гайд по PortProton показывает такой путь.

Отдельно про оверлеи: mangohud рисует счётчики поверх любой Vulkan-игры, ставится одной командой и запускается так же через %command%.

sudo pacman -S mangohud
mangohud vblank_mode=0 %command%

Что делать с фризами при первом запуске и после обновления Mesa?

Долгий старт с подвисаниями — норма: RADV компилирует шейдеры игре на лету. Результат складывается в кэш, и уже со второго запуска игра идёт ровно. Кэши лежат в пользовательских каталогах:

ls ~/.cache/mesa_shader_cache
ls ~/.local/share/Steam/steamapps/shadercache

Первый запуск лучше оставить один раз и не перебивать — прерывание компиляции оставляет кэш неполным. Если нужно посмотреть, сколько стоит компиляция, временно отключи кэш:

MESA_SHADER_CACHE_DISABLE=true vblank_mode=0 game

Кэш занимает около гигабайта; поднять предел можно переменной MESA_SHADER_CACHE_MAX_SIZE. Пересборка нагружает процессор: на тяжёлых сценах компиляция занимает минуты, и это нормально один раз на игру.

А вот после обновления Mesa старый кэш иногда даёт артефакты или краш на входе — тогда лечится чисткой:

rm -rf ~/.cache/mesa_shader_cache

Дальше игра один раз пересоберёт кэш сама. Если обновление Mesa принесло реальную регрессию, а не глюк кэша, откатывайся на предыдущую версию пакета и держи её через IgnorePkg в /etc/pacman.conf.

Частые вопросы

Нужно ли ставить firmware вручную, если я не обновлял ядро?

Нет. linux-firmware-amdgpu приезжает вместе с обновлением linux-firmware, а модуль amdgpu загружает микропрограмму при старте. Вручную ставить нужно только на нестандартной сборке ядра.

RADV или radeonsi — что выбрать для старой игры под OpenGL?

Если игра запускается через DXVK или Proton, выбор не важен: оба конвертируют код в Vulkan, и работает RADV. radeonsi остаётся для нативных OpenGL-тайтлов, которым не нашлось обёртки, и в Proton он не участвует вовсе.

Почему после обновления Mesa игра стала тормозить на старте?

Почти всегда виноват кэш шейдеров: бинарники собраны под старый компилятор. Удали ~/.cache/mesa_shader_cache — и после пересборки картина вернётся к прежней.

Как проверить, что ACO реально включился?

Косвенно: запусти игру с RADV_PERFTEST=gpl и затем с RADV_PERFTEST=aco, сравни время первого запуска и количество сообщений о компиляции в терминале. Прямой признак — отсутствие llvmpipe-подобного шума при старте на ACO.

Стоит ли переносить игры на SSD только ради RADV?

Нет, выигрыш даёт тип накопителя, а не драйвер. Быстрый NVMe полезнее любой настройки Mesa.

Полезные ресурсы

Заключение

Рабочий игровой стек на AMD собирается из ядра amdgpu, firmware и Mesa, а вся разница в скорости упирается в RADV с ACO и пару переменных окружения. Поставь пакеты, убедись через vulkaninfo, что активен AMD RADV, залей vblank_mode=0 и RADV_PERFTEST=aco в параметры запуска Steam — и настройку можно считать законченной.



Не получилось? Поможем настроить

Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Читайте также

Комментарии

Загрузка…

Откроется GitHub: создайте новый issue с вашим комментарием (кнопка «Submit new issue»). После отправки обновите эту страницу — комментарий появится ниже.

Telegram Max