aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorlizzie <lizzie@eden-emu.dev>2026-06-02 21:57:23 +0200
committercrueter <crueter@eden-emu.dev>2026-06-02 21:57:23 +0200
commit5027aecf772988279bf112442b9070a0ae554c2a (patch)
tree4e206a4bcd0d879d8ab85607e7bef4556a6bdabf /src
parentf39e985434c6349ffe2661ab674485dd8e0d8646 (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')
-rw-r--r--src/video_core/vulkan_common/vulkan_wrapper.cpp13
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);
}