Valve releases Proton 4.11, a suite for running Windows games on Linux

Valve Company ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»Π° new project branch Proton 4.11, based on the developments of the Wine project and aimed at ensuring that gaming applications created for Windows and presented in the Steam catalog can be run on Linux. Project achievements extend under the BSD license. As soon as it is ready, the changes developed in Proton are transferred to the original Wine and related projects, such as DXVK and vkd3d.

Proton allows you to directly run Windows-only game applications on the Steam Linux client. The package includes an implementation of DirectX 10/11 (based on DXVK extension) and 12 (based on vkd3d) that work by translating DirectX calls to the Vulkan API provides improved support for game controllers and the ability to use full screen mode regardless of screen resolutions supported in games. Compared to the original Wine, the performance of multi-threaded games has been significantly increased thanks to the application of patches "esync" (Eventfd Synchronization) or "futex/fsync".

All changes in Proton 4.11:

  • Synchronized with the Wine 4.11 code base, from which more than 3300 changes were transferred (the last branch was based on wine 4.2). 154 patches from Proton 4.2 have been moved upstream and are now part of the main Wine package;
  • Added experimental support for synchronization primitives based on the futex() system call, which can reduce CPU overhead compared to esync. In addition, the new implementation solves problems with the need to use special settings for esync and possibly running out of available file descriptors.

    The essence of the ongoing work is to extend the functionality of the regular futex() system call in the Linux kernel with the capabilities necessary for optimal synchronization of the thread pool. Patches with the necessary support for the Proton flag FUTEX_WAIT_MULTIPLE are already transferred for inclusion in the main Linux kernel and glibc. Prepared changes are not yet included in the main composition of the kernel, so at the moment it is necessary establish a special kernel with support for these primitives;

    Valve releases Proton 4.11, a suite for running Windows games on Linux

  • interlayer DXVK extension (implementation of DXGI, Direct3D 10 and Direct3D 11 on top of the Vulkan API) updated to version 1.3, D9VK (experimental implementation of Direct3D 9 on top of Vulkan) to version 0.13f. To enable D9VK support in Proton, use the PROTON_USE_D9VK flag;
  • Provided transfer to games of the current refresh rate of the monitor;
  • Fixed fixes related to mouse focus handling and window management;
  • Fixed input lag and vibration support issues for joysticks in some games, especially games based on the Unity engine.
  • Added support for the latest version of the OpenVR SDK;
  • FAudio components with implementation of DirectX sound libraries (API XAudio2, X3DAudio, XAPO and XACT3) updated to release 19.07;
  • Solved problems with the network subsystem in games on GameMaker;
  • Many Wine modules are now built as Windows PE files instead of Linux libraries. As work progresses in this area, the use of PE will help some DRM and anti-cheat systems. In the case of using custom builds of Proton, you will most likely need to recreate the Vagrant virtual machine in order to build the PE files.

Prior to the adoption of Valve's patches into the main Linux kernel, using futex() instead of esync requires installing a special kernel with support for the thread synchronization pool implemented in the patch set fsync. For Arch Linux in the AUR already published prebuilt kernel package built with fsync patches. On Ubuntu 18.04 and 19.04, you can use the linux-mfutex-valve experimental kernels PPA (sudo add-apt-repository ppa:valve-experimental/kernel-bionic; sudo apt-get install linux-mfutex-valve);

If you have a kernel that supports fsync, when you start Proton 4.11, the message "fsync: up and running" will be displayed in the console. You can forcefully disable fsync using the PROTON_NO_FSYNC=1 flag.

Source: opennet.ru

Add a comment