Description

NiagaraSystem with EEiagaraGpuComputeTickStage::PostInitViews should not have bSupportsParallelGDME because of possible multi-threaded contention, but FNiagaraSystemInstanceController::GetGpuComputeTickStage returns PreInitViews when creating SystemGpuComputeProxy is delayed, thus enabling GDME.
This causes a very unrepeatable crash.
The instability of GetGpuComputeTickStage can be easily checked by adding the following logs :

		// Any GPU simulations that tick in PostInitView can not run parallel in GDME as GDME runs async over the top of this call
		//-OPT: Would it be better to run these simulations in PreRender which is after we join from parallel GDME?
		const ENiagaraGpuComputeTickStage::Type GpuComputeTickStage = SystemInstanceController->GetGpuComputeTickStage();
		if (GpuComputeTickStage == ENiagaraGpuComputeTickStage::PostInitViews )
		{
			bSupportsParallelGDME = false;
		}
		UE_LOG(LogTemp, Log, TEXT("%p tickstage is :%d"), InComponent, (int32)GpuComputeTickStage );
Steps to Reproduce
  1. Download the reproproject from additional info URL field
  2. Open the project
  3. Repeat following steps (repro rate is extremely low)
    1. Repro procedure 1
      1. Start PIE
      2. Click the viewport
      3. Stop PIE
      4. Press keyboard 1 key to move away (move to bookmarked location)
    2. Repro procedure 2
      1. Open NS_RibbonError
      2. Close the NiagaraEditor

Result:

Crashes the editor with log :

Assertion failed: IsValid() [File:D:\dev\UE5.5\Engine\Source\Runtime\Core\Public\Templates\SharedPointer.h] [Line: 1082] 

See also the callstack, you see that the crash occurs in the GDME thread.

Callstack

