Update: Como testar o Wine com CSMT (Wine - Staging)

Iniciado por Nosferatu Arucard, 18 de Outubro de 2014, 10:08

tópico anterior - próximo tópico

Nosferatu Arucard

Para quem usa o Wine para correr um determinado número de jogos, especialmente os mais graficamente exigentes, é extremamente recomendado usar uma funcionalidade experimental que ainda não foi devidamente introduzida na versão padrão do Wine (como o Wine-Compholio usado no Pipelight), que é conhecida por CSMT.
Este (gigantesco) patch introduz o multi-threading gráfico, que é recorrente desde o DirectX 9 e obrigatório no 10 e 11  ;D.
Em termos gerais o módulo CSMT substitui o antigo código de tradução single-thread pela CPU das instruções Direct3D para OpenGL para um tradutor multi-thread que separa diferentes componentes da renderização gráfica em vários processos (threads) paralelos. Esta funcionalidade exige uma CPU com vários cores/threads físicos para melhor desempenho, bem como a GPU suportar nativamente o multi-thread gráfico, como ocorre nas placas gráficas mais recentes. (O OpenGL 4.x já implementa o multi-threading de forma sucinta)
Além disso os jogos Windows que suportam o OpenGL também ficam beneficiados com o CSMT, pois completa funcionalidades ausentes nos ports Windows destes jogos.  ;D

A vantagem desta versão modificada do Wine é que muitos jogos graficamente exigentes passam de um desempenho mediano (quando usamos máquinas potentes) ou medíocre (usando placas de entrada de gama perfeitamente jogáveis no Windows), para um desempenho óptimo ou adequado, passando em média de 30-40% (ou em casos extremos menos de 20%  >:() para 80-90% de performance em relação ao sistema operativo original. (Em certos casos pode chegar e ultrapassar os 100%, mas são casos pontuais)  :)

Para evitar o trabalho de compilar pode activar o repositório do Wine for Games ou usando as versões CSMT do PlayonLinux.

No primeiro caso deve activar  o repositório especificado em:
https://launchpad.net/~foresto/+archive/ubuntu/winepatched

E depois activar o PPA com o comando:
sudo add-apt-repository ppa:foresto/winepatched

O pequeno senão é que este repositório encontra-se com actualizações irregulares.

Se preferir usar o PlayonLinux pode instalar a última versão modificada que encontra-se referenciada como 1.7.24-CS-0.9.1 (já é um pouco datada em relação à versão mainstream 1.7.29), mas raramente dá problemas com os jogos mais recentes.

Independentemente do caminho que escolheu para instalar (recomendo a segunda opção para manter a última versão padrão para outros programas/jogos, pois a versão CSMT deve ser tratada como as versões do Wine-Compholio, versões de uso experimental/restrito), deve abrir o Editor de Registo e acrescentar a seguinte chave:
Abra a pasta: HKCU/Software/Wine e acrescente uma nova chave designada "Direct3D" (deve apagar os restante hacks porque o CSMT torna metade deles obsoletos ou incompatíveis)
Dentro da pasta Direct3D crie uma nova cadeia (Valor Texto) designada "CSMT". Edite-a (Modificar) e escreva "enabled".

Sucintamente, isto edita a chave HCKU/Software/Wine/Direct3D/CSMT="enabled"

Depois feche o Editor de Registo e reinicie o Wine (wineboot).

Até ao momento testei dois jogos com esta versão modificada do Wine:

No Wolfenstein New Order é necessário criar uma versão de 64-bits pois é um dos primeiros jogos nativos de 64-bits que não suporta 32-bit. Este jogo usa o Direct3D 11 na inicialização e depois comuta para o OpenGL. Felizmente a componente DirectX 11 do Wine é suficiente para o jogo efectuar os testes e comutar para o OpenGL  :D
A gráfica do meu computador (GT 440) é fraca para correr este jogo decentemente (gasta rapidamente o 8 Gb de RAM e um 1 Gb de VRAM num instante), pois é um port directo da versão PS4  ;D
Sem o CSMT ligado, o jogo é sofrível mesmo mantendo as configurações mínimas, mas com o CSMT ligado já é jogavel com as definições médias e com o dobro do frame-rate e maior fluidez  :o

Em relação ao Assassin's Creed Revelations (o III e IV terão de esperar com a finalização do suporte ao Direct3D 11, que ainda está em curso  >:(), transforma um jogo com um desempenho mediano, com picos de arrastamento, num com maior fluídez.  :) Pelo menos foi possível jogar a 1080p  :o, com MSAA 2x e V-Sync activo com as opções gráficas no máximo (Tenho um Core i7  ;D).
Por vezes pode ocorrer algum lag, mas o desempenho global é quase tão bom como no Windows.

