A empresa Valve uma nova ramificação do projeto , baseado nos trabalhos do projeto Wine e focado em garantir a execução de aplicativos de jogos em Linux, criados para Windows e disponíveis no catálogo Steam. Os trabalhos do projeto sob a licença BSD. À medida que o Wine original e projetos relacionados, como DXVK e vkd3d, estejam prontos, as alterações desenvolvidas no Proton serão incorporadas.
O Proton permite executar diretamente, no cliente Steam para Linux, aplicativos de jogos que são fornecidos apenas para Windows. O pacote inclui a implementação do DirectX 10/11 (baseado em ) e 12 (baseado em ), funcionando por meio da tradução de chamadas do DirectX para a API Vulkan, oferecendo suporte aprimorado para controladores de jogos e a capacidade de usar o modo de tela cheia independentemente das resoluções suportadas pelos jogos. Em comparação ao Wine original, o desempenho de jogos multiprocessados aumentou significativamente devido à aplicação do patch "» (Sincronização Eventfd) ou «futex/fsync».
Principais :
- Foi realizada a sincronização com a base de código Wine 4.11, de onde foram transferidas mais de 3300 mudanças (a ramificação anterior era baseada no Wine 4.2). 154 patches do Proton 4.2 foram transferidos upstream e agora fazem parte da composição principal do Wine;
- Adicionada suporte experimental a primitivos de sincronização baseados na chamada de sistema futex(), que permite reduzir a carga na CPU em comparação com esync. Além disso, a nova implementação resolve problemas relacionados à necessidade de usar para esync e possível esgotamento de descritores de arquivo disponíveis.
O objetivo do trabalho em andamento é expandir a funcionalidade da chamada de sistema futex() padrão no kernel Linux com recursos necessários para otimizar a sincronização de um pool de threads. Patches necessários para o suporte do Proton à flag FUTEX_WAIT_MULTIPLE já para inclusão na composição principal do kernel Linux e . As mudanças preparadas ainda não foram incluídas na composição principal do kernel, portanto, no momento é necessário um kernel específico que suporte esses primitivos;
- A camada (implementação de DXGI, Direct3D 10 e Direct3D 11 sobre a API Vulkan) foi atualizada para a versão , e (implementação experimental de Direct3D 9 sobre Vulkan) para a versão 0.13f. Para incluir o suporte D9VK no Proton, deve-se usar a flag PROTON_USE_D9VK;
- As atualizações atuais da taxa de refresh do monitor são transmitidas para os jogos;
- Correções relacionadas ao tratamento do foco do cursor do mouse e gerenciamento de janelas foram feitas;
- Atrasos na entrada e problemas com suporte à vibração para controles foram resolvidos, especialmente em jogos no motor Unity;
- Adicionada suporte à última versão do OpenVR SDK;
- Componentes FAudio com implementação de bibliotecas de som DirectX (API XAudio2, X3DAudio, XAPO e XACT3) foram atualizados para a versão 19.07;
- Problemas com o subsistema de rede em jogos GameMaker foram resolvidos;
- Muitos módulos do Wine agora são compilados como arquivos PE do Windows, em vez de bibliotecas Linux. À medida que o trabalho avança nessa área, o uso de PE ajudará alguns sistemas de DRM e anti-cheat. No caso de compilações personalizadas do Proton, provavelmente será necessário recriar a máquina virtual Vagrant para compilar arquivos PE.
Antes de aceitar os patches da Valve para o núcleo principal do Linux, que utilizam futex() em vez de esync, é necessário instalar um núcleo especial com suporte ao pool de sincronização de threads, implementado em um conjunto de patches. . Já existe um pacote de núcleo pronto no AUR para o Arch Linux. No Ubuntu 18.04 e 19.04, é possível usar o repositório PPA com núcleos experimentais linux-mfutex-valve (sudo add-apt-repository ppa:valve-experimental/kernel-bionic; sudo apt-get install linux-mfutex-valve);
Caso tenha um núcleo com suporte ao fsync, ao iniciar o Proton 4.11, será exibida a mensagem na console "fsync: up and running". É possível desativar o fsync forçadamente usando a flag PROTON_NO_FSYNC=1.
Fonte: opennet.ru
