protonscr

Marvel Rivals (UE 5.3.2, D3D12): reproducible Xid 13 compute-dispatch fault on RTX 5090 / Blackwell, followed exactly 60 s later by UE's GameThread→RenderThread timeout assert

vkd3dopen
HansKristian-Work/vkd3d-proton#3305 · opened 2026-09-20 by Gunther-Schulz · updated 2026-09-22 · 3 comments · github
GGunther-Schulz 2026-09-20 github

Please describe your issue

Marvel Rivals hangs and then dies with Unreal's render-thread watchdog assert. The hang is preceded by ~1 second by an NVIDIA Xid 13 graphics exception naming the game's own GameThread, and the crash lands exactly 60 seconds after the Xid — which is GTimeoutForBlockOnRenderFence.

This happened twice in three days of play. Both occurrences have an identical signature and there is no other Xid in the log across ~14 hours of captured play.

Unlike #3180 (Space Marine 2, Ampere, Class 0000c797, a 3D class), this fault is on a compute class on Blackwell, and the kernel reports the specific failing scheduler checks rather than only the class id.

Kernel message (both occurrences, verbatim):

NVRM: Xid (PCI:0000:01:00): 13, Graphics Exception: SKEDCHECK06_REGISTER_COUNT failed
NVRM: Xid (PCI:0000:01:00): 13, Graphics Exception: SKEDCHECK16_CTA_THREAD_DIMENSION_ZERO failed
NVRM: Xid (PCI:0000:01:00): 13, Graphics Exception: ESR 0x407020=0x802000 0x407028=0x100 0x40702c=0x3ab712 0x407030=0x0
NVRM: Xid (PCI:0000:01:00): 13, pid=1657731, name=GameThread, Graphics Exception: channel 0x00000027, Class 0000cec0, Offset 00000000, Data 00000000

SKEDCHECK16_CTA_THREAD_DIMENSION_ZERO suggests a compute dispatch reaching the GPU with a zero thread-block dimension. On D3D12 a Dispatch() with a zero thread-group count is legal and is a no-op.

Unreal's assert, from the crash dump (CrashContext.runtime-xml):

Fatal error: [File:E:\workspace\S10.0_release\UnrealEngine\Engine\Source\Runtime\RenderCore\Private\RenderingThread.cpp]
[Line: 1387] GameThread timed out waiting for RenderThread after 60.00 secs

Timeline — both occurrences

Xid 13 UE crash dump written gap
2026-09-17 20:12:26 20:13:29 63 s
2026-09-20 02:01:36 02:02:40 64 s

On the second occurrence I had a bpftrace tracer and a per-thread sampler running. They independently corroborate the sequence:

  • 02:01:36 — Xid 13 (kernel log)
  • 02:01:37 — frame output stops; the tracer records GameThread, RHIThread and RenderThread all entering ntsync waits. It never records the freeze ending.
  • through the hang — 1–3 of the process's 241 threads are runnable (sampled live at 5 Hz). Every other thread is asleep.
  • GPU — utilisation drops 91% → 1%, power 334 W → 36 W, P0 → P8, measured across the hang itself (265 samples at 5 Hz). The GPU is starved, not hung: nothing is submitted after the channel fault.
  • 02:02:40 — UE's 60 s watchdog asserts, crash handler runs.

So the causal chain looks like: the channel takes a graphics exception → the submitted work never completes → RHIThread/RenderThread never finish → GameThread's render fence never signals → Unreal kills the process at 60 s.

