Skip to content

GE-Proton 11.0-6 / 11.0-5 / 11.0-3 / 10.0-34 · Proton 11.0-1 / 11.0-2 / 10.0-4 — arm64ec bionic 20260908 (versionCode 6: XInput update-thread survives transient wait failures — controllers no longer die mid-game)

Choose a tag to compare

@The412Banner The412Banner released this 09 Sep 00:47
· 27 commits to proton_11.0 since this release

Consolidated arm64ec (bionic) build of all seven Proton / GE-Proton layers, rebuilt from the build-bionic-layers-20260907-eccode sources — every layer is its v5 build plus one Wine xinput fix: the XInput device-update thread no longer exits for good on a transient wait failure, which used to kill every controller part-way through a game. Nothing else was added, removed or rebased. Every layer is a single .wcp that runs on both 4 KB- and 16 KB-page devices. Proton 11.0-2 additionally ships an x86_64 build alongside arm64ec.

This is the current release and the in-app catalog default. These wcp install into a new coexisting <version>-arm64ec-6 slot next to any eccode -5 layer — nothing is overwritten. Existing containers keep working, and any container already on a -5 layer is offered this as an in-place update (with a revert snapshot).

Device-tested on one layer only. The controller failure was reproduced and the fix verified on GE-Proton 11.0-6 (Titanfall 2, Adreno 750). The other six layers carry the identical patch — confirmed present in each built xinput1_3.dll — but have not been booted on a device. The 16 KB-page boot of these wcp remains untested.

What's new

  • 🎮 XInput update thread survives transient wait failures (all layers) — Wine's hid_update_thread_proc waits on the connected controllers. Any wait result that was neither a signalled handle nor a timeout dropped it out of its loop and into FreeLibraryAndExitThread, so XInput stopped polling for the rest of the process. On Android that fired from an esync ppoll returning EAGAIN — a momentary "try again" — and the consequences were permanent: the physical pad and the emulated on-screen controller both went dead (they share that path) while touch input kept working, the in-game drawer still reported the controller as connected, and nothing recovered it short of relaunching the game. The in-app Reset Input cannot help either, because it rebuilds the host side of the transport while the thread that died is in the guest, and input devices are only enumerated at boot. The thread now absorbs up to 100 such failures with a 50 ms backoff, re-enumerating controllers as if the wait had timed out, and still terminates if they keep coming. xinput1_1 / 1_2 / 1_4 / xinputuap build from the same source, so every XInput version is covered.
  • 🔢 versionCode → 6 on every layer — new coexisting install slot <version>-arm64ec-6 next to eccode's -5.
  • ♻️ Carried over from eccodeRtlIsEcCode bounds check (Denuvo unwind loop, NFS Heat) · DirectAudio v1.3.2 · ws2_32 dual-stack DNS · nsiproxy default route (WINE_ANDROID_GATEWAY) · gdiplus span clamp (Wine 11 layers) · realized-font-handle cap 32768 · GE game-fix tiers · SD-card boot fix (noexec / force_anon) · drive-root copy fix · C.UTF-8 locale · WINEVMEMMAXSIZE cap · fast-yield gate · FEX-unixlib loader · XRandR / XRender · one wcp per layer (4 KB + 16 KB pages).

Scope of the changes versus eccode: PE-side xinput1_3.dll (dlls/xinput1_3/main.c) on every layer, and the versionCode stamp. No ntdll, FEX, DXVK or other PE changes.

Layers

GE-Proton 11.0-6  ·  arm64ec · Wine 11 · versionCode 6
Base GloriousEggroll GE-Proton11-6 game-fix tier on Valve Proton 11.0-1 (Wine 11.0-1)
Installs as 11.0-6-arm64ec-6
ntdll fix RtlIsEcCode bounds check (Denuvo unwind loop)
EA fixes ws2_32 dual-stack DNS · nsiproxy default route · gdiplus span clamp
DirectAudio v1.3.2 (vendored source) — opt-in via registry Audio=directaudio; mic capture opt-in via BANNER_AUDIO_DIRECT_MIC=1
XInput fix update thread survives transient wait failures (controllers no longer die mid-game)
Assets GE-proton-11.0-6-arm64ec.wcp (4 KB + 16 KB pages)

