Lumen HWRT GPU page fault: persistent SBT / RayTracingSceneMetadata reference s a released index buffer

Summary

I’m using “Lumen Hardware Raytracing” and disabled “Generate Mesh Distance Fields” and had a lot of GPU crashes in the editor and in standalone game/shipping build. This all of information I gathered from AI analysis over the last days:

Lumen hardware ray tracing intermittently causes a GPU page fault (DXGI_ERROR_DEVICE_HUNG, Aftermath status PageFault).
The faulting shader reads the index buffer of the hit geometry through its binding record:
RayTracingSceneMetadata for inline tracing, or hit group local root data for RayGen/ClosestHit.
That index buffer has already been released, between 11 frames and 3.6 seconds earlier.

The traversal itself produces a valid hit, so the TLAS/BLAS are intact. Only the per-geometry binding record is stale.
The stale reference lives much longer than async compute latency, which points to cached or persistent binding data.
The issue does not reproduce with r.RayTracing.PersistentSBT=0.
We therefore suspect that a persistent SBT record is not invalidated when a static mesh’s render data / index buffer is replaced or released.

Environment

  • Engine: 5.8.3-58210709+++UE5+Release-5.8 (Launcher binary build)
  • RHI: D3D12, SM6, bindless
  • GPU: NVIDIA GeForce RTX 4090 (AD102)
  • Driver: 617.14 (also seen with 616.92 and 610.88)
  • OS: Windows 11 25H2, build 26200
  • CPU / RAM: AMD Ryzen 9 7950X, 64 GB
  • Occurs in: editor viewport, PIE (-game), packaged Shipping

Relevant settings

r.RayTracing=True
r.Lumen.HardwareRayTracing=True
r.DynamicGlobalIlluminationMethod=1
r.ReflectionMethod=1
r.GenerateMeshDistanceFields=False
r.Shadow.Virtual.Enable=1
r.RayTracing.ResidentGeometryMemoryPoolSizeInMB=1024

Workarounds tested

Setting Result
r.Lumen.HardwareRayTracing.Inline=0 Still crashes
r.Lumen.HardwareRayTracing.Inline=1 Still crashes
r.RayTracing.Geometry.SkeletalMeshes=0 + r.RayTracing.Geometry.SplineMeshes=0 Still crashes
r.RayTracing.PersistentSBT=0 No crash so far, but a significant render thread cost and much higher latency in dense areas
r.RayTracing.PersistentSBT.ForceAlwaysDirty=1 Similar cost

What Type of Bug are you experiencing?

Rendering (Graphics / Niagara)

Steps to Reproduce

  1. Use a large World Partition map with Lumen hardware ray tracing enabled (settings above).
  2. Populate it with many procedurally generated, non-Nanite UStaticMesh objects with 16-bit indices.
    • Each mesh is a new UStaticMesh created with BuildFromMeshDescriptions.
    • Each mesh is embedded in its actor’s package and assigned to a UStaticMeshComponent.
  3. Editor: Repeatedly regenerate these meshes. Assign a new UStaticMesh to the existing components and let the old mesh be garbage collected. The GPU crashes after tens of regenerations.
  4. PIE / Standalone: Move through the map so that World Partition cells stream in. Many embedded meshes finish async compilation (LogStaticMesh: Waiting on static mesh ... being ready before playing). The GPU crashes within a few minutes.

Expected Result

Static mesh render data can be replaced or released without crashing. Ray tracing binding records (persistent SBT / RayTracingSceneMetadata) never reference a released index or vertex buffer. They are updated or invalidated before the old buffers are freed.

Observed Result

The GPU device is removed with an MMU page fault in a Lumen HWRT shader. The shader reads the hit geometry’s index buffer, which was already released.