What I checked and ruled out

  • Thermal / power throttling — no. The GPU is idle at ~36 W during this hang. clocks_event_reasons shows no thermal or power-cap reason (the Reliability bit is set in 73% of all recorded play on this card, so it is this card's normal state, not a signal).
  • Memory pressure — no. 61 GB RAM, 39 GB free at crash time (from the crash context).
  • Wayland — no. Also reproduces on X11.
  • Machine-wide stall — no. The game's own network traffic continues throughout the hang (median 111 pkt/s received over 116 samples, its UDP sockets still open); other processes run normally.
  • Bus lock / split lock traps — present on this system (15,172 over ~9 h, 10,665 of them from GameThread) but zero during the hang or any freeze window, so anti-correlated.
  • Overclocking — none applied. Stock clocks.

What I am NOT claiming

  • I have not shown this is the same problem as #3180. Same Xid number, but that report is an Ampere 3D class (0000c797) and this is a Blackwell compute class (0000cec0).
  • This machine also gets frequent sub-5-second freezes (~7/h) with the same thread-blocking pattern but no Xid at all. Those are almost certainly a separate issue and I am not reporting them here.
  • I have not tried to isolate which shader or dispatch produces the fault, and I do not have a minimal reproducer. It is not reliably reproducible on demand — roughly once per multi-hour session.

Software information

  • Game: Marvel Rivals (Steam appid 2767030), Unreal Engine 5.3.2-3870120+++depot_marvel+S10.0_release
  • Renderer: Direct3D 12, feature level SM6 (per UE crash context: RHI.RHIName: D3D12, RHI.FeatureLevel: SM6)
  • Settings: default. DLSS frame generation is off (bDlssFrameGeneration=False); DlssPreset=1 is set.
  • Launch options: SteamDeck=0 DXVK_NVAPI_VKREFLEX=1 PROTON_ENABLE_WAYLAND=1 PROTON_VKD3D_LOWLATENCY=1 mangohud %command%
    (also reproduces without Wayland)

System information

  • GPU: NVIDIA GeForce RTX 5090 (Blackwell), device id 2B85
  • Driver: NVIDIA 615.71.09 (Open Kernel Module)
  • CPU: AMD Ryzen 9 9950X3D
  • RAM: 64 GB
  • Kernel: 7.2.5-1-cachyos
  • Proton: proton-cachyos-11.0-20260703-slr
  • D3D12 layer actually loaded: vkd3d-low-latency initial-release-1-g565d695 — a third-party
    fork (netborg-afps/vkd3d-low-latency) based on
    vkd3d-proton v3.0.1, which PROTON_VKD3D_LOWLATENCY=1 substitutes for the bundled
    vkd3d-proton. Verified by sha256: the d3d12core.dll in the game's prefix is byte-identical to
    the fork's copy, not to the bundled vkd3d-proton (vkd3d-1.1-5438-g3dfc6f0), which is NOT loaded.
    Corrected after the initial post — I first reported the bundled version by mistake.
    I have not yet reproduced with stock vkd3d-proton; doing that is the obvious next step and I will
    report back. If the fault does not occur on stock vkd3d-proton, this belongs in the fork's tracker
    and I will move it.
  • Distribution: CachyOS

I still have the full crash dump (CrashContext.runtime-xml, UEMinidump.dmp) and the kernel log for both occurrences, plus the frametime, per-thread and GPU-state captures around the second one. Happy to attach or run anything specific — including with VKD3D_CONFIG options or a newer vkd3d-proton if that would help narrow it.

GGunther-Schulz 2026-09-20 github

Correction to the original post, made ~30 minutes after filing.

I originally listed the D3D12 layer as the vkd3d-proton bundled with proton-cachyos (vkd3d-1.1-5438-g3dfc6f0). That is wrong: my launch options include PROTON_VKD3D_LOWLATENCY=1, and in proton-cachyos that flag substitutes a different library entirely rather than toggling a setting —

use_vkd3d_lowlatency = "vkd3dlowlatency" in compat_config and isdir(lib_dir + "wine/vkd3d-low-latency")
vkd3d_proton_path = "vkd3d-low-latency/" if use_vkd3d_lowlatency else "vkd3d-proton/"

So the layer that produced the Xid is netborg-afps/vkd3d-low-latency initial-release-1-g565d695, a fork based on vkd3d-proton v3.0.1. Confirmed by hash rather than inference — the d3d12core.dll in the game prefix matches the fork byte for byte (sha256 ceecf088…, 5939200 bytes) and does not match the bundled vkd3d-proton (30952dae…, 5894144 bytes).

The issue body is corrected. Everything else in the report — the kernel Xid text, the 60 s correlation across both occurrences, the GPU/thread measurements — is unchanged and was taken on that configuration.

Whether this reproduces on stock vkd3d-proton is not yet established. I will test without PROTON_VKD3D_LOWLATENCY=1 and report back; if the fault does not occur there, this belongs in the fork's tracker and I will move it. Apologies for the noise — flagging it now rather than leaving a wrong version string in a bug report.

Ddoitsujin maintainer 2026-09-20 github

Not gonna read through all this AI vomit, but how about actually testing an actual vkd3d-proton build rather than a third-party fork first?

EEckoa 2026-09-22 github

did you even try testing downgrading the driver from the VERY broken 615 before posting this torrent of AI word vomit?

if they cant be bothered to write the issue....should anyone be bothered to read or triage it?