/proton-ge-custom

Compatibility tool for Steam Play based on Wine and additional components

Primary LanguageC++OtherNOASSERTION

proton-ge-custom

(1) RUNNING NON-STEAM GAMES WITH PROTON OUTSIDE OF STEAM IS NOT SUPPORTED. DO NOT ASK FOR HELP WITH THIS:

Proton runs in a container, which uses a runtime environment and libraries specifically built for use within that container. Not running it as intended results in the container and therefore its runtime not being used, and severely breaks library compatibility.

It causes wine to search for libraries on your system instead of those it was built with/intended for within proton.

It may work, if enough libraries match, but it is not correct and not supportable due to library differences across distros.

If you want proton functionality -outside- of proton for non-steam games, I provide Wine-GE for usage with Lutris, found here:

https://github.com/gloriouseggroll/wine-ge-custom

(2) If you have an issue that happens with my proton-GE build, provided FROM this repository, that does -not- happen on Valve's proton, please DO NOT open a bug report on Valve's bug tracker. Instead, contact me on Discord about the issue:

https://discord.gg/6y3BdzC

(3) Please note, this is a custom build of proton, and is -not- affiliated with Valve's proton.

(4) Please also note I do not provide the flatpak of proton-GE, and I do not provide the AUR version of proton-GE. I will not assist with those.

(5) The only version of proton-GE that I provide and will assist with builds of is the one provided within this repository, using the build system documented here.

(6) I cannot validate the accuracy or functionality of other builds that have not been built using the build system included here.

Table of contents

Overview

This is my build of Proton with the most recent bleeding-edge Proton Experimental WINE.

Things it contains that Valve's Proton does not:

  • DXVK patched with Async, which can be toggled with DXVK_ASYNC=1
  • Additional media foundation patches for better video playback support
  • AMD FSR patches added directly to fullscreen hack that can be toggled with WINE_FULLSCREEN_FSR=1
  • FSR Fake resolution patch details here
  • Nvidia CUDA support for PhysX and NVAPI
  • Raw input mouse support
  • 'protonfixes' system -- this is an automated system that applies per-game fixes (such as winetricks, envvars, EAC workarounds, overrides, etc).
  • Various upstream WINE patches backported
  • Various wine-staging patches applied as they become needed

Notes

  • Warframe is problematic with VSync. Turn it off or on in game, do not set to Auto
  • Warframe needs a set a frame limit in game. Unlimited framerate can cause slowdowns
  • Warframe on NVIDIA: you may need to disable GPU Particles in game otherwise the game can freeze randomly. On AMD they work fine

Full patches can be viewed in protonprep-valve-staging.sh.

Installation

PLEASE NOTE: There are prerequisites for using this version of proton:

  1. You must have the proper Vulkan drivers/packages installed on your system. VKD3D on AMD requires Mesa 22.0.0 or higher for the VK_KHR_dynamic_rendering extension. Check here for general driver installation guidance.

Manual

Native

This section is for those that use the native version of Steam.

  1. Download a release from the Releases page.
  2. Create a ~/.steam/root/compatibilitytools.d directory if it does not exist.
  3. Extract the release tarball into ~/.steam/root/compatibilitytools.d/.
    • tar -xf GE-ProtonVERSION.tar.gz -C ~/.steam/root/compatibilitytools.d/
  4. Restart Steam.
  5. Enable proton-ge-custom.

Flatpak

This section is for those that use the Steam flatpak.

Flathub

This unofficial build isn't supported by GloriousEggroll nor Valve and wasn't tested with all possible games and cases. It can behave differently from upstream builds. Use at your own risk.

  1. Add the Flathub repository.
  2. Run:
    flatpak install com.valvesoftware.Steam.CompatibilityTool.Proton-GE
  3. Enable proton-ge-custom.
Manual
  1. Download a release from the Releases page.
  2. Create a ~/.var/app/com.valvesoftware.Steam/data/Steam/compatibilitytools.d/ directory if it does not exist.
  3. Extract the release tarball into ~/.var/app/com.valvesoftware.Steam/data/Steam/compatibilitytools.d/.
    • tar -xf GE-ProtonVERSION.tar.gz -C ~/.var/app/com.valvesoftware.Steam/data/Steam/compatibilitytools.d/
  4. Restart Steam.
  5. Enable proton-ge-custom.

