SteamOS linux shipping build crashes on SteamDeck native
What Type of Bug are you experiencing?
Rendering (Graphics / Niagara)
Steps to Reproduce
Build project for linux shipping or development 5.8 , install on SteamDeck. Project crashes with missing implementation for store_deref aco_select_nir_intrinsics.cpp:5107
I have exact same problem. No-code-change update from 5.7, which worked fine to 5.8; automation build, both development and shipping games produce the same error. The error happens right at the startup, at that time, there is only basic SlateUI showing the loading screen. The loading screen does not get drawn at all.
I tried looking for the exact line in CreateComputePipeline; which for me is the symbol FVulkanPipelineStateCacheManager::CreateComputePipeline(FComputePipelineStateInitializer const&) + 1318, but that simply is the call to VulkanRHI::vkCreateComputePipelines, so no further details.
Yeah, if this is what I think, the shader compiler would generate illegal SPIRV. I think this is what you’re hitting. We didn’t notice until late, some drivers handle it / others don’t. RADV doesn’t (it’s not their bug though!). It only shows up in certain shaders which you don’t usually hit using the editor. If you run a package build however, precaching will eventually try to create those pipelines and crash.
Disabling precaching might save you, but result in more hitches on the first run obviously.
…or…
The fix to the shader compiler has been submitted in UE6/Main. If you take the Engine/Binaries/ThirdParty/ShaderConductor folder from UE6/Main and copy it into your 5.8.1 build it should fix the issue (you need to recreate your package and make sure those shaders get rebuilt). Those binaries are pulled when you run the setup script if I’m not mistaken (not just through syncing). If anyone tries this, let me know how it goes!
…or…
Changing SHADER_PRINT_USE_GLOBAL_RESOURCE to always be 1 in ShaderPrint.ush might also solve the issue. You can do that by adding “|| VULKAN_PROFILE” to the #if above.
So, I also tried 5.8.3 with the ShaderConductor fix. This done by
clone the UE source, checkout ue6-main branch.
run ./Setup.sh to download the dependencies
stash away the ShaderConductor directory
Then I checked out the 5.8 branch, and copied in the stashed away ShaderConductor from the ue6-main branch. After that, I made a native engine build of my game; it all worked as usual, producing the final Linux package.
However, when running it, it still failed, now with unaligned memory access at address 0x0000000000000000 (SIMD vectors?).
… and it turns out I have missed something; what helped me in the end is to make bump the version UUID in Engine/Shaders/Public/ShaderVersion.ush; in my case, I just incremented it by one to
// was ...9C8320D
#pragma message("UESHADERMETADATA_VERSION DDA9A115-612F-4F64-8206-999DB9C8320E")
After that, a native engine re-build of the game and voila! All works.
Nice it worked for you. But in my opinion cherry-picking from UE6-main to build UE5.8.3 and custom Engine building is not a fix. I rely on official docker images. When official linux image ships correct application then I’d be happy and treat this issue as solved.