Het bedrijf Valve nieuwe tak van het project , gebaseerd op de ontwikkelingen van het Wine-project en gericht op het mogelijk maken van het draaien van game-applicaties op Linux, gemaakt voor Windows en gepresenteerd in de Steam-catalogus. Ontwikkelingen van het project onder de BSD-licentie. Naarmate de originele Wine en gerelateerde projecten, zoals DXVK en vkd3d, gereed zijn, worden de in Proton ontwikkelde wijzigingen overgebracht.
Proton stelt je in staat om gaming-applicaties die alleen voor Windows zijn geleverd, rechtstreeks op de Linux-client van Steam uit te voeren. Het pakket bevat een implementatie van DirectX 10/11 (op basis van ) en 12 (op basis van ), die werken via de vertaling van DirectX-aanroepen naar de Vulkan-API, biedt verbeterde ondersteuning voor game-controllers en de mogelijkheid om fullscreen-modus te gebruiken, ongeacht de ingame schermresoluties. In vergelijking met de originele Wine is de prestaties van multithreaded games aanzienlijk verbeterd door het toepassen van de patches "» (Eventfd Synchronization) of «futex/fsync».
Belangrijkste :
- Synchronisatie met de codebasis van Wine 4.11 is uitgevoerd, waarbij meer dan 3300 wijzigingen zijn overgenomen (de vorige tak was gebaseerd op Wine 4.2). 154 patches van Proton 4.2 zijn upstream overgenomen en zijn nu onderdeel van de belangrijkste versie van Wine;
- Experimentele ondersteuning voor synchronisatieprimitieven op basis van de systeemaanroep futex() is toegevoegd, wat de CPU-belasting kan verminderen in vergelijking met esync. Bovendien lost de nieuwe implementatie problemen op met de noodzaak voor voor esync en mogelijk uitputting van beschikbare bestandsdescriptoren.
De essentie van het uitgevoerde werk is om de functionaliteit van de standaard systeemaanroep futex() in de Linux-kernel uit te breiden met mogelijkheden die nodig zijn voor optimale synchronisatie van een pool van threads. Patches voor de benodigde Proton-ondersteuning van de vlag FUTEX_WAIT_MULTIPLE zijn al voor opname in de belangrijkste kernel van Linux en . De voorbereidde wijzigingen zijn nog niet opgenomen in de belangrijkste kernel, daarom is het momenteel nodig een speciale kernel met ondersteuning voor deze primitieve;
- laag (implementatie van DXGI, Direct3D 10 en Direct3D 11 bovenop de Vulkan API) is bijgewerkt naar versie , met behulp van 1 bit, gelijk aan 0, (experimentele implementatie van Direct3D 9 bovenop Vulkan) naar versie 0.13f. Om ondersteuning voor D9VK in Proton in te schakelen, moet de vlag PROTON_USE_D9VK worden gebruikt;
- Huidige verversingssnelheid van de monitor wordt doorgestuurd naar games;
- Correcties zijn aangebracht met betrekking tot het verwerken van de focus van de muiscursor en het vensterbeheer;
- Invoervertragingen en problemen met het ondersteunen van trillen voor controllers zijn opgelost, die zich in sommige games voordoen, vooral in games die de Unity-engine gebruiken;
- Ondersteuning voor de laatste versie van OpenVR SDK is toegevoegd;
- FAudio-componenten met implementatie van DirectX-geluidsbibliotheken (API XAudio2, X3DAudio, XAPO en XACT3) zijn bijgewerkt naar release 19.07;
- Problemen met het netwerk subsystem in GameMaker-games zijn opgelost;
- Veel Wine-modules worden nu als Windows PE-bestanden gebouwd, in plaats van Linux-bibliotheken. Naarmate het werk in dit gebied vordert, zal het gebruik van PE sommige DRM-systemen en anti-cheatsoftware helpen. Bij het gebruik van handmatig gebouwde Proton-builds is het waarschijnlijk nodig om de Vagrant-virtuele machine opnieuw aan te maken om PE-bestanden te bouwen.
Voordat patches van Valve voor het gebruik van futex() in plaats van esync in de hoofdversie van de Linux-kernel worden opgenomen, moet er een speciale kernel met ondersteuning voor de thread synchronisatie pool, geïmplementeerd in de patchset, worden geïnstalleerd. . Voor Arch Linux is er al een beschikbaar pakket van de kernel, samengesteld met fsync-patches. In Ubuntu 18.04 en 19.04 kan de PPA-repository met experimentele linux-mfutex-valve-kernels worden gebruikt (sudo add-apt-repository ppa:valve-experimental/kernel-bionic; sudo apt-get install linux-mfutex-valve);
Wanneer er een kernel met fsync-ondersteuning is, wordt bij het starten van Proton 4.11 in de console het bericht «fsync: up and running» weergegeven. Fsync kan geforceerd worden uitgeschakeld met de vlag PROTON_NO_FSYNC=1.
Bron: opennet.ru
