Description

Crash occurs in FGPUBaseSkinVertexFactory::FShaderDataType::UpdateBoneData() on RenderThread2 at the following line:

check(NumBones <= MaxGPUSkinBones);

The problem seems to be a race condition on the return value from BoneMap.Num() which is assigned to NumBones.

If is replaced with a wait loop such as

while(NumBones > MaxGPUSkinBones)

{ FPlatformProcess::Sleep(0.5f); NumBones = BoneMap.Num(); }

The value will eventually become correct and proceed as expected, demonstrating that BoneMap.Num() is may not be valid at the start of the function, but will become valid at some point.

Steps to Reproduce

The repro steps are unclear, but addressing the thread safety of the BoneMap should be sufficient to resolve the issue.
This event repros for the original reporter "50% of the time on PSVR" [but not on PC].

Have Comments or More Details?

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

0
Login to Vote

Fixed
ComponentUE - Rendering
Affects Versions4.11.2
Target Fix4.14
Fix Commit3046845
Main Commit3091931
Release Commit3159180
CreatedAug 9, 2016
ResolvedAug 11, 2016
UpdatedMay 11, 2018