Crash 1: Editor, RayGen path (Inline=0)

  • Occurred a few seconds after 3 static meshes were replaced (new UStaticMesh, old one garbage collected).
  • Aftermath: Error_DMA_PageFault, read, AddressTranslationError, VA 0x2491D50000.
  • Resource tracking: no live resource or heap at that VA. All resources previously placed there were destroyed 3.64 s before the dump.
  • Active shader: LumenHardwareRayTracingMaterialCHS (ClosestHit, hash 57ADF5F61BE024024D669464B44A539B).
  • DRED: compute queue, faulting op ExecuteIndirect after the last completed ResourceBarrier.
  • Breadcrumbs (AsyncCompute): LumenSceneLighting > DirectLighting (Offscreen shadows / Lights) > Radiosity.

Crash 2: PIE, inline path (Inline=1, skeletal and spline RT geometry disabled)

  • Aftermath: PageFault, read, VA 0x1E23747000.
  • UE resource tracking: Found 0 active heaps. The only released resource at that VA is Shadow.Virtual.VisibleInstances, freed at frame 8679, 11 frames before the crash (frame 8690). The VA was reused after the original buffer was freed.
  • Active shader: LumenRadiosityHardwareRayTracingCS (compute, hash DB61EC179B5DAC7A3AA30DDBD96B0B8C).
  • DRED: compute queue, faulting op ExecuteIndirect after the last completed ResourceBarrier.
  • Breadcrumbs (AsyncCompute): LumenSceneLighting > DirectLighting > Radiosity.

Attachments

Crash1_Editor_RayGenCHS/
  Aftermath_decoded.txt                       decoded Aftermath dump (raw .nv-gpudmp no longer available)
  57adf5f61be024024d669464b44a539b.pdb/.dxil  shader symbols for the faulting CHS

Crash2_PIE_InlineCS/
  D3D12.0.2026.10.07-14.29.16.nv-gpudmp       raw Aftermath GPU dump
  533923EAA119A20A-FABB075585459AE0.nvdbg      Aftermath shader debug info
  db61ec179b5dac7a3aa30ddbd96b0b8c.pdb/.dxil   shader symbols for LumenRadiosityHardwareRayTracingCS
  Aftermath_decoded.txt                        decoded dump incl. source call stack
  GPUCrash_excerpt.log                         breadcrumbs, Aftermath, DRED, page-fault resource tracking
  EfasimCpp_2.log                              full log of the crashing session
  cvars_at_startup.txt                         RT/Lumen cvars at startup
  CrashContext.runtime-xml, UEMinidump.dmp, Breadcrumbs_RHIThread_0.txt

Affects Versions

5.8

Platform(s)

Windows

For crash reports, include your callstack

GPU callstacks, decoded with Nsight nv-aftermath-format and the shader PDBs.

Crash 2: inline path (LumenRadiosityHardwareRayTracingCS, MMU fault, read)

Frame 0: LoadIndices16Bit                              <- faulting load
Frame 1: LoadTriangleBaseAttributes
Frame 2: LoadInlineRayTracingTriangleAttributes         (RayTracing/TraceRayInlineD3D12.ush)
           RayTracingSceneMetadata[RecordIndex].BindlessHitGroupSystemIndexBuffer
Frame 3: TraceLumenMinimalRay
Frame 4: TraceSurfaceCacheRay
Frame 5: LumenRadiosityHardwareRayTracing_INTERNAL
Frame 6: LumenRadiosityHardwareRayTracingCS

Crash 1: RayGen path (LumenHardwareRayTracingMaterialCHS, MMU fault, read, ray_tracing_01 @ 0x4b0)

LumenHardwareRayTracingMaterialCHS                     (Lumen/LumenHardwareRayTracingMaterials.usf)
  -> ComputeWorldNormal(PrimitiveIndex(), GetClusterID())
     -> LoadTriangleBaseAttributes(HitGroupSystemIndexBuffer, ..., HitGroupSystemVertexBuffer, ...)   <- faulting load

CPU callstack: not applicable. The crash is detected by the RHI on device removal (D3D12Util.TerminateOnGPUCrash). The full minidump is attached.

Additional Notes