From 820b55b4a3d7d74c4b771e35a1c762204b1871fb Mon Sep 17 00:00:00 2001 From: Tony Barbour Date: Tue, 14 Mar 2017 08:55:46 -0600 Subject: demos: Select alpha based on capabilities in cube Change-Id: I44e3654ee8d2f1b127284ae5f66ca75cb9ff54a7 --- demos/cube.c | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/demos/cube.c b/demos/cube.c index 2d87073d..8985c971 100644 --- a/demos/cube.c +++ b/demos/cube.c @@ -950,6 +950,21 @@ static void demo_prepare_buffers(struct demo *demo) { preTransform = surfCapabilities.currentTransform; } + // Find a supported composite alpha mode - one of these is guaranteed to be set + VkCompositeAlphaFlagBitsKHR compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR; + VkCompositeAlphaFlagBitsKHR compositeAlphaFlags[4] = { + VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR, + VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR, + VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR, + VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR, + }; + for (uint32_t i = 0; i < sizeof(compositeAlphaFlags); i++) { + if (surfCapabilities.supportedCompositeAlpha & compositeAlphaFlags[i]) { + compositeAlpha = compositeAlphaFlags[i]; + break; + } + } + VkSwapchainCreateInfoKHR swapchain_ci = { .sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR, .pNext = NULL, @@ -963,7 +978,7 @@ static void demo_prepare_buffers(struct demo *demo) { }, .imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, .preTransform = preTransform, - .compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR, + .compositeAlpha = compositeAlpha, .imageArrayLayers = 1, .imageSharingMode = VK_SHARING_MODE_EXCLUSIVE, .queueFamilyIndexCount = 0, @@ -2622,6 +2637,22 @@ static VkResult demo_create_display_surface(struct demo *demo) { free(plane_props); + VkDisplayPlaneCapabilitiesKHR planeCaps; + vkGetDisplayPlaneCapabilitiesKHR(demo->gpu, mode_props.displayMode, plane_index, &planeCaps); + // Find a supported alpha mode + VkCompositeAlphaFlagBitsKHR alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR; + VkCompositeAlphaFlagBitsKHR alphaModes[4] = { + VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR, + VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR, + VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR, + VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR, + }; + for (uint32_t i = 0; i < sizeof(alphaModes); i++) { + if (planeCaps.supportedAlpha & alphaModes[i]) { + alphaMode = alphaModes[i]; + break; + } + } image_extent.width = mode_props.parameters.visibleRegion.width; image_extent.height = mode_props.parameters.visibleRegion.height; @@ -2632,7 +2663,7 @@ static VkResult demo_create_display_surface(struct demo *demo) { create_info.planeIndex = plane_index; create_info.planeStackIndex = plane_props[plane_index].currentStackIndex; create_info.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; - create_info.alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR; + create_info.alphaMode = alphaMode; create_info.globalAlpha = 1.0f; create_info.imageExtent = image_extent; -- cgit v1.2.3