vulkan: pick alpha composite flags based on available values
This commit is contained in:
		| @@ -65,6 +65,18 @@ VkExtent2D ChooseSwapExtent(const VkSurfaceCapabilitiesKHR& capabilities, u32 wi | |||||||
|     return extent; |     return extent; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | VkCompositeAlphaFlagBitsKHR ChooseAlphaFlags(const VkSurfaceCapabilitiesKHR& capabilities) { | ||||||
|  |     if (capabilities.supportedCompositeAlpha & VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR) { | ||||||
|  |         return VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR; | ||||||
|  |     } else if (capabilities.supportedCompositeAlpha & VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR) { | ||||||
|  |         return VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR; | ||||||
|  |     } else { | ||||||
|  |         LOG_ERROR(Render_Vulkan, "Unknown composite alpha flags value {:#x}", | ||||||
|  |                   capabilities.supportedCompositeAlpha); | ||||||
|  |         return VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
| } // Anonymous namespace | } // Anonymous namespace | ||||||
|  |  | ||||||
| Swapchain::Swapchain(VkSurfaceKHR surface_, const Device& device_, Scheduler& scheduler_, | Swapchain::Swapchain(VkSurfaceKHR surface_, const Device& device_, Scheduler& scheduler_, | ||||||
| @@ -155,6 +167,7 @@ void Swapchain::CreateSwapchain(const VkSurfaceCapabilitiesKHR& capabilities, bo | |||||||
|     const auto formats{physical_device.GetSurfaceFormatsKHR(surface)}; |     const auto formats{physical_device.GetSurfaceFormatsKHR(surface)}; | ||||||
|     const auto present_modes{physical_device.GetSurfacePresentModesKHR(surface)}; |     const auto present_modes{physical_device.GetSurfacePresentModesKHR(surface)}; | ||||||
|  |  | ||||||
|  |     const VkCompositeAlphaFlagBitsKHR alpha_flags{ChooseAlphaFlags(capabilities)}; | ||||||
|     const VkSurfaceFormatKHR surface_format{ChooseSwapSurfaceFormat(formats)}; |     const VkSurfaceFormatKHR surface_format{ChooseSwapSurfaceFormat(formats)}; | ||||||
|     present_mode = ChooseSwapPresentMode(present_modes); |     present_mode = ChooseSwapPresentMode(present_modes); | ||||||
|  |  | ||||||
| @@ -185,7 +198,7 @@ void Swapchain::CreateSwapchain(const VkSurfaceCapabilitiesKHR& capabilities, bo | |||||||
|         .queueFamilyIndexCount = 0, |         .queueFamilyIndexCount = 0, | ||||||
|         .pQueueFamilyIndices = nullptr, |         .pQueueFamilyIndices = nullptr, | ||||||
|         .preTransform = capabilities.currentTransform, |         .preTransform = capabilities.currentTransform, | ||||||
|         .compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR, |         .compositeAlpha = alpha_flags, | ||||||
|         .presentMode = present_mode, |         .presentMode = present_mode, | ||||||
|         .clipped = VK_FALSE, |         .clipped = VK_FALSE, | ||||||
|         .oldSwapchain = nullptr, |         .oldSwapchain = nullptr, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user