Ah, PRIME, também conhecido como "por que isso nunca funciona". Explicação demorada após ...
Então, eu suponho que você tenha adquirido (como eu) um computador com pelo menos duas placas gráficas. Em alguns sistemas, eles compartilham suas saídas de gráficos de computador e são conectados a eles através de algum mecanismo de comutação, chamado MUX (reffering to MULTIPLEXER), então basicamente você pode definir um parâmetro no BIOS (ou UEFI) que placa gráfica deve ser ligado ou ligado a qual saída.
A maioria dos sistemas, no entanto, adotou a alternativa mais barata e muito mais complicada de compartilhar seus buffers gráficos . Isso significa que, por exemplo, sua placa integrada de baixa potência está sempre conectada a sua tela, e todos os pixels que são desenhados nessa saída precisam de alguma forma passar por essa placa.
Se tudo o que você está executando são aplicativos leves, provavelmente você estará usando apenas o cartão interno. Mas às vezes você quer usar seu poderoso cartão externo para calcular todo esse material 3D para você, então você tem que dizer ao xrandr que
- O cartão externo está fazendo parte do trabalho (todos os programas com a variável de ambiente DRI_PRIME = 1 get)
- A placa interna precisa mexer os dados do cartão externo no material que NÃO foi calculado no cartão externo e desenhar tudo na tela.
Isso é chamado de " descarga de GPU ", e o cartão externo é, nesse contexto, o " offload sorce ", enquanto a placa interna é a " descarga" sink "(então o fluxo de dados vai da fonte ao sink), e você pode habilitar isso (se não estiver habilitado por padrão) com
xrandr --setprovideroffloadsink source_provider sink_provider
, onde source_provider
e sink_provider
são provavelmente os nomes dos seus drivers gráficos, por exemplo nouveau
e Intel
.
No entanto, em alguns sistemas, algumas das saídas de vídeo são conectadas à placa externa . Isso significa que a placa interna, que faz todo o confronto do espaço de tela do programa diferente, tem que enviar sua saída para o cartão externo, que simplesmente atrai os pixels em seu resultado. Neste contexto, os dados vão do source de um cartão para o output do outro, e para habilitá-lo você tem que usar
xrandr --setprovideroutputsource output_provider source_provider
onde output_provider
é o nome do cartão externo que tem as saídas anteriormente inacessíveis conectadas a ele, e source_provider
é o cartão integrado, que faz o processamento de dados, mas não pode atrair as saídas conectadas ao cartão externo.
Uma última coisa, se você tiver ambos os métodos ativados ao mesmo tempo (o que pode acontecer), o material para os aplicativos com gráficos pesados é calculado no cartão "bom", enviado para o cartão "lame", fiddled juntamente com o resto do espaço da tela, e às vezes enviar de volta para o cartão "bom", onde será desenhado na tela. A desvantagem de tudo isso é que todo o "screen-space-fiddle", também conhecido como renderização, é feito na placa "lame", que pode ser lenta.
Para contornar isso, você tem que mudar a placa que está fazendo toda a renderização (chamada GPU principal) da integrada para a externa, que (até onde sei) não pode ser feita sem reiniciar o X servidor, e requer que você mexa com os arquivos de configuração do xorg.
Se você quiser, eu posso lhe dar muitas informações sobre como eu fiz a minha instalação (Arch linux, lenovo W530 com intel e nouveau driver, i3wm), e caso contrário eu recomendo que você leia man xrandr
.
Hammockdude out