vulkan/wsi: Add callback to set ownership of buffer.
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Tue, 24 Mar 2020 16:59:07 +0000 (17:59 +0100)
committerMarge Bot <eric+marge@anholt.net>
Mon, 27 Apr 2020 18:01:24 +0000 (18:01 +0000)
For radv BO list pruning.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Acked-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4306>

src/vulkan/wsi/wsi_common.c
src/vulkan/wsi/wsi_common.h

index d629ea339ac36956e9e7237962d0194d3e049793..44454190840322b2b0bee198786312162842a499 100644 (file)
@@ -1098,6 +1098,11 @@ wsi_common_acquire_next_image2(const struct wsi_device *wsi,
    if (result != VK_SUCCESS)
       return result;
 
+   if (wsi->set_memory_ownership) {
+      VkDeviceMemory mem = swapchain->get_wsi_image(swapchain, *pImageIndex)->memory;
+      wsi->set_memory_ownership(swapchain->device, mem, true);
+   }
+
    if (pAcquireInfo->semaphore != VK_NULL_HANDLE &&
        wsi->signal_semaphore_for_memory != NULL) {
       struct wsi_image *image =
@@ -1219,6 +1224,11 @@ wsi_common_queue_present(const struct wsi_device *wsi,
       if (result != VK_SUCCESS)
          goto fail_present;
 
+      if (wsi->set_memory_ownership) {
+         VkDeviceMemory mem = swapchain->get_wsi_image(swapchain, image_index)->memory;
+         wsi->set_memory_ownership(swapchain->device, mem, false);
+      }
+
    fail_present:
       if (pPresentInfo->pResults != NULL)
          pPresentInfo->pResults[i] = result;
index 92121be8bda1fa55c1d7edc1a63c76662f56c91f..99ccdf84cde30e09989dc5de89da7aa810d9a13d 100644 (file)
@@ -127,6 +127,22 @@ struct wsi_device {
                                    VkFence fence,
                                    VkDeviceMemory memory);
 
+   /*
+    * This sets the ownership for a WSI memory object:
+    *
+    * The ownership is true if and only if the application is allowed to submit
+    * command buffers that reference the buffer.
+    *
+    * This can be used to prune BO lists without too many adverse affects on
+    * implicit sync.
+    *
+    * Side note: care needs to be taken for internally delayed submissions wrt
+    * timeline semaphores.
+    */
+   void (*set_memory_ownership)(VkDevice device,
+                                VkDeviceMemory memory,
+                                VkBool32 ownership);
+
 #define WSI_CB(cb) PFN_vk##cb cb
    WSI_CB(AllocateMemory);
    WSI_CB(AllocateCommandBuffers);