1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Steam Proton - Guia e Feedback

Discussão em 'Novidades GNU/Linux & *nix World' iniciada por Arucard1983, 21 de Outubro de 2018. (Respostas: 10; Visualizações: 1827)

  1. Arucard1983

    Arucard1983 Power Member

    Conforme pedido pelo utilizador supra-citado, eu concordo que é necessário ter um thread dedicado para esta funcionalidade.

    No próximo post devo colocar um Guia Rápido para usar o Steam Proton convenientemente, bem como alertar alugumas falhas que em certos casos eram plenamente evitáveis...
     
  2. Arucard1983

    Arucard1983 Power Member

    Steam Proton:
    Lançado nos finais de Agosto de 2018, o cliente Linux do Steam agregou o projecto Wine para permitir a execução de jogos exclusivos do Windows em sistemas Linux.
    Para este efeito criou-se um fork do Wine (Proton) com patches específicos para optimizar a execução detes jogos, como o esync para optimizar a emulação do DirectX 9 a 11 via OpenGL, e comunicação entre threads.
    Foi integrado (na versão 3.16) alguns patches do Wine Staging para que certos jogos com determinados DRM como o Denuvo funcionassem correctamente.
    Outras das modificações de relevo foi a integração do suporte ao Vulkan API (wine-vulkan), bem como o DXVK que é uma biblioteca de emulação do DirectX 10/11 via Vulkan, substituindo o código de emulação padrão do Wine que se baseia do OpenGL.
    A grande vantagem do DXVK em relação ao WineD3D (OpenGL) é que o Vulkan é uma API que perite multi-threading ao nível das pipelines da GPU, permitindo uma implementação mais natural do Direct3D 11 (que já era multi-threading, enquanto o OpenGL o não era).
    Existem ainda outras melhorias que podem ser consultadas a partir do site oficial:
    https://steamcommunity.com/games/221410/announcements/detail/1696055855739350561

    Para configurar o Proton (Steam Play):

    É necessário activar o Steam Beta primeiro, e para isso, a partir do menu do cliente Steam, deve-se escolher "Settings", e escolher em "Account", a opção de participar em betas. Isto fará reiniciar o Steam e instalar os componentes extra.

    Ao reiniciar o Steam, deverá aparecer a secção "Steam Play", permitindo definir a versão padrão do Proton, que actualmente é o Wine 3.16.3. Clique em "OK", e permita que o Steam seja reiniciado as vezes necessárias.

    Terminado todo o processo deve instalar as drivers gráficas mais recentes (NVidia 396.x.x, ou AMD RAVD), conforme indicado aqui:
    https://github.com/doitsujin/dxvk/wiki/Driver-support

    Mesmo com drivers beta, pode existir algum atraso na implementação das últimas funcionalidades.
    A versão mais recente do Vulkan (1.1.88) suporta os Output Streams, permitindo que o NVidia Hairworks funcionasse pela primeira vez via DXVK (0.90).
    O Proton 3.16.3 já incluiu os patches necessários, mas alguns drivers beta podem demorar vários dias ou semanas para implementar correctamente as últimas novidades.

    A regra de ouro nestre casos é que se deve ter algum critério na pressa em ter as últimas versões e patches, arriscando a ter um sistema instável, em vez de deixar assentar a poeira primeiro.

    Ultrapassado estes obstáculos, basta abrir o Steam, comprar ou instalar um jogo qualquer, que este será instalado sem mais problemas.

    Vantagens do Steam Play versus Windows Steam on Wine:

    A integração do Wine no Steam Client permite evitar ter que criar um ou mais WINEPREFIX com a versão Windows do Steam (exigindo autenticar cada um deles :002:), para instalar jogos que são exclusivos do Windows em sistemas Linux...
    Assim, basta um cliente instalado, com uma única chave de activação, que este trata de criar um WINEPREFIX exclusivo para cada título (fica dentro da pasta ~/.steam/steamapps/common/<title>/pfx), e integra os wrappers sem mais intervenção adicional. OS ficheiros do jogos ficam nas directorias habituais, enquanto a subdirectoria /pfx contêm o "drive C:" com as bibliotecas adicionais que o título necessita, pois ainda em certos casos é necessário instalar componentes extra para os jogos correrem.

    Outra da grandes vantagens, é que os frameworks do Steam DRM, do Steam VR e SteamWorks nativamente compilados para Linux, podem comunicar com o título Windows em execução via Proton, reduzindo as componentes não-nativas apenas ao mínimo necessário. Isto poderia não ser possível obter o mesmo suporte correndo o Steam Client for Windows puro sobre o Wine padrão.

    Títulos Whitelisted.

    Trata-se de uma lista testada de jogos pela Valve e pela comunidade que garantem que os títulos Windows-only são compatíveis pelo Steam Play. Nestes casos, basta esclher o jogo, que este é instalado e executado como se fosse um título nativo, sem que ocorra complicações. :D

    Dois jogos como exemplo, de que certos jogos exigem configurações especiais :joker:

    São os jogos Assassin's Creed Director Cut, e o Assassin's Creed Odyssey 8|

    Depois de jogar o primeiro via Wine, do qual já vai algum tempo, como uma performance um pouco má (só suportava o DirectX 9, via OpenGL), decidi tentar jogar no modo DirectX 10 (que foi mais experimental, já que no AC II só suportava o DX9!), uma vez que queria usar o DXVK.

    O DXVK emula o DirectX 10, fazendo o callback para o DirectX11, e depois aplica a implementação via Vulkan ao nível dos drivers da GPU.

    A instalação é feita sem problemas, e corre até os Regdists sem falhas (mesmo que não dé em nada, devido à protecção de ficheiros do WINEPREFIX). O título é activado, e mostra a janela de registo, que pode ser ignorada ("Never":lol:).
    O jogo corre (!) até ao final do vídeo que fica com um ecrã preto... :facepalm:
    Deve-se fazer Alt+Tab ou Ctrl+Alt+F1/F7 para tentar mudar a janela e matar o jogo.

    O problema está explicado na página do DXVK. O componente d3d_compiler43.dll do Wine contêm falhas e necessita de ser overrided:
    https://github.com/doitsujin/dxvk/issues/551

    Pode usar o winetricks e o protontricks para instalar o dll em falta (o argumento 15100 é o SteamID do jogo AC Director Cut):
    $ python3 protontricks 15100 d3dcompiler_43

    Editando o launcher do jogo pode-se acrescentar o argumento:
    DXVK_HUD=1 %command%
    Para ter alguma informação sobre o framerate, e as versões do Vulkan activas. (perfeito para saber resolver eventuais problemas!)

    Ainda assim possui um bug estranho que acontece com o menu de saída (até indicado na página acima), do qual o último terço do ecrã está cortado, exigindo alguma tentativa e erro para acertar o botão "Exit"), do qual é um problema da NVidia... :lol:
    [NVidia 970 GTX é a minha placa de vídeo.]

    Reiniciando o Steam, o jogo está jogável, tendo em atenção ao bug do menu de saída.
    A diferença é que antes jogava a 40 fps (DX9, emulado por OpenGL) nas situações favoráveis, caindo para menos de metade no meio da confusão.
    Agora... Atinge os 200 fps :002::002::002:, e somente os casos críticos poderia cair para menos de 100 fps !!

    E o Assassin's Creed Odyssey ?


    Neste jogo exige que tenha o computador com os drivers Vulkan, ou não terá DXVK, muito menos um jogo fluído, se é que corra mesmo !!!
    Muitos títulos Direct3D 11 via Proton, ou mesmo via Wine, não funcionam com a emulação via OpenGL.
    A falta de multithreading no pipeline gráfico acaba por crashar o jogo, ou ter uma performance horrível.

    Este jogo usa o UPlay, e após várias tentativas, descobrou-se que muitos títulos da Ubisoft não funcionavam por causa das bibliotecas criptográficas do Steam estarem desactualizadas :002:

    Para resolver o problema deve-se instalar a versão de 32-bits do GNUTLS mais actualizada possível (as distribuições comuns fazem isso), e depois aplicar os seguintes symlinks:
    $ sudo ln -s /usr/lib/x86_64-linux-gnu/libgnutls.so.30 ~/.steam/ubuntu12_32/steam-runtime/pinned_libs_64/libgnutls.so.26
    $ sudo ln -s /usr/lib/i386-linux-gnu/libgnutls.so.30 ~/.steam/ubuntu12_32/steam-runtime/pinned_libs_32/libgnutls.so.26

    Atenção que deve adaptar as linhas para cada distribuição! :005:


    E deve usar a versão Proton 3.16.1 ou superior, por causa dos patches necessários para usar o UPlay.


    Terminado este passo, basta instalar o jogo e correr. O UPlay deve-se instalar sozinho, do qual este ainda instalar o Steam Client for Windows em muitos casos, embora não seja tão grave nesse ponto.
    (deixa o UPlay instalar o que quer, uma vez que terá que fazer a activação on-line).

    Ultrapassado este problema, o jogo deverá correr automaticamente, assim que clicar em "Play", sem que seja mais problemas.

    A nível de performance ronda os 30 a 40 fps com as definições High, podendo ultrapassar os 60 fps. Ainda existe espaço para nas versões do DxVK melhorar a performance e o framerate, mas deve-se ter em atenção que o suporte à criptografia no Wine não pode ser negligenciado, como se comprova neste exemplo.
    https://github.com/ValveSoftware/Proton/issues/1757
     
  3. jfmc00hot

    jfmc00hot Power Member

    Existe algum site com lista actualizada dos jogos compatíveis?
     
  4. Arucard1983

    Arucard1983 Power Member

    Após um período experimental, já temos um site condigno sobre a compatibilidade dos jogos com o Proton:

    https://www.protondb.com/
     
  5. Arucard1983

    Arucard1983 Power Member

    Por minha parte aproveitei a promoção do Halloween para comprar o TT Isle of Man, por metade do preço... :004:

    E este jogo que usa o DirectX 11 corre sem espinhas (a 60 fps sólidos a 1080p!) via Proton! :004:

    Naturalmente que confirmei que usa o DXVK para emular o DX11...
     
  6. Arucard1983

    Arucard1983 Power Member

    Mesmo com o Proton existem jogos que é mais prático usar o Lutris, que este instala versões especiais do Wine, o DXVK, e a versão Windows do Steam.
    O exemplo mais clássico são os jogos Assassin's Creed II, Brotherhood, Revelations e III.
    Os jogos da saga Ezio entram em parafuso com o Proton e a Steam com a CD Key e o UPlay da Ubisoft. Usando o Lutris, e arrancando o runner Steam manualmente consegue-se instalar os jogos, activar as keys pelo UPlay e jogar sem problemas alguns.

    Já o Assassin's Creed III que foi verdadeiramente o primeiro jogo optimizado para o DirectX 11 (Reparei que o AC Revelations suporta o DX11, e agora com o DXVK arranca neste modo.), requer que seja instalado usando o script do jogo no repositório do Lutris, e arranque directamente pelo atalho. Por algum motivo, quando se arranca pelo atalho do Lutris, o Assassin's Creed III inicia o Steam e o UPlay minimizados, acabando por arrancar o jogo correctamente (e com uma fluídez que até assusta!).
    Se abrir o Steam directamente, e carregar em Play, o jogo trava com a imagem de aviso de que o jogo foi feito com uma equipa multidisciplinar, e etc... (Acabando por fechar...)
     
  7. Arucard1983

    Arucard1983 Power Member

    Usando um portátil Clevo com Debian Stretch (curiosamente o Debian é mais resiliente que o Ubuntu...), pude confirmar que os laptops com GPU híbridas entram num terreno minado. :005:

    Quando temos um computador que usa uma GPU Intel e uma NVidia deve-se instalar o Bumblebee, e depois editar os launchers dos jogos com o commando:
    optirun %command%
    primusrun %command%
    [Mesmo que use o Wine ou nativo, deve usar este comando para usar a NVidia! :D]

    Mas infelizmente o Vulkan API não combina bem com o Bumblebee e exige compilar uma biblioteca para que os jogos que usam o Vulkan API (mesmo nativos!), ou o DXVK. :(

    A partir do seguinte repositório:
    https://github.com/felixdoerre/primus_vk

    Compile e instale a biblioteca conforme as instruções, e depois o comando no launcher deverá ser:
    ENABLE_PRIMUS_LAYER=1 optirun %command%

    Em certos casos raros poderá arrancar o DXVK na GPU Intel (somente as séries HD 6xx suportam Vulkan, mas a performance é baixa...), ou o jogo fechar sem aviso.
    Como exemplo, o jogo Yu-Gi-Oh Links só funciona no Proton com a Intel HD em sistemas Bumblebee, mas felizmente a Intel HD 630 dá conta do recado.

    Como não testei esta hipótese, terão que conformar com Vulkan em Intel HD, ou OpenGL na NVidia...

    Mesmo nos jogos do Witcher, acabei por comprar a versão GOG.com, mas é preciso um script para correr a versão DirectX 11 (usando o Wine-Staging com CSMT, sem Vulkan) com a GPU NVidia com o Bumblebee.
     
  8. Arucard1983

    Arucard1983 Power Member

    Recentemente tem surgido no Youtube (quer para o Steam Proton, ou para o Lutris) uma série de vídeos do qual experimentaram combinar o dgVoodoo (que é freeware, mas closed-source) com o DXVK.
    Este wrapper (dgVoodoo) que originalmente emulava a API 3dfx Glide para DirectX 11, acabou por emular o DirectX 1 a 7 para o DX11:n1qshok: numa primeira fase, e posteriormente chegou ao ponto de emular o DirectX 9 para o 11 (!)

    Em sistemas Linux, o dgVoodoo funciona no Wine, e como é uma aplicação que utiliza o DirectX 11, o DXVK aparece na equação para usar os drivers Vulkan.

    Embora o Wine já tenha implementado o DirectX 3 a 7 via OpenGL, e o DirectX 8 e 9 partilhem o mesmo pipeline para o OpenGL, isto não impede de usar o combo dgVoodoo + DXVK que faz bypass aos drivers OpenGL e usem os drivers Vulkan.
    Existe um fork do DXVK para que o DirectX 9 seja emulado directamente via Vulkan, ou acabe por ser um wrapper para a implementação do DX11 do DXVK (D9VK), que eventualmente poderá evitar o uso de software proprietário na equação. (Já existem wrappers DirectDraw para DX9 open-source, mas não tão avançados como o dgVoodoo).

    Ainda que num jogo antigo passe do seguinte pipeline:
    Jogo.exe - > DirectX 3~7~9 -> WineD3D (Wine OpenGL) -> OpenGL GPU
    Para o seguinte:
    Jogo.exe -> DirectX 3~7~9 -> DirectX 11 (vgVoodoo Virtual GPU) - > DXVK (Wine Vulkan)-> Vulkan GPU

    Em certas circuntâncias, pode valer a pena apostar nesta configuração, pois somente com esta união foi possível jogar The Sims 1 e 2 8| pela primeira vez em Linux :002: (Salvo algumas excepções), e depois foram criados os scrips no Lutris para automatizar a instalação.
    (Atenção que nos Sims 1 deve-se usar o Complete Edition, e pode ser necessário um patch no-CD... :()
    Quanto aos The Sims 2, deve-se usar a versão Ultimate Edition do Origin.

    Noutras circunstâncias, é facultativo para quem jogou usando o Wine padrão. Ainda assim observa-se que o framerate é mais consistente, e beneficia-se de melhorias gráficas (mais devido ao dgVoodoo), especialmente em jogos DirectX 9.

    Por agora, fica alguns exemplos de jogos a correrem via dxVoodoo + DXVK:



     
  9. Arucard1983

    Arucard1983 Power Member

    Nem que seja para jogar a versão Diablo do GOG...



    Do qual eu experimentei pessoalmente, e pelo menos em sistemas Ubuntu/Debian, a versão 4.3 do Wine tende a ter o menu inicial corrupto ou ter um ecrã preto. Se premir algumas vezes (desde que já tenha um save) a tecla Enter, acabará por carregar o jogo, e tudo fica normal.
    O Lutris usa o wrapper do GOG para jogar o Diablo (pode ser necessário para configurar o jogo pela primeira vez), mas pode-se trocar pelo dgVoodoo + DXVK para beneficiar de funcionalidades mais avançadas, como o upscale para 4K, ou filtros anisotrópicos a 16x ou upscale de texturas.

    Actualmente podem usar o Proton da Valve para associar jogos que não são da Steam, como o Diablo do GOG, e podiam usar este wrapper (dgVoodoo2) da mesma maneira.
     
    Última edição: 10 de Março de 2019
  10. Arucard1983

    Arucard1983 Power Member

    Para quem usa laptops Nvidia Optimus este guia é importante, porque já saiu a versão estável do plug-in do optimus/primus que permite usar a API Vulkan na GPU NVidia. :002:

    Para esse fim, deverá instalar primeiro o Bumblebee e os drivers proprietário da NVidia. (Em sistemas Debian é necessário instalar tudo: bumblebee-nvidia, nvidia-driver, libgl1-nvidia-glx, libvulkan1 e associados. Depois deve-se definir o parâmetro ACPI adequado no kernel (Uma versão do Windows fictícia, como Windows 2009...)

    Assim que verificar que digitar:
    Código:
    optirun %command%
    primusrun %command%
    no atalho do jogo na Biblioteca da Steam, ou em qualquer programa que usa, funcionar e mostrar que usa a NVidia em vez da Intel HD está pronto para avançar.
    Isto permite usar programas OpenGL usando a NVidia em vez da GPU Intel integrada na CPU, enquanto o resto usa a Intel GPU sem problemas de maior.


    Para usar o Vulkan na NVidia, e consequentemente 90% da biblioteca da Steam num laptop NVidia Optimus, deverá ir para o site:

    https://github.com/felixdoerre/primus_vk/releases

    E transferir a versão estável 1.0

    Uma vez descompactada e instalado as bibliotecas Vulkan (vulkan-dev), basta entrar no directório da bilbioteca e compilar:

    Código:
    make libprimus_vk.so libnv_vulkan_wrapper.so
    Como as instruções são um pouco esdrúxulas, pelo menos no Debian 9 bastava fazer:

    1. Uma vez compilado copia-se os ficheiros:

    Código:
    su
    # cp libprimus_vk.so /usr/lib/x86_64-linux-gnu/
    # cp libnv_vulkan_wrapper.so /usr/lib/x86_64-linux-gnu/nvidia/
    # cp nv_vulkan_wrapper.json /usr/share/vulkan/icd.d/
    # cp primus_vk.json /usr/share/vulkan/implicit_layer.d/
    # cp pvkrun.in.sh /usr/bin/pvkrun
    
    2. Isto significa que a biblioteca do wrapper fica na directoria padrão das bibliotecas de sistema, enquanto o driver da NVidia switcher fica na directoria da NVidia, a mesma que ficam as bibliotecas OpenGL.
    Depois são dois ficheiros de configuração que partilham as restantes do sistema.
    O último é um script que implementa o comando pvkrun, que evita estar a escrever variáveis de sistema antes do primusrun.

    3. Para usar o novo wrapper na Steam, basta editar o atalho e escrever:
    Código:
    pvkrun %command%
    DXVK_HUD=1 pvkrun %command%
    Embora a última seja válida em jogos Windows usando o DXVK, do qual agora já comuta para a NVidia.
     
    Última edição: 9 de Maio de 2019
  11. Arucard1983

    Arucard1983 Power Member

    Após vários testes com o primus, e com a descoberta (infeliz) de ter cuidado com os jogos de 32-bits, fiz uma breve revisão das instruções de instalação.

    As instruções aplicam-se para o Debian 9. Noutros sistemas como o Arch já têm os pacotes oficiais para instalar.
    1. Por norma o Debian instala o suporte de 32 e 64-bit para o OpenGL para a GPU integrada Intel, pelo que não é necessário preocupar com o resto.

    2. Instale o bumblebe-nvidia e as bibliotecas Vulkan de 32 e 64 bits para a Intel e Nvidia.
    $ apt -t stretch-backports bumblebee-nvidia nvidia-driver nvidia-kernel-dkms bbswitch-dkms mesa-vulkan-drivers libgl1-nvidia-glx libvulkan1 libgl1-nvidia-glx:i386 libvulkan1:i386 primus primus-libs:i386
    (E mais uns quantos que possa ter esquecido... O Debian é picuínhas para obrigar a definir tudo explicitamente! :005:)

    A regra é que os drivers são sempre de 64-bits, mas as bibliotecas de suporte das aplicações necessitam de ter as versões de 32 e 64-bit!

    3. Para evitar que o sistema não arranque (a não ser no modo terminal...) abra o nano:
    $ su
    # nano /etc/default/grub

    E modifique o seguinte comando:
    GRUB_CMDLINE_LINUX_DEFAULT="acpi_osi='Windows 2009' <o resto fica igual...> "

    Actualize a configuração:
    update-grub

    E reinicie o computador.

    4. Como nos laptops com GPU híbridas o Debian usa sempre a Intel HD (e regra geral, tudo o que é renderizado pela NVidia passa para o Intel HD e segue para o ecrã), é necessário usar os comandos optirun ou primusrun antes do resto para que o programa use a Nvidia, contando que as bibliotecas OpenGL estejam instaladas.

    Teste com jogos ou outros programas se funciona:
    $ firefox
    $ primusrun firefox
    (Use qualquer coisa que necessita do OpenGL)

    Caso tudo esteja funcional, pode passar ao passo seguinte.

    5. O primus_vk implementa o stream entre a GPU Nvidia via Vulkan com a GPU Intel.
    Para o sistema funcionar correctamente, é necessário que as duas GPU usem Vulkan (se bem que Vulkan numa Intel GPU não seja muito eficiente, mas a Intel 630 HD suporta Vulkan 1.0.x nativamente por hardware!).
    O trabalho pesado é feito pela NVidia e depois copia a renderização para a Intel que faz o trabalho de combinar com os processos renderizados pela GPU integrada e mostrar no ecrã.

    Para instalar o switcher deve transferir uma cópia do código-fonte em:
    https://github.com/felixdoerre/primus_vk/releases/tag/v1.0

    E instalar as bilbiotecas de suporte para compilar:
    # apt -t stretch-backports install libvulkan-dev libvulkan-dev:i386

    6. Primeiro copia-se os ficheiros de configuração para os locais respectivos:
    Código:
    su
    # cp nv_vulkan_wrapper.json /usr/share/vulkan/icd.d/
    # cp primus_vk.json /usr/share/vulkan/implicit_layer.d/
    # cp pvkrun.in.sh /usr/bin/pvkrun
    7. Compila-se primeiro as bibliotecas nativas de 64-bits:
    $ make libprimus_vk.so libnv_vulkan_wrapper.so

    E depois copia-se para as directorias de sistema:
    Código:
    su
    # cp libprimus_vk.so /usr/lib/x86_64-linux-gnu/
    # cp libnv_vulkan_wrapper.so /usr/lib/x86_64-linux-gnu/nvidia/
    8. Agora compila-se as versões de 32-bit, caso exista um programa de 32-bit que necessite do Vulkan, o que em 99.9% é um jogo do Windows de 32 bits que usa o DirectX 11. :002:

    Abra o ficheiro nv_vulkan_wrapper.cpp e modifique a linha:
    NV_DRIVER_PATH "/usr/lib/x86_64-linux-gnu/nvidia/current/libGL.so.1"
    para:
    NV_DRIVER_PATH "/usr/lib/i386-linux-gnu/nvidia/current/libGL.so.1"

    Depois disso é só compilar:
    $ rm *.so
    $ CXXFLAGS=-m32 make libprimus_vk.so libnv_vulkan_wrapper.so

    E copiar:
    Código:
    su
    # cp libprimus_vk.so /usr/lib/i386-linux-gnu/
    # cp libnv_vulkan_wrapper.so /usr/lib/i386-linux-gnu/nvidia/
    9. Terminado a instalação do wrapper, só falta tornar o script pvkrun executável:
    $su
    # chmod +x /usr/bin/pvkrun

    10. Para testar se tudo está a funcionar como deve ser, verique se:
    pvkrun <programa>

    Ou no Steam Client:
    pvkrun %command%

    O jogo está a usar Vulkan com a Nvidia. :001:
    Se estiver a funcionar, parabéns, já resolveu o problema das GPU híbridas com Vulkan usando o Bumblebee!
     

Partilhar esta Página