Android compatibility fixes — SD-card boot (noexec / force_anon) · drive-root copy · C.UTF-8 locale
Runtime — realized-font-handle cap 32768 · WINEVMEMMAXSIZE cap · fast-yield gate · FEX-unixlib loader · XRandR / XRender
Build-g0 -O2 release build, llvm-strip on both the PE DLLs/EXEs and the unix .so loaders · zstd-compressed .wcp · ccache in CI (build speed only, not in the layer)
Inherited bionic base — the Winlator-bionic / GameNative Android patch set every layer is built on: esync/fsync, winex11 driver (window/keyboard/mouse/OpenGL/bitblt), preloader, clipboard, winemenubuilder, MIDI, DNS resolver, wow64 syscall path
GE game-fixesmaplestory · dai_xinput · eac · pso2 · assettocorsa · silence-starcitizen · vgsoh · WM_ACTIVATEAPP

ℹ️ GE dropped its battlenet workaround upstream in GE-Proton11-6, so this layer's game-fix set is the 11.0-5 tier minus battlenet. This is the layer the NFS Heat / Denuvo fix was device-proven on.

GE-Proton 11.0-5  ·  arm64ec · Wine 11 · versionCode 6
Base GloriousEggroll GE-Proton11-5 game-fix tier on Valve Proton 11.0-1 (Wine 11.0-1)
Installs as 11.0-5-arm64ec-6
ntdll fix RtlIsEcCode bounds check (Denuvo unwind loop)
EA fixes ws2_32 dual-stack DNS · nsiproxy default route · gdiplus span clamp
DirectAudio v1.3.2 (vendored source) — opt-in via registry Audio=directaudio; mic capture opt-in via BANNER_AUDIO_DIRECT_MIC=1
XInput fix update thread survives transient wait failures (controllers no longer die mid-game)
Assets GE-proton-11.0-5-arm64ec.wcp (4 KB + 16 KB pages)

Android compatibility fixes — SD-card boot (noexec / force_anon) · drive-root copy · C.UTF-8 locale
Runtime — realized-font-handle cap 32768 · WINEVMEMMAXSIZE cap · fast-yield gate · FEX-unixlib loader · XRandR / XRender
Build-g0 -O2 release build, llvm-strip on both the PE DLLs/EXEs and the unix .so loaders · zstd-compressed .wcp · ccache in CI (build speed only, not in the layer)
Inherited bionic base — the Winlator-bionic / GameNative Android patch set every layer is built on: esync/fsync, winex11 driver (window/keyboard/mouse/OpenGL/bitblt), preloader, clipboard, winemenubuilder, MIDI, DNS resolver, wow64 syscall path
GE game-fixesbattlenet · maplestory · dai_xinput · eac · pso2 · assettocorsa · silence-starcitizen · vgsoh · WM_ACTIVATEAPP

GE-Proton 11.0-3  ·  arm64ec · Wine 11 · versionCode 6
Base GloriousEggroll GE-Proton11-3 game-fix tier on Valve Proton 11.0-1 (Wine 11.0-1)
Installs as 11.0-3-arm64ec-6
ntdll fix RtlIsEcCode bounds check (Denuvo unwind loop)
EA fixes ws2_32 dual-stack DNS · nsiproxy default route · gdiplus span clamp
DirectAudio v1.3.2 — opt-in via registry Audio=directaudio; mic capture opt-in via BANNER_AUDIO_DIRECT_MIC=1
XInput fix update thread survives transient wait failures (controllers no longer die mid-game)
Assets GE-proton-11.0-3-arm64ec.wcp (4 KB + 16 KB pages)

Android compatibility fixes — SD-card boot (noexec / force_anon) · drive-root copy · C.UTF-8 locale
Runtime — realized-font-handle cap 32768 · WINEVMEMMAXSIZE cap · fast-yield gate · FEX-unixlib loader · XRandR / XRender
Build-g0 -O2 release build, llvm-strip on both the PE DLLs/EXEs and the unix .so loaders · zstd-compressed .wcp · ccache in CI (build speed only, not in the layer)
Inherited bionic base — the Winlator-bionic / GameNative Android patch set every layer is built on: esync/fsync, winex11 driver (window/keyboard/mouse/OpenGL/bitblt), preloader, clipboard, winemenubuilder, MIDI, DNS resolver, wow64 syscall path
GE game-fixesbattlenet · maplestory · dai_xinput · eac · pso2 · assettocorsa · silence-starcitizen · vgsoh · WM_ACTIVATEAPP

