From dc578ef060f6b92e6fd2f77bb6454a5fb22a471c Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Tue, 24 Jan 2017 16:43:01 -0800 Subject: [PATCH] vulkan/wsi/wayland: Handle VK_INCOMPLETE for GetFormats Reviewed-by: Lionel Landwerlin Cc: "17.0" --- src/vulkan/wsi/wsi_common_wayland.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/vulkan/wsi/wsi_common_wayland.c b/src/vulkan/wsi/wsi_common_wayland.c index 687ac9c731b..d745413c403 100644 --- a/src/vulkan/wsi/wsi_common_wayland.c +++ b/src/vulkan/wsi/wsi_common_wayland.c @@ -409,25 +409,27 @@ wsi_wl_surface_get_formats(VkIcdSurfaceBase *icd_surface, if (!display) return VK_ERROR_OUT_OF_HOST_MEMORY; - uint32_t count = u_vector_length(&display->formats); - if (pSurfaceFormats == NULL) { - *pSurfaceFormatCount = count; + *pSurfaceFormatCount = u_vector_length(&display->formats); return VK_SUCCESS; } - assert(*pSurfaceFormatCount >= count); - *pSurfaceFormatCount = count; - + uint32_t count = 0; VkFormat *f; u_vector_foreach(f, &display->formats) { - *(pSurfaceFormats++) = (VkSurfaceFormatKHR) { + if (count == *pSurfaceFormatCount) + return VK_INCOMPLETE; + + pSurfaceFormats[count++] = (VkSurfaceFormatKHR) { .format = *f, /* TODO: We should get this from the compositor somehow */ .colorSpace = VK_COLORSPACE_SRGB_NONLINEAR_KHR, }; } + assert(*pSurfaceFormatCount <= count); + *pSurfaceFormatCount = count; + return VK_SUCCESS; } -- 2.30.2