Building

  1. Clone this repo by executing:
git clone --recurse-submodules http://github.com/gloriouseggroll/proton-ge-custom
  1. Drop any custom patches into patches/, then open patches/protonprep-valve-staging.sh and add a patch line for them under #WINE CUSTOM PATCHES in the same way the others are done.

  2. Apply all of the patches in patches/ by running:

./patches/protonprep-valve-staging.sh &> patchlog.txt

in the main proton-ge-custom directory. Open patchlog.txt and search for "fail" to make sure no patch failures occured. An easy way to do this is like so:

grep -i fail patchlog.txt
grep -i error patchlog.txt 
  1. Navigate to the parent directory containing the proton-ge-custom folder.

  2. Type the following (note: if using docker instead of podman, change to --container-engine=docker):

mkdir build && cd build
../configure.sh --enable-ccache --build-name=SOME-BUILD-NAME-HERE --container-engine=podman
make redist &> log

Build will be placed within the build directory as SOME-BUILD-NAME-HERE.tar.gz.

Enabling

  1. Right click any game in Steam and click Properties.
  2. At the bottom of the Compatibility tab, Check Force the use of a specific Steam Play compatibility tool, then select the desired Proton version.
  3. Launch the game.

Modification

Environment variable options:

Compat config string Environment Variable Description
PROTON_LOG Convenience method for dumping a useful debug log to $HOME/steam-$APPID.log. For more thorough logging, use user_settings.py.
PROTON_DUMP_DEBUG_COMMANDS When running a game, Proton will write some useful debug scripts for that game into $PROTON_DEBUG_DIR/proton_$USER/.
PROTON_DEBUG_DIR Root directory for the Proton debug scripts, /tmp by default.
wined3d PROTON_USE_WINED3D Use OpenGL-based wined3d instead of Vulkan-based DXVK for d3d11 and d3d10. This used to be called PROTON_USE_WINED3D11, which is now an alias for this same option.
nod3d12 PROTON_NO_D3D12 Disables DX12.
nod3d11 PROTON_NO_D3D11 Disables DX11.
nod3d10 PROTON_NO_D3D10 Disables DX10.
nod3d19 PROTON_NO_D3D9 Disables DX9.
noesync PROTON_NO_ESYNC Do not use eventfd-based in-process synchronization primitives.
nofsync PROTON_NO_FSYNC Do not use futex-based in-process synchronization primitives. (Automatically disabled on systems with no FUTEX_WAIT_MULTIPLE support.)
forcelgadd PROTON_FORCE_LARGE_ADDRESS_AWARE Force Wine to enable the LARGE_ADDRESS_AWARE flag for all executables.
heapdelayfree PROTON_HEAP_DELAY_FREE Delay freeing some memory, to work around application use-after-free bugs.
noxim PROTON_NO_XIM Enabled by default. Do not attempt to use XIM (X Input Methods) support. XIM support is known to cause crashes with libx11 older than version 1.7.
enablenvapi PROTON_ENABLE_NVAPI Enable NVIDIA's NVAPI GPU support library.
noforcelgadd Disable forcelgadd. If both this and forcelgadd are set, enabled wins.
oldglstr PROTON_OLD_GL_STRING Set some driver overrides to limit the length of the GL extension string, for old games that crash on very long extension strings.
cmdlineappend: Append the string after the colon as an argument to the game command. May be specified more than once. Escape commas and backslashes with a backslash.
seccomp PROTON_USE_SECCOMP Enable seccomp-bpf filter to emulate native syscalls, required for some DRM protections to work.
async DXVK_ASYNC Allows Async to be used with DXVK. This can help with stutter in some games, however it is recommended not to be used with games that have sensitive anti-cheats. Use at your own risk.
nowritewatch PROTON_NO_WRITE_WATCH Disable support for memory write watches in ntdll. This is a very dangerous hack and should only be applied if you have verified that the game can operate without write watches. This improves performance for some very specific games (e.g. CoreRT-based games).
WINE_FULLSCREEN_FSR Enable AMD FidelityFX Super Resolution (FSR) 1, use in conjunction with WINE_FULLSCREEN_FSR_STRENGTH. Only works in Vulkan games (DXVK and VKD3D-Proton included). Enabled by default since GE-Proton7-29
WINE_FULLSCREEN_FSR_STRENGTH AMD FidelityFX Super Resolution (FSR) strength, the default sharpening of 5 is enough without needing modification, but can be changed with 0-5 if wanted. 0 is the maximum sharpness, higher values mean less sharpening. 2 is the AMD recommended default and is set by GE-Proton by default.
WINE_FULLSCREEN_FAKE_CURRENT_RES Set fake resolution of the screen. This can be useful in games that render in native resolution regardless of the selected resolution. Parameter WIDTHxHEIGHT
WINE_DO_NOT_CREATE_DXGI_DEVICE_MANAGER Set to 1 to enable. Required for video playback in some games to not be miscolored (usually tinted pink)

Credits

As many of you may or may not already know, there is a Credits section in the README for this Git repository. My proton-ge project contains some of my personal tweaks to Proton, but a large amount of the patches, rebases and fixes come from numerous people's projects. While I tend to get credited for my builds, a lot of the work that goes into it are from other people as well. I'd like to take some time to point a few of these people out of recognition. In future builds, I plan to make clearer and more informative Git commits, as well as attempt to give these people further crediting, as my README may not be sufficient in doing so.

TKG (Etienne Juvigny)

I and many others owe TKG. In regards to both WINE and Proton. He has dedicated a lot of time (2+ years at least) to rebasing WINE and Proton patches, as well as making his own contributions. Before he came along, I did some rebasing work, and mainly only released things for Arch. These days he almost always beats me to rebasing, and it saves myself and others a lot of work.

Guy1524 (Derek Lesho)

Derek was responsible for the original rawinput patches, as well as several various game fixes in the past, just to name a few: MK11, FFXV, MHW, Steep, AC Odyssey FS fix. He has also done a massive amount of work on media foundation/mfplat, which should be hopefully working very soon.

Joshie (Joshua Ashton)

Joshua is the creator of D9VK and also a huge contributor of DXVK. He is also known for his recent DOOM Eternal WINE fixes and also many of the Vulkan tweaks and fixes used, such as FS hack interger scaling.

doitsujin/ドイツ人 (Philip Rebohle)

Philip is the creator of DXVK and a heavy contributor of VKD3D. He also put up a lot of my bug reporting for Warframe years ago, when DXVK started.

HansKristian/themaister (Hans-Kristian Arntzen)

Hans-Kristian is a heavy contributor of VKD3D and he also created a lot of WINE patches that allowed WoW to work.

flibitijibibo (Ethan Lee)

Ethan is the creator of FAudio, and he also listened to my Warframe bug reports years ago.

simmons-public (Chris Simmons)

Chris is the creator of the original Protonfixes project. The portions of Protonfixes I've imported are what allow customizations to be made to prefixes for various Proton games. without Proton fixes many games would still be broken and/or require manual prefix modification. Huge thanks to Chris.

Sporif (Amine Hassane)

Amine is the current maintainer of dxvk-async. This is a feature that was originally removed from dxvk as it happened around the same time a few overwatch bans happened. It was thought, but never confirmed whether or not this feature caused the bans, so the feature was removed as a safety precaution. It is still safe to use in many single player games, and games that do not have competitive anti-cheats. It has also been confirmed to work safely in Warframe and Path of Exile.

wine-staging maintainers

I also of course need to thank my fellow wine-staging maintainers: Alistair Leslie-Hughes, Zebediah Figura and Paul Gofman

They have contributed MANY patches to staging, far beyond what I have done, as well as kept up with regular rebasing. A lot of times when bug reports come to me, if it has to do with staging I end up testing and relaying information to these guys in order to get issues resolved.

Reporters

Additionally, a thank you is owed to Andrew Aeikum (aeikum), and kisak (kisak-valve) for regularly keeping me in the loop with Proton and fsync patches, as well as accepting PRs I've made to fix Proton build system issues, or listening to bug reports on early Proton patches before they reach Proton release.

Patrons

And finally - To all of my patrons that have supported me, thank you so much. It's because of you that I've been able to keep this project going, getting bug fixes reported, getting Proton/WINE issues fixed, getting various hardware and/or game fixes handled, and so on. Thanks to you, I have been able to use the spare budget in order to both help support the other people that make my project possible, as well as get things necessary for testing such as new game releases or specific hardware that hits odd issues. It's had a huge effect not just for this project, but a large trickle down effect.

My wine-staging co-maintainers are often able to ask me for testing games, or testing on different hardware if they don't have access to it. This also trickles into both Proton bug reporting AND Lutris bug reporting, as I'm able to provide bug testing and feedback and custom builds and upgrades to them as well. I'm also able to test driver related issues for things such as mesa and getting things reported + patched. This in turn leads to early patches for Mesa, the kernel, VKD3D, and other packages on my copr repos as well. The trickle down effect is just one gigantic awesome rabbit hole for getting things fixed. Thank you once again.

Donations

For anyone else interested, my Patreon can be found here:

https://www.patreon.com/gloriouseggroll

Tested Games

