Vulkan crashes on startup in Shipping Build

Hi,

we are using UE 4.26.1 and our users expericence various crashes when starting the shipping build on Linux:

libvulkan_radeon.so!UnknownFunction(0x29b372)
libvulkan_radeon.so!UnknownFunction(0x12e4bc)
libvulkan_radeon.so!UnknownFunction(0x126acf)
libvulkan_radeon.so!UnknownFunction(0x128d3b)
libvulkan_radeon.so!UnknownFunction(0x12c02b)
libVkLayer_steam_fossilize.so!UnknownFunction(0x2be67)
Game-Linux-Shipping!FVulkanPipelineStateCacheManager::CreateComputePipelineFromShader(TVulkanBaseShader<FRHIComputeShader, (EShaderFrequency)5, (VkShaderStageFlagBits)32>*) [Engine/Source/Runtime/VulkanRHI/Private/VulkanPipeline.cpp:1971]
Game-Linux-Shipping!FVulkanPipelineStateCacheManager::GetOrCreateComputePipeline(TVulkanBaseShader<FRHIComputeShader, (EShaderFrequency)5, (VkShaderStageFlagBits)32>*) [Engine/Source/Runtime/VulkanRHI/Private/VulkanPipeline.cpp:1919]
Game-Linux-Shipping!FVulkanCommandListContext::RHISetComputeShader(FRHIComputeShader*) [Engine/Source/Runtime/VulkanRHI/Private/VulkanCommands.cpp:199]
Game-Linux-Shipping!FRHICommandListExecutor::ExecuteInner_DoExecute(FRHICommandListBase&) [Engine/Source/Runtime/RHI/Private/RHICommandList.cpp:373]
Game-Linux-Shipping!FExecuteRHIThreadTask::DoTask(ENamedThreads::Type, TRefCountPtr<FGraphEvent> const&) [Engine/Source/Runtime/RHI/Private/RHICommandList.cpp:428]
Game-Linux-Shipping!TGraphTask<FExecuteRHIThreadTask>::ExecuteTask(TArray<FBaseGraphTask*, TSizedDefaultAllocator<32> >&, ENamedThreads::Type) [Engine/Source/Runtime/Core/Public/Async/TaskGraphInterfaces.h:886]
Game-Linux-Shipping!FNamedTaskThread::ProcessTasksNamedThread(int, bool) [Engine/Source/Runtime/Core/Private/Async/TaskGraph.cpp:709]
Game-Linux-Shipping!FNamedTaskThread::ProcessTasksUntilQuit(int) [Engine/Source/Runtime/Core/Private/Async/TaskGraph.cpp:600]
Game-Linux-Shipping!FRHIThread::Run() [Engine/Source/Runtime/RenderCore/Private/RenderingThread.cpp:319]
Game-Linux-Shipping!FRunnableThreadPThread::Run() [Engine/Source/Runtime/Core/Private/HAL/PThreadRunnableThread.cpp:25]
Game-Linux-Shipping!FRunnableThreadPThread::_ThreadProc(void*) [Engine/Source/Runtime/Core/Private/HAL/PThreadRunnableThread.h:185]
libpthread.so.0!UnknownFunction(0x9608)
libc.so.6!clone(+0x42)

and two more which seem to be related to each other:

