aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTony Barbour <tony@LunarG.com>2017-03-14 08:55:46 -0600
committerTony-LunarG <tony@lunarg.com>2017-03-15 09:22:20 -0700
commit820b55b4a3d7d74c4b771e35a1c762204b1871fb (patch)
treebf9a32317c20ff62f530614554bda5215e04d03c
parent4eb29d617524ec02b894aad0fa6be06906c4878e (diff)
downloadusermoji-820b55b4a3d7d74c4b771e35a1c762204b1871fb.tar.xz
demos: Select alpha based on capabilities in cube
Change-Id: I44e3654ee8d2f1b127284ae5f66ca75cb9ff54a7
-rw-r--r--demos/cube.c35
1 files 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;