Experimenting with the Proton compatibility tool for Steam Play based on Wine and additional components for use with running Nintendo Switch games better on suyu and, as well as to test implementing in suyuOS more generally so it can become the ultimate gaming OS.
Find a file
2018-05-25 11:24:12 -05:00
dxvk@d1d829c09b update dxvk to include VR support 2018-05-23 12:51:39 -05:00
dxvk.win32 update dxvk to include VR support 2018-05-23 12:51:39 -05:00
dxvk.win64 update dxvk to include VR support 2018-05-23 12:51:39 -05:00
freetype2@67a42aa887 Add freetype2 submodule at version 2.9 2018-03-02 11:12:04 -06:00
glslang Add glslang binary 2018-02-12 08:08:53 -06:00
libjpeg-turbo@bf6c774305 Add libjpeg-turbo submodule at version 1.5.3 2018-03-02 11:12:04 -06:00
libpng@b78804f9a2 Add libpng submodule at version 1.6.34 2018-03-02 11:12:04 -06:00
lsteamclient Update license information 2018-03-30 10:40:09 -05:00
MoltenVK@fff5ec9adf Update MoltenVK to 1.0.9 2018-05-23 13:56:38 -05:00
openal-soft@ce6076091b Add openal-soft submodule at version 1.18.2 2018-03-08 12:52:57 -06:00
SDL-mirror@14531cf0fc Add SDL-mirror submodule at version 2.0.7 2018-03-02 11:12:04 -06:00
vrclient_x64 vrclient: Don't build DXVK support on 32-bit Mac 2018-05-23 14:34:53 -05:00
wine@8f4d2b9ac7 update wine 2018-05-23 12:51:39 -05:00
.gitignore Build wine 2018-01-18 10:20:43 -06:00
.gitmodules update dxvk to include VR support 2018-05-23 12:51:39 -05:00
build_dxvk.sh dxvk: Give up building on debian 2018-02-23 10:57:38 -06:00
build_proton.sh build_proton: Build default prefix against the Steam runtime 2018-05-23 15:07:36 -05:00
dist.LICENSE.lin Update dist license for new Proton terms 2018-05-01 09:38:29 -05:00
dist.LICENSE.osx Update dist license for new Proton terms 2018-05-01 09:38:29 -05:00
filelock.py proton: Lock on write access to the dist/ directory 2018-03-16 11:37:27 -05:00
LICENSE Update license info 2018-04-19 12:52:55 -05:00
LICENSE.proton Update LICENSE.proton 2018-05-01 09:30:59 -05:00
proton proton: Fix checking environment overrides 2018-05-25 11:24:12 -05:00
README.md build_proton: Build default prefix against the Steam runtime 2018-05-23 15:07:36 -05:00
toolmanifest.vdf toolmanifest: Fix syntax 2018-03-12 08:53:55 -05:00

Introduction
Introduction

Proton is a tool for use with the Steam client which allows games which are exclusive to Windows to run on Linux and macOS operating systems. It uses Wine to facilitate this.

Most users will prefer to use Proton provided by the Steam client itself. The source code is provided to enable advanced users the ability to alter Proton. For example, some users may wish to use a different version of Wine with a particular title.

NOTE: If you are not comfortable in a command line terminal, or if you find any of the information presented in here strange and uncomfortable, then this is probably not for you. The instructions are likely to be incomplete and require some knowledge and skill on your part, and there is no warranty or guarantee that anyone will help you with this process.

We strongly recommend that most users use the production build of Proton.


Obtaining Proton

The most current source for Proton is here: https://github.com/ValveSoftware/Proton

Which you can clone to your system with this command:

   git clone https://github.com/ValveSoftware/Proton.git proton

After cloning the Proton git repository, the next step will be to obtain the various submodules that go into building Proton:

    cd proton
    #for linux:
    git submodule update --init wine dxvk
    #for macos:
    git submodule update --init

If you wish to change any subcomponent, now is the time to do so. For example, if you wish make changes to Wine, you would apply those changes to the wine/ directory.


Building for Linux

