From 8ece1ade5babdd15ef1a8bce00660ffd84b95a9c Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Thu, 8 Dec 2022 17:07:52 +0100 Subject: [PATCH] wsi/common: Add common implementation of vkReleaseSwapchainImagesEXT. Signed-off-by: Hans-Kristian Arntzen Reviewed-by: Joshua Ashton Part-of: --- src/vulkan/wsi/wsi_common.c | 23 +++++++++++++++++++++++ src/vulkan/wsi/wsi_common_private.h | 3 +++ 2 files changed, 26 insertions(+) diff --git a/src/vulkan/wsi/wsi_common.c b/src/vulkan/wsi/wsi_common.c index a9895d91e02..52d55267026 100644 --- a/src/vulkan/wsi/wsi_common.c +++ b/src/vulkan/wsi/wsi_common.c @@ -987,6 +987,29 @@ wsi_DestroySwapchainKHR(VkDevice _device, swapchain->destroy(swapchain, alloc); } +VKAPI_ATTR VkResult VKAPI_CALL +wsi_ReleaseSwapchainImagesEXT(VkDevice _device, + const VkReleaseSwapchainImagesInfoEXT *pReleaseInfo) +{ + VK_FROM_HANDLE(wsi_swapchain, swapchain, pReleaseInfo->swapchain); + VkResult result = swapchain->release_images(swapchain, + pReleaseInfo->imageIndexCount, + pReleaseInfo->pImageIndices); + + if (result != VK_SUCCESS) + return result; + + if (swapchain->wsi->set_memory_ownership) { + for (uint32_t i = 0; i < pReleaseInfo->imageIndexCount; i++) { + uint32_t image_index = pReleaseInfo->pImageIndices[i]; + VkDeviceMemory mem = swapchain->get_wsi_image(swapchain, image_index)->memory; + swapchain->wsi->set_memory_ownership(swapchain->device, mem, false); + } + } + + return VK_SUCCESS; +} + VkResult wsi_common_get_images(VkSwapchainKHR _swapchain, uint32_t *pSwapchainImageCount, diff --git a/src/vulkan/wsi/wsi_common_private.h b/src/vulkan/wsi/wsi_common_private.h index 308fb57a5f5..148d6db99e1 100644 --- a/src/vulkan/wsi/wsi_common_private.h +++ b/src/vulkan/wsi/wsi_common_private.h @@ -188,6 +188,9 @@ struct wsi_swapchain { VkResult (*wait_for_present)(struct wsi_swapchain *swap_chain, uint64_t present_id, uint64_t timeout); + VkResult (*release_images)(struct wsi_swapchain *swap_chain, + uint32_t count, + const uint32_t *indices); }; bool