#include <string.h>
#include <pthread.h>
+#include "util/vk_util.h"
#include "wsi_common_wayland.h"
#include "wayland-drm-client-protocol.h"
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
#include <xf86drm.h>
#include "util/hash_table.h"
+#include "util/vk_util.h"
#include "wsi_common.h"
#include "wsi_common_x11.h"
#include "wsi_common_queue.h"
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[] = {
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