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:
vkd3d_fence thread (tid 21795) — sole active GPU fence poller — finishes its __x64_sys_poll.cold pass and enters futex_wait
Simultaneously, vkd3d-swapchain thread wakes from frame sleep, submits present, enters futex_wait waiting for fence signal
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.
System
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
vkQueuePresentKHRin 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/*/wchanat the moment of freeze:vkd3d_fencethread (tid 21795) — sole active GPU fence poller — finishes its__x64_sys_poll.coldpass and entersfutex_waitvkd3d-swapchainthread wakes from frame sleep, submits present, entersfutex_waitwaiting for fence signalvkd3d_fencethreads infutex_wait, nobody polling the new swapchain fence → 4-5s deadlock until timeout expires or alt-tab generates compositor activity that breaks itWhat was ruled out
VKD3D_CONFIG=single_queue— no changeKWIN_DRM_NO_DIRECT_SCANOUT— no effectnvidia-persistenced— no effectNote: KWin logs
Applying output configuration failed!during the freeze — confirmed secondary effect of the DRM surface stalling, not the root cause.