Relembro que não são admitidos testes no Wine Application Database com versões CSMT activas, a não ser que compare com o original e refira com nota adicional.  :)

Nosferatu Arucard

#1
Uma actualização extremamente importante: O patchset do CSMT foi integrado no fork do Wine usado pelo Pipelight e rebaptizado de Wine Staging  :D
http://www.wine-staging.com/

Com esta "reviravolta", já podemos trocar o Wine padrão para o fork do Wine Staging, embora seja necessário algumas configurações adicionais para aproveitar os recursos adicionais...

O Wine Staging adiciona ao Wine padrão as seguintes funcionalidades:
1. Suporte DRM aos plug-ins Silverlight, Flash, Unity3D. (Usando preferencialmente o utilitário pipelight-multi para poder usar o Firefox nativo com os plug-ins do Windows)
2. Para quem utiliza placas gráficas da NVidia: suporte ao CUDA, NVAPI, PhysX por hardware.  :o
3. Driver proxy nativo para o sistema de áudio PulseAudio  :o
4. Suporte nativo ao multi-threading gráfico pela GPU e CPU (CSMT)  :o
5. Melhorias nos algoritmos de optimização em aplicações com elevado nível de acesso em recursos Input/Output.
6. Suporte às extensões DXTn
7. Suporte ao som multi-canal via DirectSound.
8. Correcções de bugs.

Actualização:Uso do PPA x-edgers.

Para instalar no Ubuntu, basta abrir o Terminal e aplicar os seguintes comandos
$ sudo add-apt-repository ppa:pipelight/stable
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install --install-recommends wine-staging pipelight-multi

Depois disso é altamente recomendando criar uma série de links simbólicos para o Ubuntu reconfigurar as associações dos executáveis:
$ sudo ln -s /opt/wine-staging/bin/wine /usr/bin/wine
$ sudo ln -s /opt/wine-staging/bin/wineserver /usr/bin/wineserver
$ sudo ln -s /opt/wine-staging/bin/winecfg /usr/bin/winecfg
$ sudo ln -s /opt/wine-staging/bin/winepath /usr/bin/winepath
$ sudo ln -s /opt/wine-staging/bin/wineboot /usr/bin/wineboot
$ sudo ln -s /opt/wine-staging/bin/wineconsole /usr/bin/wineconsole
$ sudo ln -s /opt/wine-staging/bin/regedit /usr/bin/regedit
$ sudo ln -s /opt/wine-staging/bin/regsrv32 /usr/bin/regsvr32

Na prática, os três primeiros são os mais importantes, pois caso o link simbólico não exista, basta prefixar o comando wine para iniciar o programa como habitualmente.

Recomenda-se que corra o winecfg primeiro para actualizar a Wineprefix (o padrão continuará a ser ~./wine) e prosseguir. Ou então apague a pasta para eliminar erros de configuração de vez.  ;)

Se tiver uma placa gráfica NVidia e quiser usar os recursos adicionais, então deverá instalar uma PPA de terceiros como o Xorg-Edgers:
$ sudo apt-add-repository ppa:xorg-edgers
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install nvidia-346
$ sudo apt-get install nvidia-modprobe
Deve instalar as últimas versões dos drivers da Nvidia e ter uma GPU Kepler/Maxwell para funcionar correctamente. Infelizmente é necessário instalar o pacote modprobe da Nvidia para carregar correctamente o driver CUDA, pois não instala automaticamente como devia.

Quando terminar a instalação verifique se na descrição da placa gráfica (Painel de Controlo da NVidia) indica a referência a CUDA cores, pois as placas mais baratas regra geral não suportam CUDA.
- Se tudo correr bem, tente aceder ao site http://cuda-z.sourceforge.net/ e transfira as versões Linux e Windows do programa.
Corra primeiro a versão Linux e aguarde pelo resultado da análise (se der erro, então as extensões CUDA não estão correctamente instaladas ou a placa não é suportada  ;D), depois corra a versão Windows para confirmar.
- Suba um pouco a parada e instale o runtime do PhysX para Windows e o seguinte programa de benchmark: http://www.ozone3d.net/benchmarks/physx-fluidmark/.
A não ser que a sua CPU suporte AVX2 como é o caso da 4ª geração Core, verificará uma grande diferença na velocidade de processamento usando a CPU e a GPU, pois nos últimos processadores da Intel já estreitaram significativamente essas diferenças de poder numérico.  :)

