Disclaimer: written by a software engineer, not a game developer.
Build: 1.60.1.70205. Host: CachyOS, RTX 4080 SUPER, NVIDIA 615.71.09, GE-Proton11-7 via Lutris, D3D12. Game’s own shaders, no overrides. The 69913 GPU-hang workaround from the previous post is no longer needed: the hang is fixed in 70205 on both D3D11 and D3D12.
The finding
Shadows have no indirect light (no ambient, no bounce, solid black) when Secondary Lighting is Good or High at the moment the character enters the world. Direct sunlight and cast shadows are correct; only the fill inside shade is missing.
Setting Secondary Lighting to Fair in-world and then back to High restores the fill immediately. A character that logged in dark is fixed by that one cycle. Same shaders, same driver, same settings; the only difference is whether the level was active during world load or applied afterwards.
The in-world High is genuinely running, not a cosmetic menu state: in the same torch-lit tunnel, with the frame rate capped, GPU load measured by nvidia-smi steps from 43 % / 145 W at Fair to 62 % / 196 W at High, and back to 43 % / 145 W at Fair.
Workaround
Log in with Secondary Lighting at Fair, then set Good or High once in the world. Or cycle High → Fair → High after a dark login. The addon from the “Secondary Lighting Good causes GPU hang” thread automates this with a short delay after login, which is the same fix from the other side.
What this points to
An initialization-order defect in the client: the Secondary Lighting pass is started at world load before the data it reads exists. On 69913 that same ordering made the tracer loop forever (the GPU hang from the previous post); on 70205 the loop is guarded and the pass simply produces nothing. Shader readouts taken in the dark state showed the pass running against an empty sky cube and its surface results never being consumed; re-running it after the world has loaded gives correct output. The fix on Blizzard’s side is to initialize those inputs before the pass first runs, or run it again once they exist.
Ruled out (each by direct test, 70205, dark-at-login state)
Driver, NVAPI on or off, the second GPU (iGPU hidden from enumeration), NVIDIA-only shader extensions (raw access chains disabled), D3D11 vs D3D12, HDR output on or off, compositor HDR, all shader and pipeline caches, restored known-good config, Wine export hiding, driver-workaround cvars, and every shader-level patch of the lighting pass. None changed the dark-at-login state; the in-world toggle is the only thing that does.
Also noted, not the cause: the client reports rt:None on NVIDIA under Wine while vkd3d-proton offers DXR 1.1/1.2, and exposes a compat cvar for every feature flag except RAY_TRACING. An RX 9070 on the same Proton build reports no issue at any level.
Repro
graphicsLightMode "2" in Config.wtf, log in, stand in shade: black. Set Fair, then High, in-world: lit. Any Linux/Proton NVIDIA setup.
Related threads
- Previous post in this series: 69913 GPU hang, loop bound, shader override
- Blizzard bug report: “[Forever Beta 1.60.1.69913][Linux/DX12] Secondary Lighting Good causes GPU hang loading Stormwind; Fair works” (the delay addon)
- NVIDIA forum: “615.71.09 / RTX 5090: WoW DX12 freezes with ray tracing enabled. Xid 109”