|
@@ -2505,6 +2505,24 @@ static VkResult VULKAN_CreateSwapChain(SDL_Renderer *renderer, int w, int h)
|
|
|
swapchainCreateInfo.presentMode = presentMode;
|
|
swapchainCreateInfo.presentMode = presentMode;
|
|
|
swapchainCreateInfo.clipped = VK_TRUE;
|
|
swapchainCreateInfo.clipped = VK_TRUE;
|
|
|
swapchainCreateInfo.oldSwapchain = rendererData->swapchain;
|
|
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);
|
|
result = vkCreateSwapchainKHR(rendererData->device, &swapchainCreateInfo, NULL, &rendererData->swapchain);
|
|
|
|
|
|
|
|
if (swapchainCreateInfo.oldSwapchain != VK_NULL_HANDLE) {
|
|
if (swapchainCreateInfo.oldSwapchain != VK_NULL_HANDLE) {
|