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:
parent
48e23a6406
commit
778b51f491
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue