Releases: GloriousEggroll/proton-ge-custom
GE-Proton11-1 Released
The long awaited video rework and Proton 11 rebase is finally done! GE-Proton11-1 is now available!
Proton updates:
- d7vk added (not enabled by default). Use PROTON_USE_D7VK=1 to enable. It is enabled via protonfix on Tex Murphy: Overseer
- discord bridge added. (not enabled by default). Use PROTON_DISCORD_BRIDGE=1 to enable. (proton-cachyos)
- optiscaler support added. (not enabled by default). Use PROTON_USE_OPTISCALER=1 to enable' (proton-cachyos)
- winealsa channel count override option added. (not enabled by default). Use WINEALSA_CHANNELS to tune. Possible values is the number of speakers, such as
2(to disable spatial audio), such as4(2 front, 2 rear),6(5.1) or8(7.1). (Vyrolian) - winealsa spacial downmix override option added. (not enabled by default). Use WINEALSA_SPACIAL=1 to enable. (Vyrolian)
- xrandr added to build so that auto-detection of default monitor can work without relying on host xrandr when a default monitor is not set for wine-wayland. This means if you accidentally forget to set a monitor for wine-wayland it should display on the default one found by xrandr now instead of just defaulting to the far left.
- updated star citizen patches
- added patches for Task Bar Hero (thaylorz)
- added patches for VRChat webcam face tracking (LilFishyChan)
- Entire build rebased onto latest proton 11 bleeding-edge
- Standalone patches for VR rebased onto proton 11 (so you can use with umu outside of steam on non-steam VR games)
- wine-native rsx3d library created to for older games (games like Tex Murphy no longer need 3rd party rsx3d winetricks)
- Enable .exe dynamic relocation and only relocate files which have relocations. For XIV specifically, this fixes issues with low address space being filled up by everyone and everything and, as a result, some plugins failing to apply their hooks and leaving the game in an unstable state. (0x0ade)
--The video playback rework--
Q. What was the problem?
A. Originally, proton uses two methods for video playback with two different backends. The first is typically winedmo->ffmpeg. The second is typically quartz->gstreamer. For most games, especially older games, the quartz->gstreamer path was the default. winedmo was introduced recently (as of either proton 9 or 10, I don't remember which) as a modern approach to fixing video playback. The problem is the inner workings of the quartz->gstreamer path were complicated, to convert, thus two paths were used.
Seeing as both ffmpeg and gstreamer effectively do the same thing and can handle the same codecs -- it does not make sense to use both, especially when gstreamer is split into several different libraries that need to be built independently (gst-base, gst-good, gst-bad, gst-ugly, gst-orc, gst-libav, etc), and gstreamer also has surface display problems such as X11 vs Wayland vs Surfaceless.
Q. How did I "fix" it?
A. As many of you know, the last GE-Proton release was in March. It is now June. That is a 4 month gap, which is most definitely not the norm for GE Releases. Why is that? It's because I spent the last 4 months converting the quartz->gstreamer path to instead use quartz->winedmo->ffmpeg, and completely gutted all gstreamer libraries from the proton build.
Yes, I used AI for this work. No, it likely unfortunately will not be able to be upstreamed because CodeWeavers policy does not accept AI generated code. You might be asking "how the hell did you use AI for this?" -- the same way I would without it, the only difference is AI was used to compare code logic when things were failing or incorrect. So how does that work?
First, I did a base rework. I completely removed winegstreamer from wine, and had the AI agent look at the current code and convert what it could so that quartz used winedmo instead.
Next, about 80% of the games in the video rework list used the quartz path and relied on protonfixes with winedll overrides for quartz, lavfilters, amstream, dshow, wmp9, wmp11, and so on. This was GREAT because it meant I was able to get winedebug logs with valid, working instances. Once I gathered those logs for each game, I them removed the protonfixes, created a clean prefix, then ran and logged the broken instance. After that I fed a working log and a broken log into the AI agent for comparison to see what WINE was doing when the overrides were in place and working, versus when it was broken natively. I found that in pretty much every instance the agent was quickly able to identify the difference and either correct or implement the missing native code needed to make the videos work as if the overrides were in place, given a small amount of trial and failure retries. Additionally if the game provided the video files I would point the AI agent to those files so that it could properly analyze what kind of files they were in order to implement into wine the ability to play them. There were very very few games that needed fixing "from scratch" and needed a lot more trials and failures before getting a successful fix -- examples being Darksiders Warmastered Edition and Nukitashi 2. I also in the process managed to get rid of a few game-specific hacks that were used and implement solutions that did not break other games -- such as audio fixes that were previously in place for The Medium and Metal Gear Solid V. You will also see a lot of VN (Visual Novel) games have been fixed, as many of those games use the same few engines and fixing one or two fixed the rest of the games that used the same engine. In fact, we even found a bug with steam runtime 4 missing some required libraries for 32 bit video playback that we were able to report upstream to get fixed (you will see liblzma and xz added to the build for this reason).
Here is a detailed breakdown of old quartz behavior versus new:
• Current Quartz Flow
For a game using quartz / DirectShow now:
-
Game calls IGraphBuilder::RenderFile() or manually builds a graph.
-
quartz/filesource.c identifies the media:
- Extension/registry if available.
- ASF header sniffing for extensionless ASF files, e.g. Persona 4 Arena Ultimax.
-
For ASF files, RenderFile() now tries:
- AsyncReader first.
- Falls back to WMAsfReader if async rendering fails.
-
FilterGraph2_Render() autoplugs the graph.
-
Before generic filtermapper enumeration, Quartz now explicitly tries known-good paths:
- MPEG stream -> MPEG-I Stream Splitter
- MPEG video -> Wine MPEG video decoder
- AC3 audio -> winedmo AC3 decoder
- WMA audio -> DMOWrapperFilter around winedmo WMA decoder
-
If none of those apply, it falls back to normal IFilterMapper2_EnumMatchingFilters().
-
Decoding is now mostly routed through winedmo, backed by FFmpeg, instead of winegstreamer.
-
Audio renderer now rejects compressed audio and only accepts PCM / float PCM, forcing the graph to insert a decoder first.
-
DirectSound buffer creation is delayed until stream start instead of happening at connect/filter creation time.
-
Video output still lands in the normal Quartz video renderer path: DDraw / VMR-style surfaces depending on what the graph builds.
Previously
Before the rework, Quartz relied much more on the stock Wine DirectShow path:
- Source filter selection was mostly extension/registry driven.
- ASF files generally went straight to WMAsfReader.
- Filter insertion relied more heavily on generic filtermapper enumeration.
- Some compressed audio could incorrectly reach DSoundRender, causing failed buffer creation or partial render failures.
- A lot of media handling still depended on winegstreamer / GStreamer behavior.
- Game-specific workarounds and external overrides were needed more often: lavfilters, quartz, wmp11, dgvoodoo2, etc.
Practical Difference
The new flow is more deterministic:
Game -> Quartz RenderFile
-> source detection / ASF sniffing
-> AsyncReader or WMAsfReader
-> explicit known decoder/splitter choices
-> winedmo/FFmpeg decode
-> PCM audio to DSoundRender
-> decoded video to Quartz video renderer
Previously it was closer to:
Game -> Quartz RenderFile
-> registry-selected source
-> generic filtermapper search
-> Wine/GStreamer/native override behavior
-> renderer
So the current design tries to keep legacy DirectShow games inside Wine’s own Quartz graph while using winedmo/FFmpeg for the media formats that Wine’s older Quartz
path handled poorly.
Q. Are there currently any known issues?
A. Some older WMV videos can occasionally start playback distorted/pixelated, but they will correct themselves after a few seconds. This is most noticeable in the skill videos in Ghosts N' Goblins Resurrection. WRC 4 Also has some intro logo videos that have a weird frame-splitting issue. Apart from that most games should work, especially if they are in the Verified working test list below:
Godfall
Akiba's Trip: Undead & Undressed
Nukitashi
Nukitashi 2
Ys Origin
Darksiders Warmastered Edition
Breath of Fire IV
Watch Dogs
Dark Souls: Prepare to Die Edition
Silent Hill 3
Full Metal Daemon Muramasa
Bloodstained: Ritual of the Night
Blops 3
Final Fantasy XIV
RE 0
RE1 Remaster
RE2 Remake
RE3 Remake
RE4 Remake
RE4
RE7
RE8
Nioh 2
Nioh 3
Ninja Gaiden Sigma
Ultimate Marvel Vs. Capcom 3
Ghosts 'n Goblins Resurrection
Halo Infinite
soul calibur vi
age of empires II: Definitive edition
age of empires III
age of empires IV: Anniversary Edition
The Great Ace Attorney Chronicles
Memento Mori
Devil May Cry HD Remaster
Mortal Kombat 11
Injustice
Injustice 2
Endless Space 2
oddworld: munch's oddysee
Oddworld: Abe's Oddysee
Fable - The Lost Chapters
tokyo xanadu ex+
Ghostwire tokyo
Tokyo Necro
Order of Battle: World War II
Not For Broadcast
Blue Protocol: Star Resonance
Ryse: Son of Rome
...
GE-Proton10-34 Released
Proton:
- update latest wine bleeding-edge
- update latest dxvk
- update latest dxvk-nvapi
- update latest vkd3d-proton
- update latest vkd3d
- update latest FEX
- import proton script game fixes from upstream
- import aarch64 build changes from upstream
Protonfixes:
- added protonfix for god of war ragnarok playstation sdk error
- added protonfix to disable hidraw and enable sdl for gta v
- added protonfix for GOG version of Oddworld: Stranger's Wrath HD
- added protonfix for cpu topology for Assassin's Creed 1
Patches:
- patches: Enable .exe dynamic relocation. For XIV specifically, this fixes issues with low address space being filled up by everyone and everything and, as a result, some plugins failing to apply their hooks and leaving the game in an unstable state.
New Features:
-
add new PROTON_WAYLAND_MONITOR to allow easier setting of WAYLANDDRV_PRIMARY_MONITOR
-
attempt to detect and set primary monitor if wayland is enabled and no primary is set
How these work:
You can now specify something like PROTON_WAYLAND_MONITOR=HDMI-A-1 to specify which monitor the wine-wayland driver uses when enabling wayland. Previously you could already do this using WAYLANDDRV_PRIMARY_MONITOR, but it wasn't documented. PROTON_WAYLAND_MONITOR is now an easier to remember envvar for setting that value. Additionally by default if no WAYLANDDRV_PRIMARY_MONITOR is set when enabling wine-wayland, GE-Proton will now attempt to use xrandr to detect the default primary monitor set by the desktop environment, and if found, display on that monitor, just like xwayland does.
GE-Proton10-33 Released
Proton:
- wine bleeding-edge updated
- dxvk updated
- vkd3d-proton updated
- vkd3d updated
- dxvk-nvapi updated
- fex updated
- pulled in upstream misc proton script fixes
- pulled in upstream steam_helper fixes
Patches:
- NEW: Added new wineopenvr patches to allow VR to work outside of steam for non-steam games (examples such as GOG version of ProjectWingman, Overload, Star Citizen). Compatibility tested using Meta Quest 3 with WiVRn. To use, setup WiVRn, then launch games with the additional environment variables WiVRn instructs. Tested flatpak system and user modes as well as standalone package install.
- NEW: Rebased em10/wine-wayland patches, should have some new dead-key fixes.
- Patch added to fix Star Citizen EAC warning popup
- More winepulse patches from Vyrolian
- NEW: Added new umu.exe that works the same way steam.exe does -- this is used now instead of the standard wine start.exe, it should help some 3rd party launchers work better by making them run the same way steam runs them.
Protonfixes:
- add vcrun2022 to fix star citizen 3221225477 code error
- upscalers: add version 4.0.3 of amdxcffx64.dll
- upscalers: add v4.1.0 amdxcffx64.dll
- fix: Assetto Corsa CM missing dotnet 4.8 prompts
- utilities: keep DXVK_FRAME_RATE and VKD3D_FRAME_RATE in the proton environment
- upscalers: add url check and automatic fallback for amdxcffx64.dll
- Do not show the zenity dialog when running the winetricks gui
- Add demo save import for Planet Crafter
- fix: add early stage fixes to run when the module is imported
- utils: do not try to access g_session when in {del,set}_environment if it's not instantiated
- gamefix: set gamedrive early for Duet Night Abyss
- gamefixes: set game drive for Zenless Zone Zero early
GE-Proton10-32 Released
HOTFIX:
- Forgot to update protonfix to enable gstreamer for Akiba's Trip (Undead & Undressed) -- fixed now so voice and background music actually work (as well as video playback and menu sounds which worked in the previous fix). As mentioned in 10-31 game should be fully functional now.
GE-Proton10-31 Released
HOTFIX:
- reverted/disabled winewayland systray icon patch introduced in 10-30 (it caused a lot of breakage in multiple games, as well as breaking in gamescope session on steam deck. no bueno.)
- fixed video playback regression introduced in 10-29 (fixes video playback in Nioh 3 and a few other games)
- fixed Warhammer 40k Darktide crashing on opening (issue introduced in 10-29)
Fixes:
- fixed Arknights Endfield anti-cheat triggering if wayland wasn't enabled
- fixed Duet Night Abyss launch crash & login window not showing on new install
- fixed Akiba's trip cutscenes + audio + voice audio (game fully works now)
- fixed Warhammer 40k Vermintide 2 EAC failing file validation when running the game from the launcher (holy butts 6+ year old bug)
- added protonfix for Warhammer 40k Darktide to skip the launcher -- this prevents a bug where sometimes the game would launch as an audio-only background process when run from the launcher.
GE-Proton10-30 Released
- add upstream patches for Arknights Endfield
- add pending upstream patch to allow proper placement of systray icons when winewayland is enabled
- import upstream changes to fix EA games
- updated em10/wine-wayland patches
- add changes to allow compiling on aarch64 (yes, proton-ge works on aarch64/ARM! -- still very WIP, YMMV)
Notes regarding aarch64(ARM):
- currently needs unreleased version of umu-launcher in order to use, as currently there is no aarch64 version of steam client. the umu-launcher changes will be pushed soon.
- 32 bit games are hit or miss from my limited testing
- gog installers need X87ReducedPrecision changed to 0 in Config.json for FEX (inside the Proton version's folder) to allow them to run
- must stress/reiterate YMMV -- your mileage may vary. The upstream work with proton/fex is NOT something we are involved in. If it works then great, if it doesn't -- don't ask us. It's WIP on Valve's side.
GE-Proton10-29 Released
Proton:
- wine updated to latest bleeding edge
- dxvk updated to latest git
- dxvk-nvapi updated to latest git
- vkd3d updated to latest git
- vkd3d-proton updated to latest git
- FEX updated to upstream version
- vrclient upstream changes imported
- wineopenxr upstream changes imported
- make + Makefile upstream changes imported
- zst build result removed as it is no longer used/needed (originally built for umu)
Protonfixes:
- build fixed to allow aarch64 compilation
- controller fix for ds4 in bioshock 2 remastered/classic
- controller fix for ds4 in dragons dogma: dark arisen
- gamedrive option enabled and libglesv2 disabled under wayland for duet night abyss
- upscalers: add support for upgrading libxess_dx11.dll
- fix added for Dark Earth save game error
- remove incorrect GTA IV fix for Independence FM. Game works fine without it when using supported audio formats. Open-Wine-Components/umu-protonfixes@2a348a2
Patches:
- em-10/wine-wayland patches updated
GE-Proton10-28 Released
proton:
-
import upstream changes to proton
-
update wine bleeding edge
-
update dxvk latest git
-
update vkd3d-proton latest git
-
update vkd3d latest git
-
update dxvk-nvapi latest git
-
rebase em10/wine-wayland patches
-
fixed World of Tanks mods not loading
-
fixed World of Tanks language change causing loading hang/crash
-
fixed Blade & Soul Neo crash
-
Added patch for Winealsa fix for games that only allow spatial audio (thanks Vyroliean):
Problem:
Wine converts spatial and serves it as channel-based stream of 12 channels (in case of GTA and Forza), and then winepulse sends enough metadata for the sound server to apply downmixing. In case of winealsa, it doesn't send the metadata, and in case of stereo, only provides audio to front left and front right skipping FC/LFE/etc. Because of that, the audio is incomplete. As we can't force the correct amount of channels with WINEALSA_CHANNELS variable, I had to code a downmixer.
Patched resolution:
I have implemented the downmixer in the driver itself, and I fully adhered to pipewire downmixer's logic, so the formulas are the same as in pipewire. Pipewire does not downmix top speaker and instead discards them, so this is what I also did in my downmixer. In-game testing shows that the top channels are indeed discarded, because when I tried adding them to winealsa, I could hear more audio coming out compared to winepulse (such as a helicopter above of me).
Because the downmixer made winealsa sound identical to winepulse in these spatial scenarios I even considered even turning it on by default, whether you have WINEALSA_CHANNELS in use or not, and to not block creating a stream with more channels than imposed by the variable. However, more testing had shown that the best way to approach it would likely be to give the user more choice, even if it requires more manual setup.
If we compare sound from downmixed GTA (does not matter winepulse or winealsa, both sound the same, it's related to spatial translation in wine) to Windows, there are noticeable differences. If you were to honk in a car in first person, the audio comes out dominantly out of the left channel on Linux, while it's properly centered on Windows. Because of that, I think it makes more sense to default to channel-based whenever possible so the game can give properly mixed audio, and fall back to downmixing spatial externally if that fails. Though in the case of GTA setting the game flag for disabling spatial results in much worse results than downmixing, I believe it would be the opposite for games that explicitly allow channel-based audio and don't throw errors (like Forza).
This is why I created another variable WINEALSA_SPATIAL, which allows stream creation with more channels than WINEALSA_CHANNELS cap, and then these channels are downmixed.
The behavior of the driver only changes if the variables are active.
Usage:
Put these arguments in steam launch options with %command% at the end, or use your game launcher's method of adding new env vars:
WINEDLLOVERRIDES="winepulse.drv=d" WINEALSA_CHANNELS=2
For Stereo: Use 2
For 5.1 Surround: Use 6
For 7.1 Surround: Use 8
UPDATE: since version 10-28, if you get a spatial audio initialization error, you can add the third variable:
WINEALSA_SPATIAL=1
Latency can be controlled with a combination of editing quant in pipewire-pulse (it still uses pipewire-pulse because it loads as a pulseaudio alsa plug-in) and using PULSE_LATENCY_MSEC variable. You can check if winealsa and selected quant works in pw-top, it shows as ALSA plug-in [wine64-preloader].
Reddit post for more details:
https://www.reddit.com/r/linux_gaming/comments/1pt63sb/psa_geproton_1027_added_winealsa_channels_env/
protonfixes:
- added fixes for ghostwire tokyo video playback + egs version
- added fixes for Duet Night Abyss egs version (game anticheat still seems problematic)
- added fixes for Duet Night Abyss steam version (game anticheat still seems problematic)
- added fixes for Duet Night Abyss standalone version (game anticheat still seems problematic)
- added fixes for broken textures in Legendary
- added fixes for Fallen Enchantress: Legendary Heroes
- added fixes for Sorcerer King
- added fixes for PAIcom
- removed disabling of uplay overlay on previous existing protonfixes (it works now)
GE-Proton10-27 Released
- wine updated to latest bleeding-edge
- dxvk updated to latest git
- dxvk-nvapi updated to latest git
- vkd3d-proton updated to latest git
- vkd3d updated to latest git
- winewayland/em-10 patches updated + rebased
- wine staging patches rebased
- a status window has been added which now shows when protonfixes are being applied
- a protonfix has been added that allows heroes of newerth reborn to work again using GAMEID=umu-heroesofnewerthreborn
- starcitizen protonfixes updated
- Update fix for Angelic Chaos: RE-BOOT!
- added protonfix for rocket league in-game voice
- added protonfix for sword of the stars
- added eac workaround so the first descendant no longer requires disconnecting network
- added winetricks patch so xalia temporarily disables while dotnet installers are running, preventing popup spam
- updated protonfix for space engineers
- updated protonfix for Full Metal Daemon Muramasa
- added protonfix for escape from tarkov (game still does not allow online play)
- added NOSTEAM=1 capability for escape from tarkov so users who own the steam version can also use it for the non-steam version.
Known issue: Blade & Soul NEO no longer launches (it's also broken in upstream proton-experimental)
GE-Proton10-26 Released
Github workflows:
- fixup automatic building and attachment of GE-Proton release tarballs.
Proton:
- changes imported for upstream proton
- changes imported for upstream build environment
- changes imported for upstream lsteamclient
- changes imported for upstream steamvr
- FEX now builds as part of proton as per upstream changes
- wine-wayland/em-10 patches rebased
- wine-staging patches rebased
- SDL dummy controller will no longer be active when steam input is inactive (such as when wine-wayland is enabled, in which case steam input doesn't work)
- ffxvi (16) crash with wayland enabled fixed
- DLSS Scaling now available
- add PROTON_DLSS_INDICATOR to enable DLSS hud
- add PROTON_FSR4_INDICATOR to show FSR4 watermark
- docs: Update Readme for scaling _UPGRADE variables:
fsr4 PROTON_FSR4_UPGRADE Automatically download amdxcffx64.dll and upgrade games with FSR 3.1 to use FSR 4. Version to download can be specified by supplying it as a value, like so PROTON_FSR4_UPGRADE="4.0.1", instead of 1. Downloads version 4.0.2 of the required DLL by default. This option also disables AMD Anti-Lag 2 currently due to various issues.
fsr4hud PROTON_FSR4_INDICATOR Enable the FSR4 watermark at the top left portion of the screen.
fsr4rdna3 PROTON_FSR4_RDNA3_UPGRADE Identical to PROTON_FSR4_UPGRADE but for RDNA3 GPUs. Enables some required compatibility options and downloads version 4.0.0 of the DLL by default.
fsr3 PROTON_FSR3_UPGRADE
dlss PROTON_DLSS_UPGRADE Automatically download and use newer versions of nvngx_dlss(d|g).dll DLLs. Version to download can be specified by supplying it as a value, like so PROTON_DLSS_UPGRADE="310.2", instead of 1, to download version 310.2.1.0. This option also sets DXVK_NVAPI_DRS_SETTINGS to use the latest preset. If you provide your own config for it through this environment variable, your configuration is going to be applied..
dlsshud PROTON_DLSS_INDICATOR Enable the DLSS overlay at the bottom left portion of the screen. This is exactly the same as FSR4_WATERMARK=1
xess PROTON_XESS_UPGRADE
Protonfixes:
- yet another fix for space engineers
- fix for the outer worlds 2
- ntsync disabled for SOMA
- upscaler download handler utility added
- Check if a directory is readable before attempting to map it.
- fix for Zeit 2 added
- fixes added for Death end re;Quest series from GOG
- Add fix for "They Are Billions" crash when using Russian localization
- Add fix for "Not For Broadcast" and "Not For Broadcast: Prologue"
- Fix CEF issues in Duet Night Abyss