Proton 11.0-1  ·  arm64ec · Wine 11 · versionCode 6
Base Stock Valve Proton 11.0-1 (Wine 11.0-1) — plain Proton, no GE game-fixes
Installs as 11.0-1-arm64ec-6
ntdll fix RtlIsEcCode bounds check (Denuvo unwind loop)
EA fixes ws2_32 dual-stack DNS · nsiproxy default route · gdiplus span clamp
DirectAudio v1.3.2 — opt-in via registry Audio=directaudio; mic capture opt-in via BANNER_AUDIO_DIRECT_MIC=1
XInput fix update thread survives transient wait failures (controllers no longer die mid-game)
Assets proton-11.0-1-arm64ec.wcp (4 KB + 16 KB pages)

Android compatibility fixes — SD-card boot (noexec / force_anon) · drive-root copy · C.UTF-8 locale
Runtime — realized-font-handle cap 32768 · WINEVMEMMAXSIZE cap · fast-yield gate · FEX-unixlib loader · XRandR / XRender
Build-g0 -O2 release build, llvm-strip on both the PE DLLs/EXEs and the unix .so loaders · zstd-compressed .wcp · ccache in CI (build speed only, not in the layer)
Inherited bionic base — the Winlator-bionic / GameNative Android patch set every layer is built on: esync/fsync, winex11 driver (window/keyboard/mouse/OpenGL/bitblt), preloader, clipboard, winemenubuilder, MIDI, DNS resolver, wow64 syscall path
GE game-fixes — none (plain Proton)

Proton 11.0-2  ·  arm64ec + x86_64 · Wine 11 · versionCode 6
Base Stock Valve Proton 11.0-2 (Wine 11) — plain Proton, no GE game-fixes
Installs as 11.0-2-arm64ec-6 · 11.0-2-x86_64-6
ntdll fix RtlIsEcCode bounds check (Denuvo unwind loop) — arm64ec build only; the x86_64 build has no EC code path
EA fixes ws2_32 dual-stack DNS · nsiproxy default route · gdiplus span clamp (both architectures)
DirectAudio v1.3.2 — opt-in via registry Audio=directaudio; mic capture opt-in via BANNER_AUDIO_DIRECT_MIC=1 (both architectures)
XInput fix update thread survives transient wait failures (controllers no longer die mid-game)
Assets arm64ec: proton-11.0-2-arm64ec.wcp (4 KB + 16 KB pages)  ·  x86_64: proton-11.0-2-x86_64.wcp (4 KB-page build)

Android compatibility fixes — SD-card boot (noexec / force_anon) · drive-root copy · C.UTF-8 locale
Runtime — realized-font-handle cap 32768 · WINEVMEMMAXSIZE cap · fast-yield gate · FEX-unixlib loader · XRandR / XRender
Build-g0 -O2 release build, llvm-strip on both the PE DLLs/EXEs and the unix .so loaders · zstd-compressed .wcp · ccache in CI (build speed only, not in the layer)
Inherited bionic base — the Winlator-bionic / GameNative Android patch set every layer is built on: esync/fsync, winex11 driver (window/keyboard/mouse/OpenGL/bitblt), preloader, clipboard, winemenubuilder, MIDI, DNS resolver, wow64 syscall path
GE game-fixes — none (plain Proton)

⚠️ The x86_64 wcp carries the same fixes, but Proton 11 under box64 currently does not render a window — use the arm64ec build, which is the proven runtime. The x86_64 asset is published for completeness / testing; it is the 4 KB-page (sdk28) build only.

