Environment
- iPhone 17 , iOS 27.0.1, 8 GB
- Madeira-based Steam shell (iDeck Build 56); runtime rev markers seen in logs:
ml526,ml714 - Real 32-bit Windows Steam client (Big Picture), games launched from Steam
Summary
Four titles tested to completion. Two engines hang forever in ultra-early init; two work:
| Game | Engine | Arch | Result |
|---|---|---|---|
| Castle Crashers | FNA (XNA) | 32-bit | ✅ playable (110,000+ frames presented) |
| Alan Wake | Remedy | 32-bit | ✅ playable, exclusive fullscreen (windowed=0) works |
| Batman: Arkham City GOTY | UE3 | 32-bit | ❌ 0 presents, 7/7 runs identical |
| Crysis 2 Max Edition | CryEngine 3 | 32-bit | ❌ 0 presents, hangs before renderer selection |
Key observations
-
The hangs happen before the engine chooses a renderer:
- Crysis 2: only
DXGI.dll+winemetal.dllare loaded (early mode enumeration). Neitherd3d9.dllnord3d11.dllis ever loaded. No%USERPROFILE%\Documents\My Games\Crysis2folder is created and nolog.txt/Console.logis written → CryEngine never even reaches its own logger init. - Batman:
d3d9.dllloads and forwards tod3d9-emulated.dll, but noCreateDevicecall ever happens (0 occurrences across 7 runs) and the game thread never creates a window (winios-treeshows only Wine hosttid=0024windows).
- Crysis 2: only
-
Deadlock signature from the built-in diagnostics (Crysis 2, run
Crysis2Launcher.exe-2026-10-27_09-12-51.txt):[evt-life] obj=0x11fee16c0 create=1 SET=0 reset=1 pulse=0 | wait begin=0 end=0 ... ... last_reset tid=003c seq=13 <-- NEVER SET BY ANYONE, for the whole life of this object [srv-stuck] tid=007c ... op=1 flags=00000002 timeout=9223372036854775807 alertable=0 ...36
NEVER SET BY ANYONEevent-lifetime verdicts in a single run. All guest threads are parked inNtWaitForMultipleObjects/NtUserMsgWaitForMultipleObjectsExwith infinite timeouts. It looks like engine threads create+reset events and then wait on them, but whatever producer was supposed toSetEventnever runs — or its wakeup is lost. -
Not a renderer-API problem: the D3D9 path itself is healthy. Working titles get:
[d3d9-modes] CreateDevice 1408x648 X8R8G8B8 refresh=0 windowed=0 count=1 -> hr 0x0 [d3d9-census] ---- summary 25: present=110000 frames=5000 window=83341ms ---- detach-wait: presents=15 running=1 elapsed=30s -
Ruled out (Crysis 2):
- Launch options:
-dx9was placed on the game executable's own command line (launcher bypassed; verified viaNtCreateUserProcesscmdline) — behavior identical, consistent with the hang preceding renderer selection. - Memory: footprint peaks ~1.6 GB; JIT pool shrink 896→592 MB is logged as non-fatal.
- DXMT D3D11: never reached (no
d3d11.dllload at all). - For Batman,
-dx11is architecturally impossible (BmEngine.inihasAllowD3D11=False, no Win64 binaries shipped).
- Launch options:
Side note: one-time installs
First launch of each game runs vcredist_x86.exe then DXSETUP.exe. DXSETUP fails every time with exit -1073741800 (0xC0000018):
[guest-log] dsetup32: CSetup::SetupForDirectX(): InstallPlugIn() failed.
[dock-installers] exit 2/2 program=directx status=-1073741800 failed; not recordedThis appears benign for gameplay (both working titles ship their own d3dx9_43.dll and load it fine), but the failed one-time-install session closes before the game can start, so every game looks broken on first launch until Madeira is restarted and the game relaunched (second launch shows "One-time installs skipped"). Might be worth making DXSETUP failure non-fatal, or documenting the restart-and-relaunch step.
Logs available
Full per-run session logs (winios-tree snapshots, evt-life/srv-stuck dumps, thread samples) for all four games plus dock logs. Happy to upload any of them:
logs/Crysis2Launcher.exe-2026-10-27_09-12-51.txt— deadlock evidencelogs/BatmanAC.exe-2026-10-26_19-35-23.txt(+ 6 earlier runs)logs/AlanWake.exe-2026-10-27_07-01-07.txt— working referencelogs/castle.exe-2026-10-26_13-09-32.txt— working reference
Repro
Steam → install Batman: Arkham City GOTY (200260) or Crysis 2 Maximum Edition (108800) → launch → Dock reports "exited before a game window appeared" after ~150 s of detach-wait: presents=0 running=1.
Activity
0No activity yet.