From 0628d5c6036727c340a8388fc2f16df5a7256388 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Fri, 11 Sep 2026 13:54:47 -0700 Subject: [PATCH] Fixed Vulkan validation error when creating a swapchain on Android --- src/render/vulkan/SDL_render_vulkan.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/render/vulkan/SDL_render_vulkan.c b/src/render/vulkan/SDL_render_vulkan.c index aaa655b739..b14ec1fada 100644 --- a/src/render/vulkan/SDL_render_vulkan.c +++ b/src/render/vulkan/SDL_render_vulkan.c @@ -2505,6 +2505,24 @@ static VkResult VULKAN_CreateSwapChain(SDL_Renderer *renderer, int w, int h) swapchainCreateInfo.presentMode = presentMode; swapchainCreateInfo.clipped = VK_TRUE; swapchainCreateInfo.oldSwapchain = rendererData->swapchain; + if (!(renderer->window->flags & SDL_WINDOW_TRANSPARENT)) { + // Set the first supported swap chain composite mode + // Android doesn't support VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR, for example + const VkCompositeAlphaFlagBitsKHR compositeAlphaFlags[] = { + VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR, + VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR + }; + for (uint32_t i = 0; i < SDL_arraysize(compositeAlphaFlags); ++i) { + if (rendererData->surfaceCapabilities.supportedCompositeAlpha & compositeAlphaFlags[i]) { + swapchainCreateInfo.compositeAlpha = compositeAlphaFlags[i]; + break; + } + } + if (!swapchainCreateInfo.compositeAlpha) { + // Fall back to VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR, unsupported but better than nothing + swapchainCreateInfo.compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR; + } + } result = vkCreateSwapchainKHR(rendererData->device, &swapchainCreateInfo, NULL, &rendererData->swapchain); if (swapchainCreateInfo.oldSwapchain != VK_NULL_HANDLE) {