Developer Notes

Fixed in CL#38608255 (f8d59b)

Description

The game crashes because of a nullptr SkinnedMeshComponent in  FSkeletalMeshObjectGPUSkin::GetUsedVertexFactoryData when r.PSOPrecache.Resources is enabled and a skeletal mesh is loaded due to a new check() added to FSkeletalMeshObjectGPUSkin::GetUsedVertexFactoryData in CL 36036396.  USkinnedAsset::PostLoad() calls GetVertexFactoryTypesPerMaterialIndex() with a nullptr SkinnedMeshComponent . This crash didn't occur in 5.4.

Steps to Reproduce
  1. Add r.PSOPrecache.Resources=1 in DefaultEngine.ini
  2. Run the game
  3. Load a level with skeletal meshes

Expected
Game doesn't crash

Actual
Game crashes at newly added check() in FSkeletalMeshObjectGPUSkin::GetUsedVertexFactoryData added in CL 36036396

Callstack

Game.exe!FSkeletalMeshObjectGPUSkin::GetUsedVertexFactoryData(FSkeletalMeshRenderData * SkelMeshRenderData, int LODIndex, USkinnedMeshComponent * SkinnedMeshComponent, FSkelMeshRenderSection & RenderSection, ERHIFeatureLevel::Type InFeatureLevel, bool bHasMorphTargets, TArray<FPSOPrecacheVertexFactoryData,TSizedInlineAllocator<2,32,TSizedDefaultAllocator<32>>> & VertexFactoryDataList) Line 2017 C++
Game.exe!USkinnedAsset::GetVertexFactoryTypesPerMaterialIndex(USkinnedMeshComponent * SkinnedMeshComponent, int MinLODIndex, bool bCPUSkin, ERHIFeatureLevel::Type FeatureLevel) Line 191 C++
Game.exe!USkinnedAsset::PostLoad() Line 156 C++
Game.exe!USkeletalMesh::PostLoad() Line 3725 C++
Game.exe!UObject::ConditionalPostLoad() Line 1315 C++
Game.exe!FAsyncPackage2::Event_DeferredPostLoadExportBundle(FAsyncLoadingThreadState2 & ThreadState, FAsyncPackage2 * Package, int InExportBundleIndex) Line 7893 C++
Game.exe!FEventLoadNode2::Execute(FAsyncLoadingThreadState2 & ThreadState) Line 4960 C++
Game.exe!FAsyncLoadEventQueue2::PopAndExecute(FAsyncLoadingThreadState2 & ThreadState) Line 5114 C++
Game.exe!FAsyncLoadingThread2::ProcessLoadedPackagesFromGameThread(FAsyncLoadingThreadState2 & ThreadState, bool & bDidSomething, TArrayView<int const ,int> FlushRequestIDs) Line 8175 C++
Game.exe!FAsyncLoadingThread2::TickAsyncLoadingFromGameThread(FAsyncLoadingThreadState2 & ThreadState, bool bUseTimeLimit, bool bUseFullTimeLimit, double TimeLimit, TArrayView<int const ,int> FlushRequestIDs, bool & bDidSomething) Line 8434 C++
Game.exe!FAsyncLoadingThread2::FlushLoading(TArrayView<int const ,int> RequestIDs) Line 9917 C++
Game.exe!FlushAsyncLoading(TArrayView<int const ,int> RequestIds) Line 329 C++
Game.exe!FlushAsyncLoading(int RequestId) Line 296 C++
Game.exe!UEngine::LoadMap(FWorldContext & WorldContext, FURL URL, UPendingNetGame * Pending, FString & Error) Line 15528 C++
Game.exe!UEngine::Browse(FWorldContext & WorldContext, FURL URL, FString & Error) Line 15154 C++
Game.exe!UGameInstance::StartGameInstance() Line 684 C++
Game.exe!UHopperGameInstance::StartGameInstance() Line 1420 C++
Game.exe!UGameEngine::Start() Line 1224 C++
Game.exe!FEngineLoop::Init() Line 4907 C++
[Inline Frame] Game.exe!EngineInit() Line 59 C++
Game.exe!GuardedMain(const wchar_t * CmdLine) Line 172 C++
Game.exe!LaunchWindowsStartup(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * __formal, int nCmdShow, const wchar_t * CmdLine) Line 266 C++
Game.exe!WinMain(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * pCmdLine, int nCmdShow) Line 318 C++
[Inline Frame] Game.exe!invoke_main() Line 102 C++
Game.exe!__scrt_common_main_seh() Line 288 C++
kernel32.dll!BaseThreadInitThunk() Unknown
ntdll.dll!RtlUserThreadStart() Unknown

Have Comments or More Details?

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

0
Login to Vote

Duplicate
ComponentUE - Rendering Architecture
Affects Versions5.5.15.5
Target Fix5.5.2
CreatedDec 3, 2024
ResolvedDec 4, 2024
UpdatedDec 16, 2024
View Jira Issue