vulkan/wsi: Add callback to set ownership of buffer.

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>
This commit is contained in:
Bas Nieuwenhuizen 2020-03-24 17:59:07 +01:00 committed by Marge Bot
parent 42b1696ef6
commit 9a61f2a8a9
2 changed files with 26 additions and 0 deletions

View 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;

View 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);