To build Proton for Linux, set up a Debian machine with the Steam chroots as documented in the Steam Runtime repository:

https://github.com/ValveSoftware/steam-runtime

In addition, you will need to install gcc-5 and a long list of dependencies required for Wine. The following set of commands is an example session, and may not be complete.

    cd ~
    git clone https://github.com/ValveSoftware/steam-runtime.git
    cd steam-runtime
    #install the 32-bit scout_beta runtime:
    ./setup_chroot.sh --beta --i386
    #enter the 32-bit runtime:
    schroot --chroot steamrt_scout_beta_i386

This will enter the chroot environment, where you would issue the following commands:

    sudo apt-get install gcc-5 g++-5 g++-5-multilib flex bison libosmesa6-dev libpcap-dev libhal-dev libsane-dev libv4l-dev libgphoto2-2-dev libcapi20-dev libgsm1-dev libmpg123-dev libvulkan-dev libxslt1-dev
    sudo update-alternatives --install `which gcc` gcc `which gcc-5` 50
    sudo update-alternatives --set gcc `which gcc-5`
    sudo update-alternatives --install `which g++` g++ `which g++-5` 50
    sudo update-alternatives --set g++ `which g++-5`
    sudo update-alternatives --install `which cpp` cpp-bin `which cpp-5` 50
    sudo update-alternatives --set cpp-bin `which cpp-5`
    exit

Next, you need to repeat the process, but for amd64:

    ./setup_chroot.sh --beta --amd64
    schroot --chroot steamrt_scout_beta_amd64

And then repeat all of the commands to install gcc and Wine dependencies again.

In addition, your host system will need to be able to run Wine in both 64- and 32-bit modes in order to create the default prefix. It is recommended to install Wine from your package manager, including its optional dependencies. You will also need the Steam runtime located at $HOME/steam-runtime.

Finally, change your directory back to proton, and run:

    cd ../proton
    ./build_proton.sh

That should configure and build Wine, and then package the result up into dist/. It is important to examine the output near the end of build/wine.win{64,32}/config.log to ensure that you have all of the relevant libraries in each chroot. Search for 'executing Makefile commands' in config.log to find messages about missing libraries. It is normal to be missing a few libraries, including OpenCL, OSS, and libav.

NOTE: For now, dxvk requires build-time components that are too new for Debian 9. It's recommended to build the DLLs on Arch Linux, where dxvk is actively being developed. This may be resolved in dxvk in the future, or may be worked around by using a newer Debian release. See comments in build_proton.sh.


Building for macOS

To build Proton for macOS, install the latest Xcode command line tools, as well as cmake (for openal-soft) and a recent nasm (for libjpeg-turbo). You can use a packager like Homebrew to find these packages. Then run:

    ./build_proton.sh

TODO - Surely there are other dependencies we have not listed there.

It is important to examine the output near the end of build/wine.win{64,32}/config.log to ensure that you have all of the relevant libraries required to build Wine properly.


Deploying

Once built, the dist/ directory will contain the files which can be distributed through Steam. For testing purposes, you should be able to clear out the files in your steamapps/common/Proton directory and replace them with the contents of dist/. The proton script will unpack the files on first run. Note that if you use the Steam client to verify local files, it will restore the production version of Proton.

Each component of this software is used under the terms of their licenses. See the LICENSE files here, as well as the LICENSE, COPYING, etc files in each submodule and directory for details.


Runtime Config Options

Proton can be tuned at runtime to help certain games run. The Steam client sets some options for known games using the STEAM_COMPAT_CONFIG variable. You can override these options using the environment variables described below. To enable an option, set the variable to a non-0 value. To disable an option, set the variable to 0.

All of the below are runtime options. They do not effect permanent changes to the Wine prefix. Removing the option will revert to the previous behavior.

Compat config string Environment Variable Description
wined3d11 PROTON_USE_WINED3D11 Use OpenGL-based wined3d instead of Vulkan-based DXVK for d3d11.
nod3d11 PROTON_NO_D3D11 Disable d3d11.dll, for games which can fall back to and run better with d3d9.