diff options
| author | lizzie <lizzie@eden-emu.dev> | 2026-06-02 21:57:23 +0200 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2026-06-02 21:57:23 +0200 |
| commit | 5027aecf772988279bf112442b9070a0ae554c2a (patch) | |
| tree | 4e206a4bcd0d879d8ab85607e7bef4556a6bdabf /src/video_core/vulkan_common/vulkan_wrapper.cpp | |
| parent | f39e985434c6349ffe2661ab674485dd8e0d8646 (diff) | |
[vk] handle mali/adreno5xx driver bug returning VK_INCOMPLETE on graphics pipeline creation (#3383)
Signed-off-by: lizzie <lizzie@eden-emu.dev>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3383
Reviewed-by: crueter <crueter@eden-emu.dev>
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Diffstat (limited to 'src/video_core/vulkan_common/vulkan_wrapper.cpp')
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_wrapper.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/video_core/vulkan_common/vulkan_wrapper.cpp b/src/video_core/vulkan_common/vulkan_wrapper.cpp index f59ac7d6bc..3d082c8360 100644 --- a/src/video_core/vulkan_common/vulkan_wrapper.cpp +++ b/src/video_core/vulkan_common/vulkan_wrapper.cpp @@ -725,10 +725,15 @@ PipelineLayout Device::CreatePipelineLayout(const VkPipelineLayoutCreateInfo& ci return PipelineLayout(object, handle, *dld); } -Pipeline Device::CreateGraphicsPipeline(const VkGraphicsPipelineCreateInfo& ci, - VkPipelineCache cache) const { - VkPipeline object; - Check(dld->vkCreateGraphicsPipelines(handle, cache, 1, &ci, nullptr, &object)); +Pipeline Device::CreateGraphicsPipeline(const VkGraphicsPipelineCreateInfo& ci, VkPipelineCache cache) const { + VkPipeline object = VK_NULL_HANDLE; + auto const result = dld->vkCreateGraphicsPipelines(handle, cache, 1, &ci, nullptr, &object); + // Adreno 5xx drivers do not properly return when a graphics pipeline fails to be created + // Some (unkown) Mali drivers also do not properly return + // This result code is out of spec, but should be handled as "kinda working" + if (result == VK_INCOMPLETE) + return Pipeline(object, handle, *dld); + Check(result); return Pipeline(object, handle, *dld); } |
