From 8606e5cff8f28e10eef8aa9a5916777eaf7891f9 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 21 Jun 2022 11:22:41 -0400 Subject: [PATCH] zink: improve no-op acquire detection the swapchain may have successfully completed the acquire in a previous batch, in which case a new acquire is not needed Reviewed-by: Adam Jackson Part-of: --- src/gallium/drivers/zink/zink_kopper.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/zink/zink_kopper.c b/src/gallium/drivers/zink/zink_kopper.c index 88ca980..66c7bcf 100644 --- a/src/gallium/drivers/zink/zink_kopper.c +++ b/src/gallium/drivers/zink/zink_kopper.c @@ -450,7 +450,16 @@ static VkResult kopper_acquire(struct zink_screen *screen, struct zink_resource *res, uint64_t timeout) { struct kopper_displaytarget *cdt = kopper_displaytarget(res->obj->dt); - if (res->obj->acquire) + + /* if: + * - we don't need a new image + * - we have a swapchain image + * - that image is either acquired or acquiring + * + * then this is a no-op + */ + if (!res->obj->new_dt && res->obj->dt_idx != UINT32_MAX && + (cdt->swapchain->images[res->obj->dt_idx].acquire || cdt->swapchain->images[res->obj->dt_idx].acquired)) return VK_SUCCESS; res->obj->acquire = VK_NULL_HANDLE; VkSemaphore acquire = VK_NULL_HANDLE; -- 2.7.4