O NVAPI é uma API low-level complementar ao DirectX e OpenGL que habilita o acesso a funções internas das placas de vídeo NVidia. Certos jogos de última geração utilizam funções de optimização NVAPI para ganhar um rácio significativo no cálculo de física, renderização e processamento gráfico em relação ao uso exclusivo das API high-level (Direct3D e OpenGL). Por agora, o suporte ao NVAPI pelo Wine Staging é restrito e serve maioritariamente para o runtime do PhysX carregar o wrapper do CUDA e efectuar os cálculo via GPU.
Na próxima versão (1.7.35) pretende-se a correcção de bugs para usar o OpenCL para este fim, se bem que os jogos via Wine Staging tendem a usar a GPU interna da Intel para este fim (pois o suporte OpenCL da Intel é tecnologia aberta).
O suporte CUDA é um wrapper via nvcuda.dll que carrega as bibliotecas CUDA nativas dos drivers da NVidia, correspondendo a uma transcrição directa das funções, excepto as funções de exportação via Direct3D que são implementadas via OpenGL.

O suporte ao CSMT é universal para todas as placas gráficas  ;D e agora basta abrir o winecfg, abrir o tabulador staging e clicar na opção para activar o CSMT. Com isso, o desempenho nos jogos irá aumentar significativamente, se bem que com uma melhor gráfica e processador também ajuda (e muito)!

Entretanto outros patches em cursos incluem o multi-sampling das faixas de som via DirectSound (parcialmente implementado), que permitirão acabar com alguns slow-dows de certos jogos devido à ausência do suporte por partes dos drivers Linux dos streams sonoros via hardware. Outro patchset ainda no adro é a correcção e implementação das funções de inicialização do Direct3D 10 e 11.
Mas por agora, aproveitem a novidade.

MatheusWillder

Muito bom Nosferatu Arucard, mais uma vez obrigado pelas dicas!

Nosferatu Arucard

E foi apresentado a versão 1.7.35 do Wine Staging do qual corrige 168 bugs em relação aos 36 da versão padrão.
Também corrige a implementação do wrapper do CUDA e suporta dois novos jogos recentes.
A única verdadeira inovação é a implementação inicial do suporte a drivers do Windows  ;D via ntoskrnl.exe que sejam exclusivamente user-mode, como os componentes anti-cheat e certos jogos.
Talvez a prazo suporte dispositivos USB  :)
De resto esta foi a primeira versão que conseguiu emular as placas Taito Type X, pois o loader utiliza funções a nível do ntoskrnl.exe

Nosferatu Arucard

Um pequeno update para avisar que na versão 1.7.36 foram actualizadas os wrappers para o NVidia CUDA 7.0, suporte ao Nvidia Encoder 5, melhorias no PsyhX, e ainda a habitual melhoria de funcionalidades.
Foi integrada melhorias no suporte de som multicanal (exportação da versão padrão), com a introdução de novas opções de configuração no Wine Config  ::)
A única coisa verdadeiramente nova (E é incrível como conseguem fazer isso num salto de versão) é a implementação do framework ThreadPool API que foi introduzida no Windows Vista  ;D.
Esta funcionalidade permite que programas e jogos no modo Windows Vista, 7 ou 8 tenham uma melhor optimização de gestão de procedimentos em multithreading deixando o sistema operativo gerir as prioridades de cada um.

Nosferatu Arucard

Novidades das versões 1.7.37 e 1.7.38: Foram integrados os projectos meios perdidos que implementaram o Job Object API, presente desde o Windows 2000  mas  ausente no Wine em 2015... >:(
E também foi introduzido o suporte inicial ao DirectX Video Acceleration 2 API (DXVA2), que exige a instalação das bibliotecas nativas do VAAPI. Em GPU Intel isso é fácil, mas para AMD e NVidia exige a instalação de wrappers.
Isto permite o processamento do vídeo pela GPU, embora fosse uma das extensões previstas pelo projecto Pipelight (Um meta-plugin para Firefox nativo para poder usar plug-ins Windows via Wine).
Conjuntamente, espera-se que a versão 1.7.39 tenha por fim novidades no DirectX 10 e 11, já que o wrapper DX10/11 já está a ser implementado nos últimos dias no código do Wine com elevada rapidez.  :o

Nosferatu Arucard

Por hora foram implementados mais funções do d3d10core.dll no Wine 1.7.39, mas ainda o suporte a jogos que usam exclusivamente o DirectX 10 é experimental.
Para produtoras que usam o código-fonte, portar é actualmente possível, o jogo "Bioshock Infinity" que o diga!

Agora, o Wine Staging 1.7.39 para além dos patches e melhorias do costume, também acrescentou outra funcionalidade importante: Uma gestão inteligente das chamadas de sistema do WineServer, evitando o quando possível para operações triviais que acabam por ter uma quebra de performance grave. No entanto só vai funcionar com kernels superiores à versão 3.17...  ::)