protonscr

Alan Wake 2: GPU underutilized (~35-50%) and low fps after game update 1.2.11, NVIDIA

vkd3dclosed
HansKristian-Work/vkd3d-proton#3404 · opened 2026-10-25 by baeric · updated 2026-10-26 · 2 comments · github
Bbaeric 2026-10-25 github

Software information

Alan Wake 2 (Epic, launched via Heroic/umu). Game version 1.2.11, installed 2026-10-25.

Ran fine on 1.2.10 (last played 2026-10-19). Since the update to 1.2.11, fps is
14-40 and GPU utilization stays at ~35-50% while the GPU sits at full clocks (P0,
~1930 MHz). Turning the camera makes it worse (frametime spikes 150-470 ms).

Graphics settings make no measurable difference. Same result with:

  • All Low at 2560x1440 output / 1188x668 render: ~39 fps, GPU ~47%
  • Medium, DLSS Balanced (1485x835): ~14-19 fps, GPU ~40%
  • RT/PT off, frame generation off, vsync off in all cases

The update replaced AlanWake2.exe, data/shaders/build/pc_dx12/.binrfx (152 files),
6 files in data_pack2/pc and the amd_fidelityfx_
DLLs. vkd3d-proton.cache was deleted
before testing.

Same behavior on:

  • GE-Proton11-9 (vkd3d-proton 223075587)
  • Proton Experimental 11.0-100
  • proton-cachyos 11.0-20261015 (vkd3d-proton 0bb64c56)
  • kernel 7.3.0 and 6.18.55 LTS

Control and Control Resonant (same engine, Proton Experimental) run normally on the
same system with similar settings.

What the game is doing

perf (10 s while moving through the level, proton-cachyos build):

  • One game thread uses ~45% of all samples (~64% of a core). No core is saturated.
  • Hot spots on that thread: ~13% in __wine_syscall_dispatcher, ~6% in
    __vdso_clock_gettime, and several % in ntdll SRW lock / RtlWakeAddressAll paths.
  • d3d12core.dll ~3% of samples, libnvidia-glcore ~1%.
  • Other worker threads mostly idle in ntsync waits.

It looks like the main thread is waiting/polling rather than submitting work.
perf.data attached.

Disabling Reflex (DXVK_NVAPI_DISABLE_ENTRYPOINTS=NvAPI_D3D_SetSleepMode,NvAPI_D3D_Sleep,
NvAPI_D3D_SetLatencyMarker,NvAPI_D3D12_SetAsyncFrameMarker, confirmed in the log) does
not change anything.

Errors in the log:

  • err:vkd3d-proton:d3d12_command_allocator_Reset: There are still 1 pending command
    lists awaiting execution from command allocator (repeats every few seconds)
  • err:winevulkan:signaller_worker wait timed out with non-empty poll list
    (10-22 per session, in bursts)

System information

  • GPU: RTX 3060 (GA104)
  • Driver: 615.78.08 (nvidia-open), same driver as the last good run
  • CPU: Ryzen 5 3600, 16 GB RAM
  • OS: CachyOS, KDE Plasma 6.8.1 Wayland, single 2560x1440 display
  • Wine version: proton-cachyos 11.0-20261015 (also GE-Proton11-9, Proton Experimental 11.0-100)
  • VKD3D-Proton version: 0bb64c56 (proton-cachyos), 223075587 (GE-Proton11-9)

Log files

Proton log attached (PROTON_LOG=1, proton-cachyos, Reflex disabled run; Epic auth args and home path redacted).

alan-wake-2-1.2.11-proton-redacted.log

alan-wake-2-1.2.11.perf.data.log

Bbaeric 2026-10-25 github

alan-wake-2-1.2.11-perf-report.txt

Text version of the perf profile (the .perf.data.log attachment is the raw perf.data, renamed so GitHub would accept it).

Bbaeric 2026-10-26 github

Closing, not a vkd3d-proton or game patch regression.

Main cause was the Epic EOS overlay (EOSOverlayRenderer), which Heroic installed and enabled in the prefix on 2026-10-19, right after the last good
session. With VKD3D_QUEUE_PROFILE the DIRECT queue submit thread was 100% busy, ~56% of it in shared fence waits (often 20-35 ms each). Disabling the
overlay: ~18 -> ~51 fps.

The remaining stutter when turning the camera was MangoHud: its thread used ~27% of a core (still running with the HUD hidden) on a CPU-limited system.
With MangoHud off, GPU utilization is ~85% on average (was 30-84%).

The 1.2.11 update was coincidental.