Description

During async loading from an AsyncLoading thread, DecalComponent attempts to precache PSOs which can trigger a checkf in StrongObjectPtr.h which are only allowed to be created on a game thread.

 

 

Steps to Reproduce

No confirmed repro steps exist, but most likely this requires loading a level with numerous decals in a game client with PSO Precaching and async loading enabled.  It may also require spawning decals at runtime.

Callstack
[Inline Frame] Game3.exe!UEStrongObjectPtr_Private::TInternalReferenceCollector<UEStrongObjectPtr_Private::FInternalReferenceCollectorReferencerNameProvider>::{ctor}(const UObject *) Line 27 C++
[Inline Frame] Game3.exe!MakeUnique(UMaterialInterface * &) Line 788 C++
[Inline Frame] Game3.exe!TStrongObjectPtr<UMaterialInterface,UEStrongObjectPtr_Private::FInternalReferenceCollectorReferencerNameProvider>::Reset(UMaterialInterface * InNewObject) Line 165 C++
[Inline Frame] Game3.exe!TStrongObjectPtr<UMaterialInterface,UEStrongObjectPtr_Private::FInternalReferenceCollectorReferencerNameProvider>::{ctor}(UMaterialInterface *) Line 89 C++
> Game3.exe!FMaterialPSORequestManager::PrecachePSOs(const FMaterialPSOPrecacheParams & Params, EPSOPrecachePriority Priority, TArray<TRefCountPtr<FGraphEvent>,TSizedInlineAllocator<4,32,TSizedDefaultAllocator<32>>> & OutGraphEvents) Line 246 C++
Game3.exe!FMaterial::CollectPSOs(ERHIFeatureLevel::Type InFeatureLevel, const TArray<FPSOPrecacheVertexFactoryData,TSizedInlineAllocator<2,32,TSizedDefaultAllocator<32>>> & VertexFactoryDataList, const FPSOPrecacheParams & PreCacheParams, EPSOPrecachePriority Priority, TArray<unsigned int,TSizedDefaultAllocator<32>> & OutMaterialPSORequestIDs) Line 3155 C++
Game3.exe!UMaterial::PrecachePSOs(const TArray<FPSOPrecacheVertexFactoryData,TSizedInlineAllocator<2,32,TSizedDefaultAllocator<32>>> & VertexFactoryDataList, const FPSOPrecacheParams & InPreCacheParams, EPSOPrecachePriority Priority, TArray<unsigned int,TSizedDefaultAllocator<32>> & OutMaterialPSORequestIDs) Line 2676 C++
Game3.exe!UMaterialInstance::PrecachePSOs(const TArray<FPSOPrecacheVertexFactoryData,TSizedInlineAllocator<2,32,TSizedDefaultAllocator<32>>> & VertexFactoryDataList, const FPSOPrecacheParams & InPreCacheParams, EPSOPrecachePriority Priority, TArray<unsigned int,TSizedDefaultAllocator<32>> & OutMaterialPSORequestIDs) Line 2534 C++
Game3.exe!UDecalComponent::PrecachePSOs() Line 335 C++
Game3.exe!UObject::ConditionalPostLoad() Line 1309 C++
Game3.exe!FAsyncPackage::PostLoadObjects() Line 6953 C++
[Inline Frame] Game3.exe!FCpuProfilerTrace::FEventScope::{ctor}(unsigned int & InChannel, const char *) Line 139 C++
Game3.exe!FAsyncPackage::TickAsyncPackage(bool InbUseTimeLimit, bool InbUseFullTimeLimit, float & InOutTimeLimit) Line 6071 C++
Game3.exe!FAsyncLoadingThread::ProcessAsyncLoading(int & OutPackagesProcessed, bool bUseTimeLimit, bool bUseFullTimeLimit, float TimeLimit, FFlushRequest & FlushRequest) Line 4422 C++
Game3.exe!FAsyncLoadingThread::TickAsyncThread(bool bUseTimeLimit, bool bUseFullTimeLimit, double TimeLimit, bool & bDidSomething, FFlushRequest & FlushRequest) Line 5300 C++
Game3.exe!FAsyncLoadingThread::Run() Line 5225 C++
Game3.exe!FRunnableThreadWin::Run() Line 149 C++
Game3.exe!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-222366 in the post.

0
Login to Vote

Fixed
ComponentUE - Rendering Architecture - Shaders
Affects Versions5.4.3
Target Fix5.5
Fix Commit33370596
Main Commit36563342
CreatedAug 21, 2024
ResolvedSep 24, 2024
UpdatedOct 22, 2024
View Jira Issue