Crash EXCEPTION_ACCESS_VIOLATION in FD3D12DescriptorCache::BuildUAVTable()

Hello,

Our QA have identified an engine crash during the gameplay of one of our levels (packaged Windows build).

The repro steps have not been identified yet, but I was wondering someone could provide a fix/workaround from the callstack.

I tried to explore the Github, but didn’t find any relevant changelist yet.

LoginId:c375515c46a70cdf0ba8d4860803bb55
EpicAccountId:44a8852637324f0cb9f5dc288bd5936f
 
Unhandled Exception: EXCEPTION_ACCESS_VIOLATION writing address 0x0000000000000000
 
Brimstone!FD3D12DescriptorCache::BuildUAVTable() [D:\Horde\P4\DefaultIntegrationIncr\Sync\TA\Engine\Source\Runtime\D3D12RHI\Private\D3D12DescriptorCache.cpp:239]
Brimstone!FD3D12StateCache::ApplyResources() [D:\Horde\P4\DefaultIntegrationIncr\Sync\TA\Engine\Source\Runtime\D3D12RHI\Private\D3D12StateCache.cpp:752]
Brimstone!FD3D12StateCache::ApplyState() [D:\Horde\P4\DefaultIntegrationIncr\Sync\TA\Engine\Source\Runtime\D3D12RHI\Private\D3D12StateCache.cpp:579]
Brimstone!FD3D12CommandContext::RHIDispatchIndirectComputeShader() [D:\Horde\P4\DefaultIntegrationIncr\Sync\TA\Engine\Source\Runtime\D3D12RHI\Private\D3D12Commands.cpp:158]
Brimstone!FRHICommand<FRHICommandDispatchIndirectComputeShader,FRHICommandDispatchIndirectComputeShaderString2038>::ExecuteAndDestruct() [D:\Horde\P4\DefaultIntegrationIncr\Sync\TA\Engine\Source\Runtime\RHI\Public\RHICommandList.h:1621]
Brimstone!FRHICommandListBase::Execute() [D:\Horde\P4\DefaultIntegrationIncr\Sync\TA\Engine\Source\Runtime\RHI\Private\RHICommandList.cpp:524]
Brimstone!FRHICommandListExecutor::FTranslateState::Translate() [D:\Horde\P4\DefaultIntegrationIncr\Sync\TA\Engine\Source\Runtime\RHI\Private\RHICommandList.cpp:1081]
Brimstone!`FRHICommandListExecutor::FSubmitState::Dispatch'::`10'::<lambda_1>::operator()() [D:\Horde\P4\DefaultIntegrationIncr\Sync\TA\Engine\Source\Runtime\RHI\Private\RHICommandList.cpp:1029]
Brimstone!FRHICommandListExecutor::FTaskPipe::Execute() [D:\Horde\P4\DefaultIntegrationIncr\Sync\TA\Engine\Source\Runtime\RHI\Private\RHICommandList.cpp:725]
Brimstone!TGraphTask<TFunctionGraphTaskImpl<void __cdecl(enum ENamedThreads::Type,TRefCountPtr<FBaseGraphTask> const &),0> >::ExecuteTask() [D:\Horde\P4\DefaultIntegrationIncr\Sync\TA\Engine\Source\Runtime\Core\Public\Async\TaskGraphInterfaces.h:707]
Brimstone!UE::Tasks::Private::FTaskBase::TryExecuteTask() [D:\Horde\P4\DefaultIntegrationIncr\Sync\TA\Engine\Source\Runtime\Core\Public\Tasks\TaskPrivate.h:528]
Brimstone!LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48>::TTaskDelegateImpl<`LowLevelTasks::FTask::Init<`UE::Tasks::Private::FTaskBase::Init'::`2'::<lambda_1> >'::`13'::<lambda_1>,0>::CallAndMove() [D:\Horde\P4\DefaultIntegrationIncr\Sync\TA\Engine\Source\Runtime\Core\Public\Async\Fundamental\TaskDelegate.h:171]
Brimstone!LowLevelTasks::FTask::ExecuteTask() [D:\Horde\P4\DefaultIntegrationIncr\Sync\TA\Engine\Source\Runtime\Core\Public\Async\Fundamental\Task.h:627]
Brimstone!LowLevelTasks::FScheduler::ExecuteTask() [D:\Horde\P4\DefaultIntegrationIncr\Sync\TA\Engine\Source\Runtime\Core\Private\Async\Fundamental\Scheduler.cpp:364]
Brimstone!LowLevelTasks::FScheduler::WorkerLoop() [D:\Horde\P4\DefaultIntegrationIncr\Sync\TA\Engine\Source\Runtime\Core\Private\Async\Fundamental\Scheduler.cpp:724]
Brimstone!`LowLevelTasks::FScheduler::CreateWorker'::`2'::<lambda_1>::operator()() [D:\Horde\P4\DefaultIntegrationIncr\Sync\TA\Engine\Source\Runtime\Core\Private\Async\Fundamental\Scheduler.cpp:188]
Brimstone!FThreadImpl::Run() [D:\Horde\P4\DefaultIntegrationIncr\Sync\TA\Engine\Source\Runtime\Core\Private\HAL\Thread.cpp:69]
Brimstone!FRunnableThreadWin::Run() [D:\Horde\P4\DefaultIntegrationIncr\Sync\TA\Engine\Source\Runtime\Core\Private\Windows\WindowsRunnableThread.cpp:159]

Thank you very much,

Thomas

Steps to Reproduce
It’s a random crash that appears in a specific level of your game, in a packaged Windows build.

OS: Windows 11 (25H2) [10.0.26200.7462] ()

CPU: Intel(R) Core™ i7-14700K

GPU: NVIDIA GeForce RTX 4070 Ti SUPER

Renderer: D3D12RHI

Engine version: 5.6.1 (custom, but not heavily)

Also this is present in the logs.

[2026.01.28-11.05.57:936][ 85]LogRHI: Error: Breadcrumbs 'Parallel'
 - PostPass
 - Nanite::DrawGeometry
 - RenderVirtualShadowMaps(Nanite)
 - ShadowDepths
 - Scene
 - RenderGraphExecute - /ViewFamilies
 - SceneRender - ViewFamilies
 - Frame 149083

Hi,

after searching the public issue tracker and UDN, this type of crash (coming from inside FD3D12DescriptorCache::BuildUAVTable()) has not been reported before. The crash logs indicate that the engine is trying to dispatch a compute pass (which are heavily used by Nanite) and, while building the UAV descriptor table for it, ends up with a UAV descriptor pointer which is null and which it is trying to write to, resulting in a GPU crash. Given that this crash happens randomly and some time after launching the game, it’s possible that the GPU ran out of memory.

If you are able to find repro steps, can you run the game with -d3ddebug enabled in a development build? That should provide a more detailed overview about which UAV is responsible for the crash. Please see the following links for more details:

https://dev.epicgames.com/community/learning/tutorials/k8pB/unreal-engine-performance-profiling-and-debugging#dealingwithgpucrashes

https://dev.epicgames.com/documentation/en-us/unreal-engine/dealing-with-a-gpu-crash-when-using-unreal-engine

It would also be interesting to inspect the Nvidia Aftermath gpudmp file (if there is one), as that may provide additional info on which shader caused the crash.

Thanks,

Sam