protonscr

vkd3d_fence/vkd3d-swapchain futex deadlock on NVIDIA RTX 5080 (GB203) — recoverable 4-5s freeze mid-game

vkd3dopen
HansKristian-Work/vkd3d-proton#3131 · opened 2026-06-27 by Resro30 · updated 2026-06-27 · 0 comments · github
RResro30 2026-06-27 github

System

  • GPU: NVIDIA RTX 5080 (GB203), driver 610.43.02 (Open Kernel Module)
  • CPU: Intel i9-10900K
  • OS: CachyOS, kernel 7.1.1-2-cachyos
  • Compositor: KWin/Wayland
  • VKD3D-Proton tested: CachyOS Proton ee737e3 (2026-06-02) and Proton GE — both reproduce

Symptom

Mid-game, GPU clock, temperature, and usage simultaneously drop to zero for 4-5 seconds, then recover. Audio continues uninterrupted. MangoHUD freezes (it hooks vkQueuePresentKHR in the same thread context). Alt-tabbing out immediately resolves the freeze. Not a crash — fully recoverable.

Reproducer: MECCHA CHAMELEON (exe: PenguinHotel.exe, AppID 3364650) — DX12 via VKD3D-Proton. Triggers reliably within minutes of play.

Root cause (thread trace)

Captured via /proc/$pid/task/*/wchan at the moment of freeze:

  1. vkd3d_fence thread (tid 21795) — sole active GPU fence poller — finishes its __x64_sys_poll.cold pass and enters futex_wait
  2. Simultaneously, vkd3d-swapchain thread wakes from frame sleep, submits present, enters futex_wait waiting for fence signal
  3. Result: all vkd3d_fence threads in futex_wait, nobody polling the new swapchain fence → 4-5s deadlock until timeout expires or alt-tab generates compositor activity that breaks it

What was ruled out

  • VKD3D_CONFIG=single_queue — no change
  • PCIe AER errors, link speed degradation — confirmed clean (zero AER, stays at 8.0 GT/s Gen3 throughout freeze)
  • KWin compositor backend, vsync, KWIN_DRM_NO_DIRECT_SCANOUT — no effect
  • GPU P-state / minimum clock lock — no effect
  • SCX schedulers (pandemonium, lavd) and plain CFS — all reproduce identically
  • nvidia-persistenced — no effect

Note: KWin logs Applying output configuration failed! during the freeze — confirmed secondary effect of the DRM surface stalling, not the root cause.

Launch options