Как переключить контроллер дисплея на Radeon вместо встроенной графики Intel?

Как переключить контроллер дисплея на Radeon вместо встроенной графики Intel?

Дистрибутив:Поп ОС 19.10
Ноутбук:Ноутбук HP 15-bs185tx

Видеокарта:

  • Графика AMD Radeon™ 520 (2 ГБ выделенной памяти DDR3)
  • Корпорация Intel UHD Graphics 620

Я перепробовал почти все доступные в сети решения, но ничего не работает. И VGA, и Display Controller работают на моей встроенной графике Intel. Я использовал несколько команд, включая эту, lspci -k | grep -EA3 'VGA|3D|Display'чтобы увидеть мои активные графические адаптеры. Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы относительно проблемы.

Спасибо!

решение1

TL;DR (но значения 1 0могут быть неверными в вашей системе):

$ xrandr --setprovideroffloadsink 1 0
$ export DRI_PRIME=1
$ glxinfo | grep "OpenGL renderer string"

Если эта функция отсутствует на аппаратном уровне, то это невозможно, но существует альтернатива.

Это показано вДокументация VGA Switcheroo:

vga_switcheroo — это подсистема Linux для гибридной графики ноутбука. Они бывают двух видов:

  • мультиплексирование: два графических процессора с микросхемой мультиплексора для переключения выходов между графическими процессорами.
  • muxless: Два графических процессора, но только один из них подключен к выходам. Другой используется только для разгрузки рендеринга, его результаты копируются через PCIe в буфер кадра. В Linux это поддерживается с помощью ДРИ ПРАЙМ.

Гибридная графика начала появляться в конце нулевых и изначально была полностью мультиплексированной.Новые ноутбуки перешли на архитектуру без мультиплексора по соображениям стоимости. Примечательным исключением является MacBook Pro, который продолжает использовать мультиплексор.

Итак, я предполагаю, что ваше оборудованиебезмуксовый, так:

      ╔═══════════════╗
      ║               ║
      ║    display    ║
      ║               ║
      ╚═══════════════╝
       ╭───╯       X
       │           ┊
┌────────┐       ┌────────┐
│        │       │        │
│  iGPU  │───────│  dGPU  │
│        │       │        │
└────────┘       └────────┘

Хотя можно найти и хорошую документацию (например, наАрхлинукс), я не смог найти некоторыеофициальныйокончательная документация, авторитетная для использования DRI_PRIME. Единственная, возможно, полуофициальная документация, которую я нашел, была для... драйвера Nvidia nouveau и игра словОптимус Прайм:

Использование Оптимуса/Прайма

«PRIME GPU offloading» и «Reverse PRIME» — это попытка поддержки безмультиплексной гибридной графики в ядре Linux.

Хотя название, вероятно, произошло от первоначальной поддержки Nvidia, оно, конечно, является общим и работает с AMD.

Вы можете запрашивать и изменять настройки с помощьюxrandrкоманда:

--listproviders
Сообщите информацию о доступных поставщиках.

--setprovideroutputsource provider source
Установить источник в качестве источника выходных изображений для поставщика. Это возможно только в том случае, если источник и поставщик имеют возможности Source Output и Sink Output соответственно. Если источник равен 0x0, поставщик отключается от своего текущего источника выходных данных.

--setprovideroffloadsink provider sink
Установить провайдера в качестве устройства разгрузки рендеринга для приемника.Это возможно только в том случае, если поставщик и приемник имеют возможности Source Offload и Sink Offload соответственно.. Если приемник равен 0x0, то поставщик отключается от текущего приемника разгрузки рендеринга.

Например, также с ноутбуком, использующим Intel iGPU и некоторые AMD dGPU:

$ xrandr --listproviders
Provider 0: id: 0x68 cap: 0xb, Source Output, Sink Output, Sink Offload crtcs: 4 outputs: 3 associated providers: 0 name:Intel
Provider 1: id: 0x41 cap: 0xf, Source Output, Sink Output, Source Offload, Sink Offload crtcs: 2 outputs: 0 associated providers: 0 name:AMD Radeon (TM) HD8530M @ pci:0000:04:00.0

Обратите внимание, что Поставщик 1 имеет outputs: 0: не может выводить, независимо от других свойствИсходный выводиВыход раковиныможно сказать. Если ваша системаделаетотобразить значение, отличное от 0, для свойства dGPU outputs:, то у вас могут быть доступны другие варианты (прямое отображение, возможно, также в сочетании с Reverse PRIME с использованием --setprovideroutputsource), которые не будут рассмотрены в этом ответе.

Чтобы подготовить использование (3D) задач GPU, выгруженных на dGPU, в предыдущем примере можно сделать следующее:

$ xrandr --setprovideroffloadsink 'AMD Radeon (TM) HD8530M @ pci:0000:04:00.0' Intel

Вместо имен можно использовать идентификаторы или даже проще индекс. Две команды ниже сделают то же самое. Нужно следить за тем, чтобы не перепутать направления, иначе может случиться что-то плохое.

$ xrandr --setprovideroffloadsink 0x41 0x68
$ xrandr --setprovideroffloadsink 1 0

И сейчас:

$ xrandr --listproviders
Providers: number : 2
Provider 0: id: 0x68 cap: 0xb, Source Output, Sink Output, Sink Offload crtcs: 4 outputs: 3 associated providers: 1 name:Intel
Provider 1: id: 0x41 cap: 0xf, Source Output, Sink Output, Source Offload, Sink Offload crtcs: 2 outputs: 0 associated providers: 1 name:AMD Radeon (TM) HD8530M @ pci:0000:04:00.0

Теперь два поставщика связаны, и экспорт специальной (в mesa) переменной DRI_PRIME=1выбирает dGPU для рендеринга:

$ DRI_PRIME=0 glxinfo | grep "OpenGL renderer string"
OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile 
$ DRI_PRIME=1 glxinfo | grep "OpenGL renderer string"
OpenGL renderer string: AMD Radeon (TM) HD8530M (OLAND, DRM 3.36.0, 5.6.3-amd64, LLVM 6.0.0)

Итак, чтобы запустить 3D-программу с интенсивным использованием графического процессора, называемую myhungrygame, вам, вероятно, нужно сделать следующее (если dGPU идет после iGPU):

$ xrandr --setprovideroffloadsink 1 0 # X11-wide setting
$ export DRI_PRIME=1
$ ./myhungrygame

Если вам удастся выполнить первые два действия до загрузки среды рабочего стола, то по умолчанию все будут использовать dGPU для 3D-разгрузки, что, вероятно, не является хорошей идеей для ноутбука.

Связанный контент