Distribuição:Pop OS 19.10
Computador portátil:Notebook HP 15-bs185tx
Placa de vídeo:
- Gráficos AMD Radeon™ 520 (2 GB DDR3 dedicados)
- Gráficos UHD 620 da Intel Corporation
Tentei quase todas as soluções disponíveis online, mas nada funciona. Tanto o VGA quanto o Display Controller estão rodando em meus gráficos Intel integrados. Usei vários comandos, incluindo este, lspci -k | grep -EA3 'VGA|3D|Display'
para ver meus adaptadores gráficos ativos. Por favor, deixe-me saber se você tiver alguma dúvida sobre o problema.
Obrigado!
Responder1
TL;DR (mas os valores 1 0
podem não estar corretos no seu sistema):
$ xrandr --setprovideroffloadsink 1 0
$ export DRI_PRIME=1
$ glxinfo | grep "OpenGL renderer string"
Se esse recurso não existir no nível do hardware, isso não será possível, mas existe uma alternativa.
Isto é mostrado noDocumentação do Switcheroo VGA:
vga_switcheroo é o subsistema Linux para gráficos híbridos de laptop. Eles vêm em dois sabores:
- muxed: GPUs duplas com um chip multiplexador para alternar saídas entre GPUs.
- muxless: GPUs duplas, mas apenas uma delas está conectada às saídas. O outro é usado apenas para descarregar a renderização, seus resultados serão copiados pelo PCIe para o framebuffer. No Linux isso é suportado com DRI PRIME.
Os gráficos híbridos começaram a aparecer no final dos anos 1990 e inicialmente eram todos mixados.Laptops mais novos mudaram para uma arquitetura sem mux por razões de custo. Uma exceção notável é o MacBook Pro, que continua a usar um mux.
Então, presumo que seu hardware sejasem mux, assim:
╔═══════════════╗
║ ║
║ display ║
║ ║
╚═══════════════╝
│
╭───╯ X
│ ┊
┌────────┐ ┌────────┐
│ │ │ │
│ iGPU │───────│ dGPU │
│ │ │ │
└────────┘ └────────┘
Embora alguma boa documentação possa ser encontrada (por exemplo: emArchlinux), não consegui encontrar algunsoficialdocumentação definitiva autorizada para o uso de DRI_PRIME
. A única documentação talvez semi-oficial que encontrei foi para ... o novo driver da Nvidia e o jogo de palavrasOptimus/PRIME:
Usando Optimus/Prime
'PRIME GPU offloading' e 'Reverse PRIME' é uma tentativa de suportar gráficos híbridos sem mux no kernel Linux.
Embora o nome provavelmente tenha se originado do suporte inicial da Nvidia, é claro que é genérico e funciona com AMD.
Você pode consultar e alterar configurações usando oxrandr
comando:
--listproviders
Relate informações sobre os provedores disponíveis.
--setprovideroutputsource provider source
Defina source como a origem das imagens de saída de exibição para o provedor. Isso só é possível se a origem e o provedor tiverem os recursos Source Output e Sink Output, respectivamente. Se source for 0x0, então o provedor está desconectado de sua fonte de saída atual.
--setprovideroffloadsink provider sink
Defina o provedor como um dispositivo de transferência de renderização para o coletor.Isso só é possível se o provedor e o sink tiverem os recursos Source Offload e Sink Offload, respectivamente. Se o coletor for 0x0, o provedor será desconectado de seu coletor de descarregamento de renderização atual.
Por exemplo, também com um laptop usando Intel iGPU e alguns 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
Observe que o Provedor 1 outputs: 0
: não é capaz de gerar saída, quaisquer que sejam as outras propriedadesSaída de origemeSaída do coletorpoderia dizer. Se o seu sistemafazexibir um valor diferente de 0 para a outputs:
propriedade do dGPU, então você poderá ter outras opções disponíveis (exibição direta, possivelmente também em conjunto com Reverse PRIME usando --setprovideroutputsource
) que não serão abordadas por esta resposta.
Para preparar o uso para tarefas de GPU (3D) descarregadas para o dGPU, com o exemplo anterior isso pode ser feito:
$ xrandr --setprovideroffloadsink 'AMD Radeon (TM) HD8530M @ pci:0000:04:00.0' Intel
Em vez de nomes, podem ser usados os ids, ou ainda mais simplesmente o índice. Os dois comandos abaixo fariam o mesmo. É preciso tomar cuidado para não inverter as direções ou coisas ruins podem acontecer.
$ xrandr --setprovideroffloadsink 0x41 0x68
$ xrandr --setprovideroffloadsink 1 0
E agora:
$ 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
os dois provedores agora estão associados e exportar a variável especial (para mesa) DRI_PRIME=1
seleciona o dGPU para renderizar:
$ 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)
Portanto, para executar um programa 3D com uso intensivo de GPU chamado myhungrygame
, você provavelmente faria (se o dGPU vier depois do iGPU):
$ xrandr --setprovideroffloadsink 1 0 # X11-wide setting
$ export DRI_PRIME=1
$ ./myhungrygame
Se você conseguir fazer as duas primeiras coisas antes de o ambiente de desktop ser carregado, todos usarão o dGPU para descarregamento 3D por padrão, o que provavelmente não é uma boa ideia para um laptop.