Unternehmen Valve neuen Projektzweig , basierend auf den Entwicklungen des Wine-Projekts und darauf ausgelegt, die Ausführung von unter Windows entwickelten Spielen, die im Steam-Katalog angeboten werden, unter Linux zu ermöglichen. Die Entwicklungen des Projekts unter der BSD-Lizenz. Im Laufe der Zeit werden die in Proton entwickelten Änderungen in das originale Wine und zugehörige Projekte wie DXVK und vkd3d übernommen.
Proton ermöglicht es, Spieleanwendungen, die ausschließlich für Windows bereitgestellt werden, direkt im Linux-Client Steam auszuführen. Das Paket enthält eine Implementierung von DirectX 10/11 (basierend auf ) und 12 (basierend auf ), das über die Übersetzung von DirectX-Aufrufen in die Vulkan-API arbeitet, bietet verbesserte Unterstützung für Spiel-Controller und die Möglichkeit, den Vollbildmodus unabhängig von den in den Spielen unterstützten Bildschirmauflösungen zu nutzen. Im Vergleich zur ursprünglichen Wine-Version wurde die Leistung von Mehrkernspielen deutlich verbessert, dank der Anwendung von Patches «» (Eventfd-Synchronisation) oder «futex/fsync».
Haupt :
- Die Synchronisation mit der Codebasis von Wine 4.11 wurde durchgeführt, aus der über 3300 Änderungen übernommen wurden (der letzte Zweig basierte auf Wine 4.2). 154 Patches aus Proton 4.2 wurden upstream übertragen und sind jetzt Teil der Hauptversion von Wine;
- Experimentelle Unterstützung von Synchronisationsprimitive, die auf dem Systemaufruf futex() basiert, wurde hinzugefügt, was die CPU-Belastung im Vergleich zu esync reduziert. Darüber hinaus löst die neue Implementierung Probleme mit der Notwendigkeit, für esync und mögliche Erschöpfung verfügbarer Dateideskriptoren.
Der Kern der durchgeführten Arbeiten besteht darin, die Funktionalität des Standard-Systemaufrufs futex() im Linux-Kernel mit den für eine optimale Synchronisation von Thread-Pools notwendigen Fähigkeiten zu erweitern. Patches mit der benötigten Unterstützung für Proton und dem FLAG FUTEX_WAIT_MULTIPLE sind bereits für die Aufnahme in die Hauptversion des Linux-Kernels und . Die vorbereiteten Änderungen sind derzeit nicht im Hauptkern enthalten, daher ist momentan ein spezifischer Kernel mit Unterstützung für diese Primitiven erforderlich;
- Schicht (Implementierung von DXGI, Direct3D 10 und Direct3D 11 über die Vulkan-API) wurde auf die Version , und (experimentelle Implementierung von Direct3D 9 über Vulkan) auf Version 0.13f aktualisiert. Um die Unterstützung für D9VK in Proton zu aktivieren, sollte das Flag PROTON_USE_D9VK verwendet werden;
- Die aktuelle Aktualisierungsrate des Monitors wird den Spielen übertragen;
- Es wurden Korrekturen bezüglich der Behandlung des Mausfokus und des Fenster-Managements vorgenommen;
- Eingabeverzögerungen und Probleme mit der Vibrationsunterstützung für Gamepads, die in einigen Spielen insbesondere in Unity-basierten Spielen auftreten, wurden behoben;
- Unterstützung für die neueste Version des OpenVR SDK hinzugefügt;
- Die FAudio-Komponenten mit der Implementierung der DirectX-Soundbibliotheken (API XAudio2, X3DAudio, XAPO und XACT3) wurden auf die Version 19.07 aktualisiert;
- Probleme mit dem NetzwerkSubsystem in Spielen auf GameMaker wurden behoben;
- Viele Wine-Module werden jetzt als Windows PE-Dateien erstellt, anstelle von Linux-Bibliotheken. Mit fortschreitenden Entwicklungen in diesem Bereich wird die Verwendung von PE einigen DRM-Systemen und Anti-Cheat-Programmen helfen. Bei der Verwendung von benutzerdefinierten Proton-Bauten wird wahrscheinlich die Rekonstruktion der Vagrant-VM erforderlich sein, um PE-Dateien zu erstellen.
Um die von Valve bereitgestellten Patches zur Verwendung von futex() anstelle von esync in den Hauptkern von Linux aufzunehmen, ist es notwendig, einen speziellen Kernel zu installieren, der den Pool der Thread-Synchronisierung unterstützt, der in einem Patch-Set implementiert ist. . Für Arch Linux gibt es bereits ein fertiges Kernel-Paket, das mit den fsync-Patches kompiliert wurde. In Ubuntu 18.04 und 19.04 kann das PPA-Repository mit experimentellen Kerneln linux-mfutex-valve verwendet werden (sudo add-apt-repository ppa:valve-experimental/kernel-bionic; sudo apt-get install linux-mfutex-valve);
Wenn ein Kernel mit fsync-Unterstützung verwendet wird, zeigt die Konsole beim Start von Proton 4.11 die Meldung "fsync: up and running" an. fsync kann zwangsweise mit dem Flag PROTON_NO_FSYNC=1 deaktiviert werden.
Quelle: opennet.ru