Name SteamDB Link ProntonDB Link Has Protonfixes Has Media Foundation fixes
Acceleration of SUGURI 2 SteamDB ProtonDB ✔️
Age of Empires: Definitive Edition SteamDB ProtonDB ✔️
Age of Empires II: Definitive Edition SteamDB ProtonDB ✔️
Age of Empires III: Definitive Edition SteamDB ProtonDB ✔️
Age of Mythology: Extended Edition SteamDB ProtonDB ✔️
AirMech Strike SteamDB ProtonDB ✔️
American Fugitive SteamDB ProtonDB ✔️
Apex Legends SteamDB ProtonDB ✔️
Arkania ✔️
Assetto Corsa SteamDB ProtonDB ✔️
Astroneer SteamDB ProtonDB ✔️
Aven Colony SteamDB ProtonDB ✔️
Baldur's Gate 3 SteamDB ProtonDB ✔️
Batman Arkham Asylum SteamDB ProtonDB ✔️
Batman Arkham Knight SteamDB ProtonDB ✔️
Battlefield: Bad Company 2 SteamDB ProtonDB ✔️
BeamNG.drive SteamDB ProtonDB ✔️
Bejeweled 3 SteamDB ProtonDB ✔️
Beyond Good and Evil SteamDB ProtonDB ✔️
BioShock 2 Remastered SteamDB ProtonDB ✔️
BIT.TRIP BEAT SteamDB ProtonDB ✔️
BIT.TRIP RUNNER SteamDB ProtonDB ✔️
BlazBlue Centralfiction SteamDB ProtonDB ✔️
BlazBlue: Chronophantasma Extend SteamDB ProtonDB ✔️
Blood and Bacon SteamDB ProtonDB ✔️
Bloodstained: Ritual of the Night SteamDB ProtonDB ✔️
Borderlands 2 SteamDB ProtonDB ✔️
Borderlands 3 SteamDB ProtonDB ✔️ ✔️
Call of Duty (2003) SteamDB ProtonDB ✔️
Call of Duty: Black Ops III SteamDB ProtonDB ✔️
Catherine Classic SteamDB ProtonDB ✔️
Chantelise - A Tale of Two Sisters SteamDB ProtonDB ✔️
Conan Exiles SteamDB ProtonDB ✔️
Crashday Redline Edition SteamDB ProtonDB ✔️
Crazy Machines 3 SteamDB ProtonDB ✔️
Cryostasis SteamDB ProtonDB ✔️
Crysis SteamDB ProtonDB ✔️
Danganronpa V3: Killing Harmony SteamDB ProtonDB ✔️
Dark Souls: Prepare To Die Edition SteamDB ProtonDB ✔️
Dark Souls: Remastered SteamDB ProtonDB ✔️
DEAD OR ALIVE 5 Last Round: Core Fighters SteamDB ProtonDB ✔️
Destiny 2 SteamDB ProtonDB ✔️
Devil May Cry 5 SteamDB ProtonDB ✔️
Divinity Original Sin 2 - Definitive Edition SteamDB ProtonDB ✔️
Doom (2016) SteamDB ProtonDB ✔️
DRAGON BALL FighterZ SteamDB ProtonDB ✔️
Duck Game SteamDB ProtonDB ✔️
Dungeons & Dragons Online SteamDB ProtonDB ✔️
Dusty Revenge: Co-Op Edition SteamDB ProtonDB ✔️
eFootball PES 2021 SEASON UPDATE SteamDB ProtonDB ✔️
Endless Legend SteamDB ProtonDB ✔️
Evil Genius 2: World Domination SteamDB ProtonDB ✔️
Fall Guys: Ultimate Knockout SteamDB ProtonDB ✔️
Fallout 3 SteamDB ProtonDB ✔️
Fallout 4 SteamDB ProtonDB ✔️
Far Cry 5 SteamDB ProtonDB ✔️
FINAL FANTASY X/X-2 HD Remaster SteamDB ProtonDB ✔️
FINAL FANTASY IX SteamDB ProtonDB ✔️
FINAL FANTASY XIII SteamDB ProtonDB ✔️
FINAL FANTASY XIV Online SteamDB ProtonDB ✔️
Forts SteamDB ProtonDB ✔️
Gears 5 SteamDB ProtonDB ✔️
Gothic 1 SteamDB ProtonDB ✔️
Gothic II: Gold Edition SteamDB ProtonDB ✔️
Gothic 3 SteamDB ProtonDB ✔️
Gothic 3: Forsaken Gods Enhanced Edition SteamDB ProtonDB ✔️
Grim Dawn SteamDB ProtonDB ✔️
GT Legends SteamDB ProtonDB ✔️
GUILTY GEAR XX ACCENT CORE PLUS R SteamDB ProtonDB ✔️
Halo: The Master Chief Collection SteamDB ProtonDB ✔️
Haven SteamDB ProtonDB ✔️
Heavy Rain SteamDB ProtonDB ✔️
HighFleet SteamDB ProtonDB ✔️
IMSCARED SteamDB ProtonDB ✔️
Industries of Titan SteamDB ProtonDB ✔️
Injustice 2 SteamDB ProtonDB ✔️ ✔️
JUMP FORCE SteamDB ProtonDB ✔️
L.A. Noire SteamDB ProtonDB ✔️
LEGO Batman 2: DC Super Heroes SteamDB ProtonDB ✔️
LEGO The Lord of the Rings SteamDB ProtonDB ✔️
Little Nightmares SteamDB ProtonDB ✔️
Lord of the Rings: War in the North SteamDB ProtonDB ✔️
Mafia II Definitive Edition SteamDB ProtonDB ✔️
Marvel's Avengers SteamDB ProtonDB ✔️
Mass Effect Legendary Edition SteamDB ProtonDB ✔️
Metro 2033 SteamDB ProtonDB ✔️
Microsoft Flight Simulator Game of the Year Edition SteamDB ProtonDB ✔️
Monster Hunter Rise SteamDB ProtonDB ✔️
Mortal Kombat 11 SteamDB ProtonDB ✔️ ✔️
Mortal Kombat X SteamDB ProtonDB ✔️
Mutant Year Zero: Road to Eden SteamDB ProtonDB ✔️
NARUTO TO BORUTO: SHINOBI STRIKER SteamDB ProtonDB ✔️
Nier Replicant SteamDB ProtonDB ✔️
Oceanhorn: Monster of Uncharted Seas SteamDB ProtonDB ✔️
Oddworld: Munch's Oddysee SteamDB ProtonDB ✔️
Order of Battle: World War II SteamDB ProtonDB ✔️
Path of Exile SteamDB ProtonDB ✔️
PC Building Simulator SteamDB ProtonDB ✔️
Persona 4 Golden SteamDB ProtonDB ✔️ ✔️
PixARK SteamDB ProtonDB ✔️
Plants vs. Zombies GOTY Edition SteamDB ProtonDB ✔️
Potatoman Seeks the Troof SteamDB ProtonDB ✔️
Power Rangers: Battle for the Grid SteamDB ProtonDB ✔️
Progressbar95 SteamDB ProtonDB ✔️
Putt-Putt: Pep's Birthday Surprise SteamDB ProtonDB ✔️
Recettear: An Item Shop's Tale SteamDB ProtonDB ✔️
Red Dead Redemption 2 SteamDB ProtonDB ✔️
Remnant: From the Ashes SteamDB ProtonDB ✔️
Resident Evil 0 SteamDB ProtonDB ✔️ ✔️
Resident Evil SteamDB ProtonDB ✔️ ✔️
Resident Evil 2 Remastered SteamDB ProtonDB ✔️
Resident Evil 3 Remastered SteamDB ProtonDB ✔️
Resident Evil 5 SteamDB ProtonDB ✔️ ✔️
Resident Evil 6 SteamDB ProtonDB ✔️ ✔️
Resident Evil 7 Biohazard SteamDB ProtonDB ✔️
Resident Evil 8 Village SteamDB ProtonDB ✔️
Resident Evil Revelations SteamDB ProtonDB ✔️ ✔️
Resident Evil Revelations 2 SteamDB ProtonDB ✔️ ✔️
Rise of Nations: Extended Edition SteamDB ProtonDB ✔️
Sacred 2 Gold SteamDB ProtonDB ✔️
Scrap Mechanic SteamDB ProtonDB ✔️
Serious Sam 4 SteamDB ProtonDB ✔️
Serious Sam: The Random Encounter SteamDB ProtonDB ✔️
Seven: Enhanced Edition SteamDB ProtonDB ✔️
Sleeping Dogs: Definitive Edition SteamDB ProtonDB ✔️
Sonic CD SteamDB ProtonDB ✔️
SOULCALIBUR VI SteamDB ProtonDB ✔️ ✔️
Space Engineers SteamDB ProtonDB ✔️
Spyro Reignited Trilogy SteamDB ProtonDB ✔️
STAR WARS Galactic Battlegrounds Saga SteamDB ProtonDB ✔️
Stealth Inc 2: A Game of Clones SteamDB ProtonDB ✔️
Strange Brigade SteamDB ProtonDB ✔️
Super Lucky's Tale SteamDB ProtonDB ✔️
Super Meat Boy SteamDB ProtonDB ✔️
Syberia SteamDB ProtonDB ✔️
Tesla Effect: A Tex Murphy Adventure SteamDB ProtonDB ✔️
The Bureau: XCOM Declassified SteamDB ProtonDB ✔️
The Elder Scrolls Online SteamDB ProtonDB ✔️
The Elder Scrolls V: Skyrim SteamDB ProtonDB ✔️
The Elder Scrolls V: Skyrim Special Edition SteamDB ProtonDB ✔️
The Evil Within SteamDB ProtonDB ✔️
The Lord of the Rings Online SteamDB ProtonDB ✔️
Tokyo Xanadu eX+ SteamDB ProtonDB ✔️
Tomb Raider SteamDB ProtonDB ✔️
Tomb Raider I SteamDB ProtonDB ✔️
Tree of Savior SteamDB ProtonDB ✔️
Ultimate Marvel VS. Capcom 3 SteamDB ProtonDB ✔️
Warframe SteamDB ProtonDB ✔️
Wasteland 3 SteamDB ProtonDB ✔️
Watch_Dogs SteamDB ProtonDB ✔️
Watch_Dogs 2 SteamDB ProtonDB ✔️
WORLD OF HORROR SteamDB ProtonDB ✔️
Yakuza 0 SteamDB ProtonDB ✔️
Yakuza Kiwami SteamDB ProtonDB ✔️
Yesterday Origins SteamDB ProtonDB ✔️
You Need A Budget 4 (YNAB) SteamDB ProtonDB ✔️