Дистрибутив:Поп ОС 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-разгрузки, что, вероятно, не является хорошей идеей для ноутбука.