Programs on X11 (gamescope sessions) never told DroidDeck when a text field took focus: winex11 had no EnableIMEContext. The pending patch writes the focused window's state to agent/wine-ime.json under BL_LAUNCH_DIR, the way winewayland already enables text input. Proven on World of Warcraft: Forever, whose chat box and search field associate an input context on focus and remove it on Esc or Enter.
Pins wine to 1806c211ff on maxjivi05/proton-wine
droiddeck/arm64x-import-thunk-hotpatch, on top of banner-proton/11.12
303894db: winebuild gives the x64 view's import thunks the same
lea rsp,[rsp+0]; jmp [iat] shape as x86_64, so code that inspects export
prologues no longer sees 2993 hook-shaped exports across 34 DLLs.
The fork pin is for the test build only.
User's call (2026-11-03): the GE-Proton11-12 build is tested as 11-12.1 so it sits next to 11-11.11 in Steam, instead of keeping 11-11.11 until the release cut.
GE-Proton11-12 adds patches/protonfixes/0003 (Kingdoms of Amalur:
Re-Reckoning) and bumps protonfixes to 28a02c25, which already has both
files of that patch (gamefixes-steam/1041720.py identical, the umu
symlink the same blob 0d5bfe55). patch skips the existing files and
exits 1; GE's CI ignores that, prep.sh failed the build (run
41667555200, all four groups).
apply_patch now checks first whether the patch reverses cleanly and
skips it with "already in the tree, skipped: ..."; any other failure
still stops the build. Checked locally on protonfixes 28a02c25 (0001 and
0002 apply, 0003 skipped) and on the rest of the prep section after it
(wineopenxr, low_latency_layer, discordrpc, lsteamclient, vrclient: all
apply, none skipped).
Kimchi's FEX 0013 and rpmalloc 0001, taken into the 11-12 build (user's call). Both apply on GE-Proton11-12's FEX 02e24ca5 after 0001-0012 (0013 with -28 line offsets); FEX's rpmalloc pin ed227446 is unchanged.
wine: The412Banner/proton-wine banner-proton/11.12 (303894db), tags
bp-11.12-tier1..7:
- tier 1: Valve bleeding-edge fda79a58 (GE-Proton11-12's pin).
- tier 2: this branch's protonprep wine section (GE-Proton11-12,
unmodified) run on tier 1, one commit per section, 0 failed patches.
- tier 3: the 20 CachyOS commits of 11.11 unchanged, plus winebus.sys
b3795230 and hidclass.sys 447acb9a from the unreleased CachyOS
cachyos_11.0_20261014/dev. setupapi 598410aa is not taken (GE carries
the same author's full implementation, proton-ds5-haptic/0102).
- tiers 4, 6, 7 and the two offscreen-check cache commits: cherry-picked
unchanged (range-diff against 11.11: identical).
- tier 5 (droiddeck-esync): ported to GE's
server-keep-in-process-mutex-closed-while-in-use (GE 6161ec53).
- No wineserver protocol change after tier 4 (WINE_PROTOCOL_BASE moves
there); tools/make_requests gives the committed headers.
patches/wine-hotfixes/pending/ntdll-i386-recover-lost-wake-on-address.patch:
hunk 3 rebased onto GE's newer stale-alert fix (960acd0a); the other six
deferred Wine patches apply unchanged, and all twelve FEX patches apply
on FEX-2610-116.
PINS, .gitmodules and README follow. VERSION stays 11-11.11 until the
release is cut.
GE-Proton11-12 now carries the three GE master commits 11-11.1 took early,
so our copies go:
- patches/protonprep-valve-staging.sh: GE's version (our two added
apply lines for 98efe1cd and e15b1e15 are GE's own now).
- ntdll-take-in-flight-alert-when-wait-on-address-times-out.patch: GE's
newer version (960acd0a, with its test).
- winewayland-advertise-openvr-openxr-device-extensions.patch and
lsteamclient 0017: identical to GE's, merged without a change.
README.md: ours (updated for 11-12 in a later commit).
wine: still banner-proton/11.11 here; moved to banner-proton/11.12 in a
later commit.
Append "-GE-Proton(dirty)" to the version string of DXVK, D7VK and
vkd3d-proton whenever their tree has local changes, i.e. carries our
patches. It shows up in their logs (DXVK/D7VK info line, HUD) so their
developers can tell from a bug report that the build isn't upstream.
DXVK and D7VK used describe --dirty=0, which only appended an easily
missed '0'. For vkd3d-proton the tag goes before the existing '+', which
its dirty-tree check reads; vkd3d_build stays a plain hex value. A
small vkd3d-proton patch also prints the version string on its INFO
build line for dirty builds, since it otherwise only shows the hash.
Detection uses git status --porcelain, so patches that only add files
count too. Clean trees keep their plain upstream version.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Install d3dcompiler_43 and d3dcompiler_47, which the reporter found
fixes flickering textures and character models (GOG via Heroic). Add it
as gamefixes-steam/1041720.py with the usual gamefixes-umu symlink,
which the database's GOG, EGS and standalone entries map to.
https://github.com/Open-Wine-Components/umu-database/issues/159
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Upstream ca9e1047 now validates ISteamMatchmaking request handles with a
magic number and allocates them with calloc(). Regenerate 0018 against
it so it applies without fuzz; the patched result is unchanged.
The tracking is still needed on top of the magic check: two threads
releasing the same request at once can both pass the magic check before
either frees it, while only one can remove it from the locked list.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
A thread that is killed after it has sent its init_thread request, but
before the server has read it, never gets a reply and never sees
end-of-file either: since Wine 6.2 (44699c324f2) it keeps the write end
of its own reply pipe open until the request returns. It stays blocked
for the life of the process, with 5 pipe fds and its stacks, and a
thread killed just before it sends the request exits but leaks that
write end. Helldivers 2's anti-tamper code creates suspended threads
and kills them right away, several times a second, so these threads and
fds pile up during a session (ValveSoftware/Proton#7486).
The patch closes the write end as soon as it has been sent to the
server, as Wine did before 6.2. Upstream Wine has the same code.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
(cherry picked from commit 8b38666d9fc89b3b02d6a079ff232547170942b1)
CURRENT_PREFIX_VERSION was the GE build name (GE-Proton11-11), which
upstream Proton can't parse when a prefix is later run with it, and
whose release number has nothing to do with Valve's prefix revision
that upgrade_pfx() steps are gated on. Use Valve's value (11.0-100),
so prefixes we write work with upstream Proton and Valve's migrations
apply with Valve's numbers. Release commits no longer need to bump it.
Older GE prefixes are still parsed by upgrade_pfx() (GE-ProtonX-Y as
X.0-Y), so they upgrade normally. Builtin DLLs are still refreshed on
each GE update, since prefix_info includes the install's lib_dir and
default_pfx timestamp.
Log the GE build in the "Upgrading prefix" line, and have the
protonfixes debug output show the build and the prefix version
separately.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Staging's dsound-Fast_Mixer moves every resampled buffer to a linear
resampler once more than 4 buffers exist, and that path ignores the
committed region the other mixing paths read. Liarsoft's codeX RScript
games reach 5 buffers and their BGM crackles after voice lines on a
48 kHz device. Default the limit to INT_MAX, like upstream Wine's
behavior; HQBuffersMax in the registry can still lower it.
https://github.com/GloriousEggroll/proton-ge-custom/issues/521
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Where Winds Meet supports the DualSense natively, but with the automatic
fallback its touchpad stops working when the controller is plugged in
after the game has started, until it is replugged. The reporter
confirmed PROTON_SONY_AUTO_XINPUT=0 fixes it whether the controller is
connected before or after launch.
https://github.com/GloriousEggroll/proton-ge-custom/issues/829
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The SC2 application profile forced d3d9.deviceLocalConstantBuffers=False
on every GPU to avoid a GPU hang on an RX 5700 XT (#790). On an RX 7900
GRE that setting makes the game freeze in coop, reproducibly, while Auto
does not (#845).
Replace the profile with a default in D3D9Options that applies only to
SC2.exe/SC2_x64.exe on AMD Navi 10 device IDs, and only while the option
is Auto.
https://github.com/GloriousEggroll/proton-ge-custom/issues/845
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Warhammer 40,000: Darktide only offers FSR 4.1.1 on RDNA3 with its own
amd_ags_x64.dll and without our amdxc64 FSR4 provider. The reporter
confirmed that neither change alone is enough, and PROTON_FSR4_UPGRADE
doesn't bring it back either.
Default to both for the game, only when every DRM device is AMD, since
native AGS relies on Wine's builtin ADL. PROTON_NATIVE_AGS=0, an amdxc64
entry in WINEDLLOVERRIDES, or the FSR4 upgrade option opt out.
https://github.com/GloriousEggroll/proton-ge-custom/issues/869
Co-Authored-By: Claude Opus 5.5 <[email protected]>
MFShutdown() held queues_section while waiting for pool callbacks, and a
source reader callback unlocking its user queue waited for the same
lock, hanging the Kingdom Hearts 358/2 Days port after its first
cutscene. Shut the system queues down outside the lock, like
unlock_user_queue() already does for user queues.
https://github.com/GloriousEggroll/proton-ge-custom/issues/899
Co-Authored-By: Claude Opus 5.5 <[email protected]>
POINT.x and .y are LONG, so printing them with %d breaks the build with
-Werror=format on both x86_64 and i386.
Co-Authored-By: Claude Opus 5.5 <[email protected]>