summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Faye-Lund <erik.faye-lund@collabora.com>2023-04-05 11:41:09 +0200
committerErik Faye-Lund <erik.faye-lund@collabora.com>2023-04-17 08:56:35 +0200
commitd262491cfab4b53bea9ec9ec8a56b209831e8059 (patch)
tree25af22b8ddf140c2a605d667dd588cb57ef706c2
parent5661deace1d3b58e73d70ad16ca09eeec50f267b (diff)
downloadmesa-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.c19
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,