diff options
author | Erik Faye-Lund <erik.faye-lund@collabora.com> | 2023-04-05 11:41:09 +0200 |
---|---|---|
committer | Erik Faye-Lund <erik.faye-lund@collabora.com> | 2023-04-17 08:56:35 +0200 |
commit | d262491cfab4b53bea9ec9ec8a56b209831e8059 (patch) | |
tree | 25af22b8ddf140c2a605d667dd588cb57ef706c2 | |
parent | 5661deace1d3b58e73d70ad16ca09eeec50f267b (diff) | |
download | mesa-demos-d262491cfab4b53bea9ec9ec8a56b209831e8059.tar.gz |
vkgears: properly pick color-format
Before this, we just assumed our preferred color-format was available.
Now we instead look for it, and fall back to the first format if not
found.
We can probably do better in the future, though. Maybe we should prefer
format with more bits instead of having a single preferred format?
Acked-by: Hoe Hao Cheng <haochengho12907@gmail.com>
-rw-r--r-- | src/vulkan/vkgears.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/vulkan/vkgears.c b/src/vulkan/vkgears.c index 04335464..f346f36c 100644 --- a/src/vulkan/vkgears.c +++ b/src/vulkan/vkgears.c @@ -61,6 +61,7 @@ static VkRenderPass render_pass; static VkCommandPool cmd_pool; static VkPresentModeKHR present_mode; static VkFormat image_format; +static VkColorSpaceKHR color_space; static VkFormat depth_format; uint32_t min_image_count = 2; static VkSurfaceKHR surface; @@ -462,7 +463,21 @@ configure_swapchain() min_image_count = surface_caps.maxImageCount; } - image_format = VK_FORMAT_B8G8R8A8_SRGB; + vkGetPhysicalDeviceSurfaceFormatsKHR(physical_device, surface, + &count, NULL); + VkSurfaceFormatKHR surface_formats[count]; + vkGetPhysicalDeviceSurfaceFormatsKHR(physical_device, surface, + &count, surface_formats); + image_format = surface_formats[0].format; + color_space = surface_formats[0].colorSpace; + for (i = 0; i < count; i++) { + if (surface_formats[i].format == VK_FORMAT_B8G8R8A8_SRGB && + surface_formats[i].colorSpace == VK_COLOR_SPACE_SRGB_NONLINEAR_KHR) { + image_format = surface_formats[i].format; + color_space = surface_formats[i].colorSpace; + break; + } + } // either VK_FORMAT_D32_SFLOAT or VK_FORMAT_X8_D24_UNORM_PACK32 needs to be supported; find out which one VkFormatProperties props; @@ -481,7 +496,7 @@ create_swapchain() .surface = surface, .minImageCount = min_image_count, .imageFormat = image_format, - .imageColorSpace = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR, + .imageColorSpace = color_space, .imageExtent = { width, height }, .imageArrayLayers = 1, .imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, |