La société Valve nouvelle branche du projet , basé sur les travaux du projet Wine et destiné à permettre l'exécution d'applications de jeu créées pour Windows sous Linux et répertoriées dans le catalogue Steam. Les travaux du projet sous licence BSD. Au fur et à mesure que les changements développés dans Proton sont prêts, ils sont transférés dans Wine et d'autres projets associés, tels que DXVK et vkd3d.
Proton permet de lancer directement des applications de jeu via le client Steam sous Linux, fournies uniquement pour Windows. Le paquet inclut une implémentation de DirectX 10/11 (basée sur ) et de 12 (basée sur ), fonctionnant par la traduction des appels DirectX vers l'API Vulkan, offrant un meilleur support pour les manettes de jeu et la possibilité d'utiliser le mode plein écran indépendamment des résolutions d'écran prises en charge par les jeux. Par rapport à l'original Wine, la performance des jeux multithreadé a considérablement augmenté grâce à l'application des patchs «» (Synchronisation Eventfd) ou «futex/fsync».
Principales :
- La synchronisation a été effectuée avec la base de code Wine 4.11, dont plus de 3300 modifications ont été transférées (l'ancienne branche était basée sur Wine 4.2). 154 correctifs de Proton 4.2 ont été transférés upstream et font désormais partie intégrante de Wine;
- Ajout d'un support expérimental pour les primitives de synchronisation basées sur l'appel système futex(), ce qui permet de réduire la charge du CPU par rapport à esync. De plus, la nouvelle implémentation résout les problèmes liés à la nécessité d'utiliser pour esync et au possible épuisement des descripteurs de fichiers disponibles.
Le but des travaux réalisés est d'étendre les fonctionnalités de l'appel système standard futex() dans le noyau Linux avec les capacités nécessaires pour une synchronisation optimale d'un pool de threads. Les correctifs nécessaires pour le support de Proton du drapeau FUTEX_WAIT_MULTIPLE sont déjà pour être inclus dans la version principale du noyau Linux et . Les modifications préparées ne sont pas encore incluses dans la version principale du noyau, donc pour le moment il est nécessaire d'un noyau spécial avec support de ces primitives ;
- Couche (implémentation de DXGI, Direct3D 10 et Direct3D 11 au-dessus de l'API Vulkan) mise à jour à la version , et (implémentation expérimentale de Direct3D 9 au-dessus de Vulkan) à la version 0.13f. Pour activer le support D9VK dans Proton, il faut utiliser le drapeau PROTON_USE_D9VK ;
- Transmission à des jeux de la fréquence de rafraîchissement actuelle de l'écran ;
- Corrections apportées à la gestion de la mise au point du curseur de la souris et à la gestion des fenêtres ;
- Suppression des retards d'entrée et des problèmes de support de vibration pour les manettes, qui apparaissent dans certains jeux, surtout ceux utilisant le moteur Unity ;
- Ajout du support de la dernière version de l'OpenVR SDK ;
- Les composants FAudio avec la mise en œuvre des bibliothèques sonores DirectX (API XAudio2, X3DAudio, XAPO et XACT3) ont été mis à jour à la version 19.07 ;
- Résolution des problèmes avec le sous-système réseau dans les jeux sur GameMaker ;
- De nombreux modules Wine sont désormais compilés comme des fichiers PE Windows au lieu de bibliothèques Linux. Au fur et à mesure que le travail avance dans ce domaine, l'utilisation de PE aidera certains systèmes DRM et anti-triche. En cas de compilation personnalisée de Proton, il sera probablement nécessaire de recréer la machine virtuelle Vagrant pour compiler les fichiers PE.
Avant d'intégrer les correctifs de l'entreprise Valve dans le noyau principal de Linux pour utiliser futex() au lieu de esync, il est nécessaire d'installer un noyau spécial prenant en charge le pool de synchronisation des threads, implémenté dans le jeu de correctifs. . Pour Arch Linux, un paquet est déjà disponible dans l'AUR, compilé avec des correctifs fsync. Sous Ubuntu 18.04 et 19.04, vous pouvez utiliser le dépôt PPA avec des noyaux expérimentaux linux-mfutex-valve (sudo add-apt-repository ppa:valve-experimental/kernel-bionic; sudo apt-get install linux-mfutex-valve);
Avec un noyau prenant en charge fsync, au lancement de Proton 4.11, le message « fsync : opérationnel » s'affichera dans la console. Vous pouvez désactiver fsync de manière forcée en utilisant le flag PROTON_NO_FSYNC=1.
Source : opennet.ru
