aboutsummaryrefslogtreecommitdiffstats
path: root/src/vulkan/wsi
diff options
context:
space:
mode:
authorBas Nieuwenhuizen <[email protected]>2020-03-24 17:59:07 +0100
committerMarge Bot <[email protected]>2020-04-27 18:01:24 +0000
commit9a61f2a8a9ca17e2d53dded9c1c490c890aa4a74 (patch)
tree2a2f5cec0556d6e258b11e092d0bf9d6b9356a7c /src/vulkan/wsi
parent42b1696ef627a5bfee29911a780fa0a4dbf04610 (diff)
vulkan/wsi: Add callback to set ownership of buffer.
For radv BO list pruning. Reviewed-by: Jason Ekstrand <[email protected]> Acked-by: Samuel Pitoiset <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4306>
Diffstat (limited to 'src/vulkan/wsi')
-rw-r--r--src/vulkan/wsi/wsi_common.c10
-rw-r--r--src/vulkan/wsi/wsi_common.h16
2 files changed, 26 insertions, 0 deletions
diff --git a/src/vulkan/wsi/wsi_common.c b/src/vulkan/wsi/wsi_common.c
index d629ea339ac..44454190840 100644
--- a/src/vulkan/wsi/wsi_common.c
+++ b/src/vulkan/wsi/wsi_common.c
@@ -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;
diff --git a/src/vulkan/wsi/wsi_common.h b/src/vulkan/wsi/wsi_common.h
index 92121be8bda..99ccdf84cde 100644
--- a/src/vulkan/wsi/wsi_common.h
+++ b/src/vulkan/wsi/wsi_common.h
@@ -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);