diff options
Diffstat (limited to 'src/vulkan')
-rw-r--r-- | src/vulkan/wsi/wsi_common.c | 17 | ||||
-rw-r--r-- | src/vulkan/wsi/wsi_common.h | 9 | ||||
-rw-r--r-- | src/vulkan/wsi/wsi_common_wayland.c | 28 | ||||
-rw-r--r-- | src/vulkan/wsi/wsi_common_x11.c | 29 |
4 files changed, 34 insertions, 49 deletions
diff --git a/src/vulkan/wsi/wsi_common.c b/src/vulkan/wsi/wsi_common.c index e5a9a28d347..ea4920c6fe3 100644 --- a/src/vulkan/wsi/wsi_common.c +++ b/src/vulkan/wsi/wsi_common.c @@ -508,6 +508,23 @@ wsi_prime_image_blit_to_linear(const struct wsi_swapchain *chain, } VkResult +wsi_common_get_images(VkSwapchainKHR _swapchain, + uint32_t *pSwapchainImageCount, + VkImage *pSwapchainImages) +{ + WSI_FROM_HANDLE(wsi_swapchain, swapchain, _swapchain); + VK_OUTARRAY_MAKE(images, pSwapchainImages, pSwapchainImageCount); + + for (uint32_t i = 0; i < swapchain->image_count; i++) { + vk_outarray_append(&images, image) { + *image = swapchain->get_wsi_image(swapchain, i)->image; + } + } + + return vk_outarray_status(&images); +} + +VkResult wsi_common_queue_present(const struct wsi_device *wsi, VkDevice device, VkQueue queue, diff --git a/src/vulkan/wsi/wsi_common.h b/src/vulkan/wsi/wsi_common.h index b47da43e085..892e708671b 100644 --- a/src/vulkan/wsi/wsi_common.h +++ b/src/vulkan/wsi/wsi_common.h @@ -64,8 +64,8 @@ struct wsi_swapchain { VkResult (*destroy)(struct wsi_swapchain *swapchain, const VkAllocationCallbacks *pAllocator); - VkResult (*get_images)(struct wsi_swapchain *swapchain, - uint32_t *pCount, VkImage *pSwapchainImages); + struct wsi_image *(*get_wsi_image)(struct wsi_swapchain *swapchain, + uint32_t image_index); VkResult (*acquire_next_image)(struct wsi_swapchain *swap_chain, uint64_t timeout, VkSemaphore semaphore, uint32_t *image_index); @@ -217,6 +217,11 @@ void wsi_wl_finish_wsi(struct wsi_device *wsi_device, const VkAllocationCallbacks *alloc); VkResult +wsi_common_get_images(VkSwapchainKHR _swapchain, + uint32_t *pSwapchainImageCount, + VkImage *pSwapchainImages); + +VkResult wsi_common_queue_present(const struct wsi_device *wsi, VkDevice device_h, VkQueue queue_h, diff --git a/src/vulkan/wsi/wsi_common_wayland.c b/src/vulkan/wsi/wsi_common_wayland.c index 22c01b2963a..bf60a9be826 100644 --- a/src/vulkan/wsi/wsi_common_wayland.c +++ b/src/vulkan/wsi/wsi_common_wayland.c @@ -582,30 +582,12 @@ struct wsi_wl_swapchain { struct wsi_wl_image images[0]; }; -static VkResult -wsi_wl_swapchain_get_images(struct wsi_swapchain *wsi_chain, - uint32_t *pCount, VkImage *pSwapchainImages) +static struct wsi_image * +wsi_wl_swapchain_get_wsi_image(struct wsi_swapchain *wsi_chain, + uint32_t image_index) { struct wsi_wl_swapchain *chain = (struct wsi_wl_swapchain *)wsi_chain; - uint32_t ret_count; - VkResult result; - - if (pSwapchainImages == NULL) { - *pCount = chain->base.image_count; - return VK_SUCCESS; - } - - result = VK_SUCCESS; - ret_count = chain->base.image_count; - if (chain->base.image_count > *pCount) { - ret_count = *pCount; - result = VK_INCOMPLETE; - } - - for (uint32_t i = 0; i < ret_count; i++) - pSwapchainImages[i] = chain->images[i].base.image; - - return result; + return &chain->images[image_index].base; } static VkResult @@ -832,7 +814,7 @@ wsi_wl_surface_create_swapchain(VkIcdSurfaceBase *icd_surface, VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR; chain->base.destroy = wsi_wl_swapchain_destroy; - chain->base.get_images = wsi_wl_swapchain_get_images; + chain->base.get_wsi_image = wsi_wl_swapchain_get_wsi_image; chain->base.acquire_next_image = wsi_wl_swapchain_acquire_next_image; chain->base.queue_present = wsi_wl_swapchain_queue_present; chain->base.present_mode = pCreateInfo->presentMode; diff --git a/src/vulkan/wsi/wsi_common_x11.c b/src/vulkan/wsi/wsi_common_x11.c index 68cb0355612..8860d8edb6e 100644 --- a/src/vulkan/wsi/wsi_common_x11.c +++ b/src/vulkan/wsi/wsi_common_x11.c @@ -648,30 +648,11 @@ struct x11_swapchain { struct x11_image images[0]; }; -static VkResult -x11_get_images(struct wsi_swapchain *anv_chain, - uint32_t* pCount, VkImage *pSwapchainImages) +static struct wsi_image * +x11_get_wsi_image(struct wsi_swapchain *wsi_chain, uint32_t image_index) { - struct x11_swapchain *chain = (struct x11_swapchain *)anv_chain; - uint32_t ret_count; - VkResult result; - - if (pSwapchainImages == NULL) { - *pCount = chain->base.image_count; - return VK_SUCCESS; - } - - result = VK_SUCCESS; - ret_count = chain->base.image_count; - if (chain->base.image_count > *pCount) { - ret_count = *pCount; - result = VK_INCOMPLETE; - } - - for (uint32_t i = 0; i < ret_count; i++) - pSwapchainImages[i] = chain->images[i].base.image; - - return result; + struct x11_swapchain *chain = (struct x11_swapchain *)wsi_chain; + return &chain->images[image_index].base; } static VkResult @@ -1109,7 +1090,7 @@ x11_surface_create_swapchain(VkIcdSurfaceBase *icd_surface, goto fail_alloc; chain->base.destroy = x11_swapchain_destroy; - chain->base.get_images = x11_get_images; + chain->base.get_wsi_image = x11_get_wsi_image; chain->base.acquire_next_image = x11_acquire_next_image; chain->base.queue_present = x11_queue_present; chain->base.present_mode = pCreateInfo->presentMode; |