Game-Linux-Shipping!FGenericPlatformMisc::RaiseException(unsigned int) [Engine/Source/Runtime/Core/Private/GenericPlatform/GenericPlatformMisc.cpp:472]
Game-Linux-Shipping!FOutputDevice::LogfImpl(char16_t const*, ...) [Engine/Source/Runtime/Core/Private/Misc/OutputDevice.cpp:61]
Game-Linux-Shipping!VulkanRHI::VerifyVulkanResult(VkResult, char const*, char const*, unsigned int) [Engine/Source/Runtime/VulkanRHI/Private/VulkanUtil.cpp:802]
Game-Linux-Shipping!FVulkanQueue::Submit(FVulkanCmdBuffer*, unsigned int, VkSemaphore_T**) [Engine/Source/Runtime/VulkanRHI/Private/VulkanQueue.cpp:71]
Game-Linux-Shipping!FVulkanCommandBufferManager::SubmitUploadCmdBuffer(unsigned int, VkSemaphore_T**) [Engine/Source/Runtime/VulkanRHI/Private/VulkanCommandBuffer.cpp:547]
Game-Linux-Shipping!FVulkanViewport::CreateSwapchain(FVulkanSwapChainRecreateInfo*) [Engine/Source/Runtime/VulkanRHI/Private/VulkanViewport.cpp:668]
Game-Linux-Shipping!TGraphTask<TEnqueueUniqueRenderCommandType<FVulkanViewport::Tick(float)::UpdateVsyncName, FVulkanViewport::Tick(float)::$_6> >::ExecuteTask(TArray<FBaseGraphTask*, TSizedDefaultAllocator<32> >&, ENamedThreads::Type) [Engine/Source/Runtime/Core/Public/Async/TaskGraphInterfaces.h:886]
Game-Linux-Shipping!FNamedTaskThread::ProcessTasksNamedThread(int, bool) [Engine/Source/Runtime/Core/Private/Async/TaskGraph.cpp:709]
Game-Linux-Shipping!FNamedTaskThread::ProcessTasksUntilQuit(int) [Engine/Source/Runtime/Core/Private/Async/TaskGraph.cpp:600]
Game-Linux-Shipping!FRenderingThread::Run() [Engine/Source/Runtime/RenderCore/Private/RenderingThread.cpp:526]
Game-Linux-Shipping!FRunnableThreadPThread::Run() [Engine/Source/Runtime/Core/Private/HAL/PThreadRunnableThread.cpp:25]
Game-Linux-Shipping!FRunnableThreadPThread::_ThreadProc(void*) [Engine/Source/Runtime/Core/Private/HAL/PThreadRunnableThread.h:185]
libpthread.so.0!UnknownFunction(0x9431)
libc.so.6!clone(+0x42)

Game-Linux-Shipping!FGenericPlatformMisc::RaiseException(unsigned int) [Engine/Source/Runtime/Core/Private/GenericPlatform/GenericPlatformMisc.cpp:472]
Game-Linux-Shipping!FOutputDevice::LogfImpl(char16_t const*, ...) [Engine/Source/Runtime/Core/Private/Misc/OutputDevice.cpp:61]
Game-Linux-Shipping!VulkanRHI::VerifyVulkanResult(VkResult, char const*, char const*, unsigned int) [Engine/Source/Runtime/VulkanRHI/Private/VulkanUtil.cpp:802]
Game-Linux-Shipping!FVulkanDevice::PrepareForDestroy() [Engine/Source/Runtime/VulkanRHI/Private/VulkanDevice.cpp:1062]
Game-Linux-Shipping!FVulkanViewport::DestroySwapchain(FVulkanSwapChainRecreateInfo*) [Engine/Source/Runtime/VulkanRHI/Private/VulkanViewport.cpp:711]
Game-Linux-Shipping!TGraphTask<TEnqueueUniqueRenderCommandType<FVulkanViewport::Tick(float)::UpdateVsyncName, FVulkanViewport::Tick(float)::$_6> >::ExecuteTask(TArray<FBaseGraphTask*, TSizedDefaultAllocator<32> >&, ENamedThreads::Type) [Engine/Source/Runtime/Core/Public/Async/TaskGraphInterfaces.h:886]
Game-Linux-Shipping!FNamedTaskThread::ProcessTasksNamedThread(int, bool) [Engine/Source/Runtime/Core/Private/Async/TaskGraph.cpp:709]
Game-Linux-Shipping!FNamedTaskThread::ProcessTasksUntilQuit(int) [Engine/Source/Runtime/Core/Private/Async/TaskGraph.cpp:600]
Game-Linux-Shipping!FRenderingThread::Run() [Engine/Source/Runtime/RenderCore/Private/RenderingThread.cpp:526]
Game-Linux-Shipping!FRunnableThreadPThread::Run() [Engine/Source/Runtime/Core/Private/HAL/PThreadRunnableThread.cpp:25]
Game-Linux-Shipping!FRunnableThreadPThread::_ThreadProc(void*) [Engine/Source/Runtime/Core/Private/HAL/PThreadRunnableThread.h:185]
libpthread.so.0!UnknownFunction(0x93e8)
libc.so.6!clone(+0x42)

Is there anything we can do about it?

Hi,

Unfortunately all of the above are driver issues (both a crash and a failure to execute a cmd buffer). While this does not mean that the engine is not at fault for doing something that trips up the driver, it is impossible to pinpoint the problem from the very callstacks. First thing I recommend doing is running your game with Vulkan validation layers and addressing warnings/issues it produces (if any). If your game is running without the validation warnings, the driver is much more likely to be at fault for this. Running the newest drivers is generally recommended, and especially so on Linux. If the drivers are already newest, and since the driver in one of the above callstacks is open source, you may ask the users to produce a symbolicated callstack and based on it try to figure out what may be wrong (or solve it together with the driver developers).

Hope this helps!
Arciel