PSO recording is working and I’m getting multiple .upipelinecache files under Saved/CollectedPSOs. After doing a full Windows cook/package with NeedsShaderStableKeys=True, r.PSOPrecaching=1 and r.ShaderPipelineCache.Enabled=1, I still don’t get any .shk files in Metadata/PipelineCaches for the Windows target. Instead the cook only produces shader libraries .ushaderbytecode under Saved/Shaders/…, for example ShaderCode–PCD3D_SM6-PCD3D_SM6.ushaderbytecode and the corresponding .assetinfo.json files in ShaderLibrarySource.
If I try to follow the docs and run
UnrealEditor-Cmd.exe -run=ShaderPipelineCacheTools expand, using my .upipelinecache files and then passing the .ushaderbytecode file where the docs expect *.shk, the commandlet just logs:
LogShaderPipelineCacheTools: Warning: No shk found or they were all empty. Nothing to do.
So it looks like the tool is still explicitly looking for .shk on PC DX12, even though newer cooks only seem to emit .ushaderbytecode plus .assetinfo.json.
I’d really appreciate if someone from Epic could clarify what the intended replacement for .shk is in 5.4/5.5 on Windows, and whether there’s an updated way to call ShaderPipelineCacheTools that uses .ushaderbytecode (and maybe .assetinfo.json), or if this is actually a regression and .shk should still be generated when following the current “Manually Creating Bundled PSO Caches” documentation.
Just wanted to share what finally worked on my side after a lot of trial and error, in case it helps anyone else stuck with missing .shk files.
First I tested on UE 5.4: both my existing project and a fresh new project. Neither of them produced any .shk files when cooking for Windows.
Then I tried the same on UE 5.6 (existing project + fresh new project). Both did produce .shk correctly, so it wasn’t a general “my machine can’t generate .shk” problem.
To rule out my local 5.4 install, I asked a colleague to run the same test on 5.4. On their machine, .shk were generated only for a fresh 5.4 project, not for my existing one.
At that point I reinstalled UE 5.4 (in my case I had to run the Epic Games Launcher as administrator to actually get the reinstall to go through).
After reinstall, fresh new 5.4 projects immediately started producing .shk when cooking.
That narrowed the issue down to my existing project config, so I began cherry‑picking parts of DefaultEngine.ini from a fresh project and removing lines from the old one, then recooking each time.
I eventually found two separate problems in the old DefaultEngine.ini that broke PSO/stable‑key handling:
Inline ; comments placed on the same line as values (for example after NeedsShaderStableKeys=true) so the value string was no longer a valid bool.
[DevOptions.Shaders]
NeedsShaderStableKeys=True ; REQUIRED for PSO recording and bundling
A pair of navigation config sections that, when both present in that file, prevented anything from being applied:
Removing or fixing those made the PSO settings start working again.
In other words: the PSO lines were fine, but some unrelated config further up the file was corrupting the ini so the engine never actually honored NeedsShaderStableKeys.
After cleaning up the ini (no inline comments on PSO‑related lines, and removing the problematic navigation entries), cooking finally produced the expected folder and .shk files here, auto‑created by the engine: (Project)/Saved/Cooked/(Platform)/(ProjectName)/Metadata/PipelineCaches
So if anyone else are not able to see the .shk files, it might be worth checking for malformed or conflicting entries in DefaultEngine.ini (or maybe the engine config is corrupted and a reinstall could help)