vulkan/wsi: Add a hooks for signaling semaphores and fences

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
This commit is contained in:
Jason Ekstrand 2019-12-04 12:47:31 -06:00
parent 48e23a6406
commit 778b51f491
2 changed files with 38 additions and 1 deletions

View File

@ -1004,7 +1004,28 @@ wsi_common_acquire_next_image2(const struct wsi_device *wsi,
{
WSI_FROM_HANDLE(wsi_swapchain, swapchain, pAcquireInfo->swapchain);
return swapchain->acquire_next_image(swapchain, pAcquireInfo, pImageIndex);
VkResult result = swapchain->acquire_next_image(swapchain, pAcquireInfo,
pImageIndex);
if (result != VK_SUCCESS)
return result;
if (pAcquireInfo->semaphore != VK_NULL_HANDLE &&
wsi->signal_semaphore_for_memory != NULL) {
struct wsi_image *image =
swapchain->get_wsi_image(swapchain, *pImageIndex);
wsi->signal_semaphore_for_memory(device, pAcquireInfo->semaphore,
image->memory);
}
if (pAcquireInfo->fence != VK_NULL_HANDLE &&
wsi->signal_fence_for_memory != NULL) {
struct wsi_image *image =
swapchain->get_wsi_image(swapchain, *pImageIndex);
wsi->signal_fence_for_memory(device, pAcquireInfo->fence,
image->memory);
}
return VK_SUCCESS;
}
VkResult

View File

@ -130,6 +130,22 @@ struct wsi_device {
uint64_t (*image_get_modifier)(VkImage image);
/* Signals the semaphore such that any wait on the semaphore will wait on
* any reads or writes on the give memory object. This is used to
* implement the semaphore signal operation in vkAcquireNextImage.
*/
void (*signal_semaphore_for_memory)(VkDevice device,
VkSemaphore semaphore,
VkDeviceMemory memory);
/* Signals the fence such that any wait on the fence will wait on any reads
* or writes on the give memory object. This is used to implement the
* semaphore signal operation in vkAcquireNextImage.
*/
void (*signal_fence_for_memory)(VkDevice device,
VkFence fence,
VkDeviceMemory memory);
#define WSI_CB(cb) PFN_vk##cb cb
WSI_CB(AllocateMemory);
WSI_CB(AllocateCommandBuffers);