First PIE for editor session always seems to be compiling shaders/etc.

I have noticed since perhaps 5.1+ onwards, this is the process in the editor:

  • Open UE editor
  • Hit play
  • Note shaders compiling/etc.
  • Subsequent PIE sessions don’t compile shaders again

If I close the editor, the process repeats.

The first PIE instance always seems to be compiling shaders.

I remember in older UE versions (perhaps pre 5.2) that this wouldn’t be the case.

It’s almost as if the DDC is always stale in the first instance?

Is this a new editor setting or something?

[Attachment Removed]

Hello,

The time to enter PIE for the very first time in Editor is expected to be slow with a cold DDC and no PSOs, however, after re-launching the Editor, though entering PIE for the first time can take a long time for large projects as files are loaded into memory, it should be much faster than that very first PIE where the DDC and PSOs were compiled and written to disk.

I’m firing up City Sample to verify this hasn’t regressed, but you should be able to verify this in your setup by timing entering PIE the first time in the Editor with -noshaderddc and -clearPSODriverCache, and then restart the Editor and time first PIE without those arguments.

Note that Nvidia changed the naming of their driver-cached PSOs after UE 5.5, meaning that -clearPSODriverCache command line won’t work in UE versions older than 5.6 without an engine fix.

To fix it, cherry-pick this commit (CL 40200336 for Perforce users). It’s a tiny change. If you’re using the PSOCacheBuster plugin, it already implements the fix.

I remember in older UE versions (perhaps pre 5.2) that this wouldn’t be the case.

I haven’t found anything conclusive about what might cause this - we did make a number of PSO precaching changes in 5.3+, but it’s unclear how that would make this worse because that is disabled in the Editor.

There are things that force the shaders to compile like modifying ShaderVersion.ush or not using the DDC (-ddc=cold, -noshaderddc, -nomaterialshaderddc, -DDC-ForceMemoryCache). If you are using a shared DDC you can force using a local DDC temporarily using -ddc=NoShared to see if something might be wrong with the DDC where it thinks the shaders don’t match.

[Attachment Removed]