Crash Issue During Deferred Decal Rendering on Android

Crash during decal rendering on Android when entering a map or loading a world partition

A crash occurs during decal rendering on Android at the moment of map entry or world partition loading. Upon analysis, the issue seems to originate inside the AddDeferredDecalPass() function, specifically during the execution of FRDGPass* Pass = GraphBuilder.AddPass().

At this point, the SortedDecals list contains invalid array values. This list is of type TConstArrayView<const FVisibleDecal*>, and it is suspected that a reallocation occurs during the loading process, leading to corrupted data.

As a result, an incorrect FDecalBlendState is calculated, which appears to be the cause of the crash.

I would like to know if there are any existing reports related to this issue, and whether there is a known solution.

재현 방법

Hi Kim,

Thank you for bringing this issue to our attention. Are you in a position to provide a repro project that we could further debug on our end?

Best regards.

I’ll try creating a sample project, but I’m not sure if it will be reproduced accurately. I’ll prepare it and let you know

Thank you Kim, very much appreciated. We’ll be on the lookout for a response when you are able to do so. Please also reach out if setting up a repro case proves problematic.

Best regards.

I tried to reproduce the issue by creating similar situations in various ways, but unfortunately, I failed to reproduce it. It seems that preparing a sample project won’t be possible. For your information, we have currently modified the engine internally to work around the issue.

Thank you.

Hi Kim,

Are you able to share your local engine workaround? This may provide hints as to the original cause of the issue.

Thanks!

Hi Jacoby,

After recently updating the engine to version 5.6.1, an issue occurred. I focused on the differences between versions 5.5.4 and 5.6.1, and reverted the behavior to match how it worked in 5.5.4. Since then, the issue has not reappeared. Specifically, I fixed the problem by maintaining the object’s lifetime using the GraphBuilder.AllocObject() function as in version 5.5.4.

Thanks!

Hi Kim,

If you can share more exactly which allocation(s) you’ve redirected to GraphBuilder.AllocObject() that would be most helpful.

Best regards.