Proton 10.0-4  ·  arm64ec · Wine 10 · versionCode 6
Base Stock Valve Proton 10.0-4 (Wine 10) — plain Proton, no GE game-fixes
Installs as 10.0-4-arm64ec-6
ntdll fix RtlIsEcCode bounds check (Denuvo unwind loop)
EA fixes ws2_32 dual-stack DNS · nsiproxy default route (Wine 10's gdiplus has no span assertion — no clamp needed)
DirectAudio v1.3.2 Wine-10 ABI port — opt-in via registry Audio=directaudio; mic capture opt-in via BANNER_AUDIO_DIRECT_MIC=1
XInput fix update thread survives transient wait failures (controllers no longer die mid-game)
Assets proton-10.0-4-arm64ec.wcp (4 KB + 16 KB pages)

Android compatibility fixes — SD-card boot (force_anon, GameNative's original Wine-10 diff) · drive-root copy · C.UTF-8 locale (fixes authored against the Wine-10 tree)
Runtime — realized-font-handle cap 32768 · WINEVMEMMAXSIZE cap · fast-yield gate · FEX-unixlib loader · XRandR / XRender
Build-g0 -O2 release build, llvm-strip on both the PE DLLs/EXEs and the unix .so loaders · zstd-compressed .wcp · ccache in CI (build speed only, not in the layer)
Inherited bionic base — the Winlator-bionic / GameNative Android patch set every layer is built on: esync/fsync, winex11 driver (window/keyboard/mouse/OpenGL/bitblt), preloader, clipboard, winemenubuilder, MIDI, DNS resolver, wow64 syscall path
GE game-fixes — none (plain Proton)

ℹ️ The DirectAudio mainline is Wine-11-only (it drops the midi_get_driver unixlib guard); this layer ships the Wine-10-guarded 1.3.2 build so the same feature set works on Wine 10.

GE-Proton 10.0-34  ·  arm64ec · Wine 10 · versionCode 6
Base Valve Proton 10.0-4 (Wine 10) with the GE-Proton10-34 game-fix tier layered on (GE's game-patch files only, not GE's Wine tree)
Installs as 10.0-34-arm64ec-6
ntdll fix RtlIsEcCode bounds check (Denuvo unwind loop)
EA fixes ws2_32 dual-stack DNS · nsiproxy default route (Wine 10's gdiplus has no span assertion — no clamp needed)
DirectAudio v1.3.2 Wine-10 ABI port — opt-in via registry Audio=directaudio; mic capture opt-in via BANNER_AUDIO_DIRECT_MIC=1
XInput fix update thread survives transient wait failures (controllers no longer die mid-game)
Assets GE-proton-10.0-34-arm64ec.wcp (4 KB + 16 KB pages)

Android compatibility fixes — SD-card boot (force_anon, Wine-10 diff) · drive-root copy · C.UTF-8 locale
Runtime — realized-font-handle cap 32768 · WINEVMEMMAXSIZE cap · fast-yield gate · FEX-unixlib loader · XRandR / XRender
Build-g0 -O2 release build, llvm-strip on both the PE DLLs/EXEs and the unix .so loaders · zstd-compressed .wcp · ccache in CI (build speed only, not in the layer)
Inherited bionic base — the Winlator-bionic / GameNative Android patch set every layer is built on: esync/fsync, winex11 driver (window/keyboard/mouse/OpenGL/bitblt), preloader, clipboard, winemenubuilder, MIDI, DNS resolver, wow64 syscall path
GE game-fixes (10 — superset)

  • GE-Proton10-34 tier: assettocorsa · dai_xinput · eac · pso2 · silence-starcitizen · vgsoh
  • plus our extras: battlenet · maplestory-charprev · maplestory-stickykeys · WM_ACTIVATEAPP

ℹ️ GE-Proton10-34's lemansultimate-gameinput patch is intentionally omitted — our Valve Proton 10.0 base already ships dlls/gameinput, so GE's stub is redundant/conflicting.

Installation

Each layer is a single .wcp — install the one matching your Proton / GE version. There is no longer an sdk28 / sdk35 choice: the same file serves 4 KB- and 16 KB-page devices (4 KB boot device-proven; 16 KB boot untested).

Proton 11.0-2 additionally offers an x86_64 wcp — but Proton 11 under box64 does not currently render a window, so use the arm64ec build unless you are specifically testing x86_64.

Containers already on a <version>-5 layer are offered this as an in-place update from the app — no new container needed, and the update takes a revert snapshot first. A fresh container on the -6 slot works too. Existing eccode (-5) and eanet2 (-4) containers keep working unchanged. For EA / Denuvo titles pair the layer with FEXCore nightly 2608+45.

Built from: proton_11.6-GE 349547af · proton_11.5-GE 10a0c55d · proton_11.3-GE a2989497 · proton_11.0 ac81a525 · proton_11.0-2 217ce2f1 · proton_10.34-GE af34ea7a · proton_10.0 a7309bbc (CI runs 34292449523 · 34292658719 · 34292645424 · 34292622139 · 34292633697 · 34292688301 · 34292677677, all green). Each is its eccode parent commit plus one patch to dlls/xinput1_3/main.c.

Delivery copies for the in-app catalog: winlator-contents release bionic-layers-20260908-xinput.