#446

[compat] UE3 & CryEngine 3 games deadlock in ultra-early init before any D3D device creation (Batman: Arkham City, Crysis 2) — FNA & Remedy titles work fine

OpenSheffieldXieopened 3d ago

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:

GameEngineArchResult
Castle CrashersFNA (XNA)32-bit✅ playable (110,000+ frames presented)
Alan WakeRemedy32-bit✅ playable, exclusive fullscreen (windowed=0) works
Batman: Arkham City GOTYUE332-bit❌ 0 presents, 7/7 runs identical
Crysis 2 Max EditionCryEngine 332-bit❌ 0 presents, hangs before renderer selection

Key observations

  1. The hangs happen before the engine chooses a renderer:

    • Crysis 2: only DXGI.dll + winemetal.dll are loaded (early mode enumeration). Neither d3d9.dll nor d3d11.dll is ever loaded. No %USERPROFILE%\Documents\My Games\Crysis2 folder is created and no log.txt/Console.log is written → CryEngine never even reaches its own logger init.
    • Batman: d3d9.dll loads and forwards to d3d9-emulated.dll, but no CreateDevice call ever happens (0 occurrences across 7 runs) and the game thread never creates a window (winios-tree shows only Wine host tid=0024 windows).
  2. 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 ANYONE event-lifetime verdicts in a single run. All guest threads are parked in NtWaitForMultipleObjects / NtUserMsgWaitForMultipleObjectsEx with infinite timeouts. It looks like engine threads create+reset events and then wait on them, but whatever producer was supposed to SetEvent never runs — or its wakeup is lost.

  3. 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
  4. Ruled out (Crysis 2):

    • Launch options: -dx9 was placed on the game executable's own command line (launcher bypassed; verified via NtCreateUserProcess cmdline) — 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.dll load at all).
    • For Batman, -dx11 is architecturally impossible (BmEngine.ini has AllowD3D11=False, no Win64 binaries shipped).

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 recorded

This 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 evidence
  • logs/BatmanAC.exe-2026-10-26_19-35-23.txt (+ 6 earlier runs)
  • logs/AlanWake.exe-2026-10-27_07-01-07.txt — working reference
  • logs/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

0

No activity yet.