From: Jason Ekstrand Date: Fri, 17 Mar 2017 21:02:43 +0000 (-0700) Subject: vulkan/wsi: Use vk_outarray for surface_get_formats X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=52e6271ffd68b78f154ac312a01989ce92b59348;p=mesa.git vulkan/wsi: Use vk_outarray for surface_get_formats Reviewed-by: Samuel Iglesias Gonsálvez --- diff --git a/src/vulkan/wsi/wsi_common_wayland.c b/src/vulkan/wsi/wsi_common_wayland.c index 5613283d9d9..5c72c8aa236 100644 --- a/src/vulkan/wsi/wsi_common_wayland.c +++ b/src/vulkan/wsi/wsi_common_wayland.c @@ -31,6 +31,7 @@ #include #include +#include "util/vk_util.h" #include "wsi_common_wayland.h" #include "wayland-drm-client-protocol.h" @@ -412,28 +413,17 @@ wsi_wl_surface_get_formats(VkIcdSurfaceBase *icd_surface, if (!display) return VK_ERROR_OUT_OF_HOST_MEMORY; - if (pSurfaceFormats == NULL) { - *pSurfaceFormatCount = u_vector_length(&display->formats); - return VK_SUCCESS; - } + VK_OUTARRAY_MAKE(out, pSurfaceFormats, pSurfaceFormatCount); - uint32_t count = 0; - VkFormat *f; - u_vector_foreach(f, &display->formats) { - 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, - }; + VkFormat *disp_fmt; + u_vector_foreach(disp_fmt, &display->formats) { + vk_outarray_append(&out, out_fmt) { + out_fmt->format = *disp_fmt; + out_fmt->colorSpace = VK_COLORSPACE_SRGB_NONLINEAR_KHR; + } } - assert(*pSurfaceFormatCount <= count); - *pSurfaceFormatCount = count; - - return VK_SUCCESS; + return vk_outarray_status(&out); } static VkResult diff --git a/src/vulkan/wsi/wsi_common_x11.c b/src/vulkan/wsi/wsi_common_x11.c index c399aae5afd..35801947f8e 100644 --- a/src/vulkan/wsi/wsi_common_x11.c +++ b/src/vulkan/wsi/wsi_common_x11.c @@ -38,6 +38,7 @@ #include #include "util/hash_table.h" +#include "util/vk_util.h" #include "wsi_common.h" #include "wsi_common_x11.h" #include "wsi_common_queue.h" @@ -235,9 +236,9 @@ wsi_x11_get_connection(struct wsi_device *wsi_dev, return entry->data; } -static const VkSurfaceFormatKHR formats[] = { - { .format = VK_FORMAT_B8G8R8A8_SRGB, }, - { .format = VK_FORMAT_B8G8R8A8_UNORM, }, +static const VkFormat formats[] = { + VK_FORMAT_B8G8R8A8_SRGB, + VK_FORMAT_B8G8R8A8_UNORM, }; static const VkPresentModeKHR present_modes[] = { @@ -516,16 +517,16 @@ x11_surface_get_formats(VkIcdSurfaceBase *surface, uint32_t *pSurfaceFormatCount, VkSurfaceFormatKHR *pSurfaceFormats) { - if (pSurfaceFormats == NULL) { - *pSurfaceFormatCount = ARRAY_SIZE(formats); - return VK_SUCCESS; - } + VK_OUTARRAY_MAKE(out, pSurfaceFormats, pSurfaceFormatCount); - *pSurfaceFormatCount = MIN2(*pSurfaceFormatCount, ARRAY_SIZE(formats)); - typed_memcpy(pSurfaceFormats, formats, *pSurfaceFormatCount); + for (unsigned i = 0; i < ARRAY_SIZE(formats); i++) { + vk_outarray_append(&out, f) { + f->format = formats[i]; + f->colorSpace = VK_COLORSPACE_SRGB_NONLINEAR_KHR; + } + } - return *pSurfaceFormatCount < ARRAY_SIZE(formats) ? - VK_INCOMPLETE : VK_SUCCESS; + return vk_outarray_status(&out); } static VkResult