[Inline Frame] UnrealEditor-Niagara.dll!TSharedPtr<FRWBuffer,1>::operator->() Line 1082 C++
UnrealEditor-Niagara.dll!FNiagaraRendererRibbons::SetupMeshBatchAndCollectorResourceForView(FRHICommandListBase & RHICmdList, const FNiagaraIndexGenerationInput & GeneratedData, FNiagaraDynamicDataRibbon * DynamicDataRibbon, const FNiagaraDataBuffer * SourceParticleData, const FSceneView * View, const FSceneViewFamily & ViewFamily, const FNiagaraSceneProxy * SceneProxy, const TSharedPtr<FNiagaraRibbonRenderingFrameResources,1> & RenderingResources, FNiagaraRibbonRenderingFrameViewResources * RenderingViewResources, FMeshBatch & OutMeshBatch, bool bShouldUseGPUInitIndices) Line 2162 C++
UnrealEditor-Niagara.dll!FNiagaraRendererRibbons::GetDynamicMeshElements(const TArray<FSceneView const *,TSizedDefaultAllocator<32>> & Views, const FSceneViewFamily & ViewFamily, unsigned int VisibilityMap, FMeshElementCollector & Collector, const FNiagaraSceneProxy * SceneProxy) Line 948 C++
UnrealEditor-Niagara.dll!FNiagaraSystemRenderData::GetDynamicMeshElements(const TArray<FSceneView const *,TSizedDefaultAllocator<32>> & Views, const FSceneViewFamily & ViewFamily, unsigned int VisibilityMap, FMeshElementCollector & Collector, const FNiagaraSceneProxy & SceneProxy) Line 230 C++
UnrealEditor-Niagara.dll!FNiagaraSceneProxy::GetDynamicMeshElements(const TArray<FSceneView const *,TSizedDefaultAllocator<32>> & Views, const FSceneViewFamily & ViewFamily, unsigned int VisibilityMap, FMeshElementCollector & Collector) Line 522 C++
UnrealEditor-Renderer.dll!FDynamicMeshElementContext::GatherDynamicMeshElementsForPrimitive(FPrimitiveSceneInfo * Primitive, unsigned char ViewMask) Line 4001 C++
UnrealEditor-Renderer.dll!FDynamicMeshElementContext::LaunchAsyncTask::__l2::<lambda_1>::operator()() Line 3961 C++
UnrealEditor-Renderer.dll!UE::Tasks::Private::FTaskBase::TryExecuteTask() Line 504 C++
[Inline Frame] UnrealEditor-Renderer.dll!UE::Tasks::Private::FTaskBase::Init::__l2::<lambda_1>::operator()() Line 185 C++
[Inline Frame] UnrealEditor-Renderer.dll!LowLevelTasks::FTask::Init::__l13::<lambda_1>::operator()(const bool) Line 499 C++
[Inline Frame] UnrealEditor-Renderer.dll!Invoke(LowLevelTasks::FTask::Init::__l13::<lambda_1> &) Line 47 C++
[Inline Frame] UnrealEditor-Renderer.dll!LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48>::TTaskDelegateImpl<`LowLevelTasks::FTask::Init<`UE::Tasks::Private::FTaskBase::Init'::`2'::<lambda_1>>'::`13'::<lambda_1>,0>::Call(void *) Line 162 C++
UnrealEditor-Renderer.dll!LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48>::TTaskDelegateImpl<`LowLevelTasks::FTask::Init<`UE::Tasks::Private::FTaskBase::Init'::`2'::<lambda_1>>'::`13'::<lambda_1>,0>::CallAndMove(LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48> & Destination, void * InlineData, unsigned int DestInlineSize, bool <Params_0>) Line 171 C++
[Inline Frame] UnrealEditor-Core.dll!LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48>::CallAndMove(LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48> &) Line 308 C++
UnrealEditor-Core.dll!LowLevelTasks::FTask::ExecuteTask() Line 627 C++
UnrealEditor-Core.dll!LowLevelTasks::FScheduler::ExecuteTask(LowLevelTasks::FTask * InTask) Line 245 C++
[Inline Frame] UnrealEditor-Core.dll!LowLevelTasks::FScheduler::TryExecuteTaskFrom(LowLevelTasks::Private::FWaitEvent *) Line 457 C++
UnrealEditor-Core.dll!LowLevelTasks::FScheduler::WorkerLoop(LowLevelTasks::Private::FWaitEvent * WorkerEvent, LowLevelTasks::Private::TLocalQueueRegistry<1024,1024>::TLocalQueue * WorkerLocalQueue, unsigned int WaitCycles, bool bPermitBackgroundWork) Line 514 C++
[Inline Frame] UnrealEditor-Core.dll!LowLevelTasks::FScheduler::WorkerMain(LowLevelTasks::Private::FWaitEvent * WorkerEvent, LowLevelTasks::Private::TLocalQueueRegistry<1024,1024>::TLocalQueue * WorkerLocalQueue, unsigned int WaitCycles, bool bPermitBackgroundWork) Line 571 C++
UnrealEditor-Core.dll!LowLevelTasks::FScheduler::CreateWorker::__l2::<lambda>() Line 75 C++
[Inline Frame] UnrealEditor-Core.dll!UE::Core::Private::Function::TFunctionRefBase<UE::Core::Private::Function::TFunctionStorage<1>,void __cdecl(void)>::operator()() Line 470 C++
UnrealEditor-Core.dll!FThreadImpl::Run() Line 69 C++
UnrealEditor-Core.dll!FRunnableThreadWin::Run() Line 159 C++
UnrealEditor-Core.dll!FRunnableThreadWin::GuardedRun() Line 71 C++

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-253238 in the post.

1
Login to Vote

Fixed
ComponentUE - Niagara
Affects Versions5.5
Target Fix5.6
Fix Commit40656287
CreatedMar 1, 2025
ResolvedMar 11, 2025
UpdatedMar 14, 2025
View Jira Issue