[Bug 60459] New: The Tomorrow War hangs in TestCooperativeLevel() loop when starting a new game with WineD3D
http://bugs.winehq.org/show_bug.cgi?id=60459 Bug ID: 60459 Summary: The Tomorrow War hangs in TestCooperativeLevel() loop when starting a new game with WineD3D Product: Wine Version: 11.19 Hardware: x86-64 URL: https://store.steampowered.com/app/289480/The_Tomorrow _War/ OS: Linux Status: NEW Severity: normal Priority: P2 Component: d3d Assignee: wine-bugs@list.winehq.org Reporter: gyebro69@gmail.com Target Milestone: --- Distribution: --- Created attachment 82283 --> http://bugs.winehq.org/attachment.cgi?id=82283 plain terminal output The Tomorrow War (32-bit, D3D9, Zoom Platform DRM-free version and Steam version) hangs when starting a new game with builtin d3d9/WineD3D. Steps to reproduce: 1. Launch zv.exe and select New Game. 2. Wait for ZV_Intro.avi to finish, or skip it. 3. The image stops updating and zv.exe continuously consumes 100% CPU. Expected: An in-engine cutscene starts, followed by gameplay. Renaming ZV_Intro.avi, reducing graphics settings and using a virtual desktop do not help. The game works with DXVK's d3d9.dll. This is a long-standing issue, also present in Wine 3.0 and 4.0. Debug findings: The main thread repeatedly calls IDirect3DDevice9::TestCooperativeLevel(), which returns D3DERR_DEVICENOTRESET. The game does not call Reset() during this loop. Focus tracing shows WM_ACTIVATEAPP(FALSE), followed by WM_ACTIVATEAPP(TRUE), while the D3D device window is hidden. The foreground window on reactivation belongs to the same process and thread. Wine's device_parent_activate() changes the device state from OK to LOST, then NOT_RESET. A diagnostic patch that skips the implicit swapchain's parent activation callbacks while its device window is hidden allows the game to proceed. Gameplay and switching away and back work under X11, Wayland and XWayland. A standalone D3D9 probe reproduces the state transition with both proprietary NVIDIA and nouveau, including nouveau under X11 and Wayland. However, the patch also suppresses device loss during a genuine switch to another process while the device window is hidden. The Windows 11/VirtualBox reference run reports DEVICELOST in that case, so the patch should be treated as a diagnostic workaround rather than a complete fix. Tested on: Arch Linux, GeForce GTX 1660 SUPER, NVIDIA 615.71.09 wine-11.19-91-g59416cf5848 Reproduces under X11, native Wayland and XWayland -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
http://bugs.winehq.org/show_bug.cgi?id=60459 --- Comment #1 from Béla Gyebrószki <gyebro69@gmail.com> --- Created attachment 82284 --> http://bugs.winehq.org/attachment.cgi?id=82284 patch and test suite The archive contains: TWar-hidden-window-probe.patch — Diagnostic workaround; not a proposed final fix. TWar-D3D9-focus-probe.zip - Standalone 32-bit D3D9 focus/device-state test program, including C source, a prebuilt Windows executable, a build script, a Windows test runner, and an English README. Tests natural and synthetic activation events with visible and hidden device windows for comparison between Windows and patched/unpatched Wine. -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
participants (1)
-
WineHQ Bugzilla