Связка Intel iGPU + AMD dGPU встречается в ноутбуках и старых десктопах, где дискретную карту поставили рядом со встроенной, а панель ноутбука навсегда осталась на Intel. Управляет такой гибридом PRIME: приложения уводятся на AMD переменной DRI_PRIME, а кадры с карты синхронизируются с экраном iGPU через PRIME sync. Ниже — рабочие настройки для Xorg и Wayland, разбор того, откуда берутся разрывы кадра, и диагностика, которая покажет, кто именно рисует картинку.
Встроенная графика живёт внутри процессора Intel (UHD Graphics, Iris Xe, новые линейки Xe), питается от него же и почти всегда включена: она отвечает за ноутбучную панель, за вывод изображения на экран логина и за композитинг рабочего стола. Дискретная AMD (Radeon) стоит на PCIe, греется, жрёт заметную часть энергии в простое и берёт на себя тяжёлые задачи — игры, видеомонтаж, вычисления.
Проблема ровно в том, что панель физически подключена к iGPU. У dGPU нет прямого пути к этому экрану, поэтому картинка с неё попадает на панель через копирование буферов — и этот переход нужно синхронизировать. Отсюда и весь класс странных симптомов: рваные полосы, мигающие блоки, «дёрганье» в меню.
Тенденция последних лет — гибриды NVIDIA + Intel: дискретная часть там почти всегда GeForce. Связка Intel + AMD вышла из моды и встречается в основном в старых ноутбуках и в сборках «десктопная плата + дискретная карта», где встроенную Intel не отключили. Механика PRIME от этого не меняется — это слой Mesa, а не фирменная технология одной компании. Смешанные конфигурации сразу двух дискретных карт разобраны отдельно в материале про одновременную работу NVIDIA и AMD.
Механизм простой: переменная окружения говорит Mesa, какой провайдер открыть для приложения. Нумерация идёт по порядку, а не по именам карт.
DRI_PRIME=1 glxgears # принудительно на вторую карту (AMD)
DRI_PRIME=0 glxgears # только на первой (Intel)
DRI_PRIME=2 glxgears # авто-выбор, решение принимает Mesa
DRI_PRIME=3 glxgears # дать доступ ко всем провайдерам сразу
Для обычного запуска хватает единицы, ведь Intel всегда идёт первым. Проверить, что оффлоад вообще заработал, проще всего по одной игре:
DRI_PRIME=1 glxgears -info
Если в выводе строки DRI_PRIME=1, значит открылся второй провайдер. Чтобы не набирать префикс каждый раз, удобно закрепить переменную в окружении пользователя:
systemctl --user set-environment DRI_PRIME=1
DRI_PRIME=1 bash -c 'echo $DRI_PRIME'
Первый способ действует на все приложения, запущенные через D-Bus из сессии, второй — разово на любую команду. Тот же приём работает в параметрах запуска в Steam, в Exec= строке .desktop-файла и в переменных systemd-юнита. Провайдер можно указать и точнее — по адресу устройства на шине, если порядок карт тебя смущает:
DRI_PRIME=pci-0000:01:00.0 vulkaninfo
Автоматический выбор (DRI_PRIME=2) полезен там, где приложение само запрашивает «дайте лучший гpu»: многие игры так делают через Vulkan и Wayland, и им подсказка не нужна.
Смотри сценарий: игра рисует кадр на AMD, окно лежит на рабочем столе, который отрисовывает Intel, и физически панель подключена к Intel. Между двумя GPU нужен обмен: драйвер amdgpu отдаёт готовый буфер, драйвер i915 забирает его для вывода. Если обмен не синхронизирован по кадру, i915 может показать полуготовую картинку — это и есть разрывы, тиринг, «мусор» из блоков в меню и в видео.
PRIME sync решает это через KMS-фенсы: одна видеокарта ждёт сигнала от другой, что кадр полностью посчитан. Включается он в конфиге Xorg, отдельной опцией драйвера amdgpu:
Section "OutputDevice"
Identifier "AMDGPU"
Driver "amdgpu"
Option "PRIME sync" "on"
Option "PrimaryGPU" "yes"
BusID "PCI:1:0:0"
EndSection
PrimaryGPU yes переводит вывод изображения на dGPU — так внешний монитор и панель рисует AMD, а Intel остаётся только для терминала. PRIME sync on синхронизирует оставшийся iGPU-вывод с кадрами AMD.
Про советы из статей про NVIDIA: опции ForceFullCompositionPipeline в amdgpu просто нет, и в конфиг её вписывать бессмысленно — это механизм проприетарного драйвера. Рабочий аналог здесь один, это PRIME sync, и в свежих ядрах (ветка 6.x) он работает с amdgpu без танцев. На Wayland синхронизацию берёт на себя композитор, отдельно включать ничего не нужно.
Современный Xorg живёт без xorg.conf и сам генерирует конфиг из xlogind, но для PRIME удобно вернуть явный файл в /etc/X11/xorg.conf.d/. Главное — не отказываться от драйвера Modesetting: он даёт нормальное ускорение обеим картам, и именно с ним работает PRIME sync.
# /etc/X11/xorg.conf.d/20-prime.conf
Section "Device"
Identifier "iGPU"
Driver "i915"
EndSection
Section "Device"
Identifier "AMDGPU"
Driver "amdgpu"
BusID "PCI:1:0:0"
Option "PRIME sync" "on"
Option "PrimaryGPU" "yes"
EndSection
После правки нужен перезапуск графической сессии, а не systemctl restart display-manager поверх работающего Xorg: сервер может не подняться, и придётся возвращаться в TTY и править конфиг оттуда.
Посмотреть, каких провайдеров Xorg нашёл, можно одной командой:
xrandr --listproviders
Вывод покажет строки вроде 0: Intel ... и 1: AMD .... Дальше можно либо переключить источник вывода для монитора, либо запустить на второй карте вложенный X-сервер:
xrandr --setprovideroutputsource 1 0
xrun --dri --device 1 glxgears
--setprovideroutputsource 1 0 переносит вывод монитора на второй провайдер. Цена решения — панель и внешний экран показывают независимые рабочие столы, то есть перетащить окно между ними не получится. Для игр это обычно не важно, а для работы с двумя мониторами удобнее первый вариант.
На Wayland ручной конфиг не нужен. KWin в Plasma и Mutter в GNOME сами опрашивают провайдеров, сами решают, где рисовать интерфейс, и сами включают синхронизацию кадров. xorg.conf в этой среде просто игнорируется, а xrandr не существует — вместо него есть только wlr-randr для wlroots-окружений.
DRI_PRIME=1 продолжает работать один в один, только задавать его удобнее через systemd-run --user -p Environment=DRI_PRIME=1:
systemd-run --user --scope -p Environment=DRI_PRIME=1 steam
В GNOME при Intel + AMD композитор традиционно живёт на встроенной графике, а приложения по требованию уходят на дискретную. В Plasma с профилем «две видеокарты» можно дополнительно бросить оффлоад целиком на AMD. Практический совет простой: на Wayland не трогай то, что композитор уже настроил, и лечи артефакты через настройки композиции Plasma — там есть пункт про синхронизацию с vblank и про тройную буферизацию, а не через конфиг драйвера.
В тяжёлых сценах цена минимальна: игра целиком уходит на dGPU, разница с монопольным запуском обычно укладывается в несколько процентов кадров. Настоящая плата появляется там, где сцена лёгкая: копирование буферов, композитинг рабочего стола, видео с YouTube. Здесь потери ощутимее — прирост FPS на 3D-сцене может вообще отсутствовать, а лишняя память GPU уходит на промежуточные буферы. Именно поэтому PRIME sync иногда выглядит «медленнее»: он добавляет ожидание, зато убирает разрывы. Для игр правильнее выбрать целостность картинки.
Отключать iGPU в BIOS здесь не советуют. Панель ноутбука уходит в темноту вместе с логином экрана, ломается suspend и гибридный сон, а выигрыша в энергопотреблении почти нет — встроенная карта в простое ест единицы ватт. Экономнее оставить её включённой и просто не отдавать ей ничего тяжёлого.
Отдельная история — панель. Если на внутреннем экране при прокрутке видны полосы или мерцание, попробуй параметр ядра, отключающий энергосбережение панели:
# /etc/modprobe.d/i915-psr.conf
options i915 enable_psr=0
Затем пересобери initramfs и перезагрузись. На части ноутбуков это убирает артефакты, на остальных ничего не меняет — хуже не станет.
Быстрый способ — посмотреть строки рендерера:
glxinfo | grep -E "OpenGL renderer|EGL vendor"
DRI_PRIME=1 glxinfo | grep -E "OpenGL renderer|EGL vendor"
Если в двух запусках OpenGL renderer string различается, оффлоад работает. Для Vulkan-приложений смотри vulkaninfo --summary и раздел deviceName.
Дальше — проверить, что оба драйвера вообще загрузились и карта видна шине:
lsmod | grep -E "amdgpu|i915"
lspci -k | grep -A 3 -E "VGA compatible|3D controller"
Нумерация провайдеров в Xorg и в Wayland может различаться, поэтому сверяйся с выводом xrandr --listproviders, а не с порядком карт в lspci. Подробнее о том, как одна встроенная карта ведёт себя без второй, я разбирал в материале про APU Radeon и amdgpu.
Скорее всего, игра упирается в процессор, память или узкое место видеопамяти, а не в GPU. Проверь счётчики: если FPS в пределах vsync, увеличение мощности ничего не даст. Для замера выключи вертикальную синхронизацию и посмотри на реальный потолок кадров.
xrandr --listproviders перечисляет провайдеров и помечает активный. Дополнительно смотри, кто владеет pty: если внутренний экран числится за amdgpu, значит PrimaryGPU yes сработал иначе.
Да, так и настроен дефолтный сценарий: композитор на Intel, игра в окне на AMD. Разрывы убирает PRIME sync, а не смена основной карты. Если после его включения артефакты остались, проверь, что в dmesg нет сообщений от kms о неудачных фенчах.
Обычно виноват BusID в неверном формате либо драйвер, отличный от Modesetting. Загрузись в TTY, временно убери файл из /etc/X11/xorg.conf.d/ и проверь журнал: journalctl -b -u display-manager | tail -50.
DRI_PRIME и PrimaryGPU.PRIME с Intel + AMD работает по тем же правилам, что и с NVIDIA: переменная DRI_PRIME выбирает провайдер, а PRIME sync следит, чтобы кадр дошёл до экрана целиком. Держи панель на встроенной карте, не отключай iGPU в BIOS, а разрывы кадра лечи включением Option "PRIME sync" "on" в xorg.conf — на Wayland это уже сделано за тебя.
Задай вопрос в чате — отвечаем быстро, по делу и без воды.
Комментарии