UE5.5.4 Nanite ClusterPageData Misaligned Address Error

This question was created in reference to: [UE5.5.4 Invalid data in Nanite [Content removed]

Hello Unreal Engine Support Team!

We have got Misaligned Address Error again. It has to be old issue that we though was fixed completely, but it still there just now it is 1/500 GPU crashes has such error. Unfortunately, I don’t have symbolized GPU crash to share with you, but I want to check if you have any fixes around area of Nanite::ShadeBinning that we may cherry-pick. Given that it’s so rare now I doubt that we can do some CVar experiments to find a source of the issue.

Breadcrumbs:

(ID: 0x801366a0) [ Active] Frame 4917

(ID: 0x801369da) [ Active] FRDGBuilder::Execute

(ID: 0x80136779) [ Active] Scene

(ID: 0x801368e6) [ Active] BasePass

(ID: 0x801368e8) [ Active] NaniteBasePass

(ID: 0x801368e9) [ Active] Nanite::BasePass

(ID: 0x801368ea) [ Active] Nanite::ShadeBinning

(ID: 0x801368ed) [Not Started] EditorPrimitives

(ID: 0x80136a04) [Not Started] ParallelDraw (Index: 0, Num: 1)

(ID: 0x801368ee) [Not Started] RenderView PostBasePass SceneDepthTexture

(ID: 0x801368ef) [Not Started] HZB

Active Shaders:

1 total.

[0]:

Type = Compute

Hash = 814e0f65f4249e26

Binary Hash = 814e0f65f4249e26

Shader Name = MA_Surface_Universal_29a041730e4c96cc/Low/FNaniteVertexFactory/TBasePassCSFNoLightMapPolicy/0:/Engine/Private/BasePassPixelShader.usf|MainCS

[Attachment Removed]

It does not immediately ring a bell. Even if the last breadcrumb is in ShadeBinning, it does look like the actual shader is a basepass material shader.

Do you have a dump that points to anywhere more specific in the shader?

[Attachment Removed]

Unfortunately I don’t have symbols for this shader. I will try to make them and update this post post if it works. I was mostly checking if there more fixes in UE available.

[Attachment Removed]

Shader with symbols uploaded in private thread. Message could be found by this topic name UE5.5.4 Nanite ClusterPageData Misaligned Address Error.

[Content removed]

[Attachment Removed]

That shader is a basepass shader and it does clearly have the fix for trying to decode a pixel that is out of bounds:

if(all(PixelPos >= NaniteView.ViewRect.xy) && all(PixelPos < NaniteView.ViewRect.zw))
{
    PackedPixel = NaniteShading_VisBuffer64[PixelPos];
}

But the crash itself seems very similar, so I’m wondering if there is something that is causing an invalid pixel (and thus cluster reference) to be generated somehow.

It seems unlikely that it would be a problem with the cooked cluster data itself as that should fail more deterministically whenever the data for a specific mesh is rendered.

[Attachment Removed]