Module: Mesa
Branch: main
Commit: 89cf0a3bdc9949c54d8d7965a2d51bed91b6d10a
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=89cf0a3bdc9949c54d8d7965a2d51bed91b6d10a

Author: Mike Blumenkrantz <[email protected]>
Date:   Fri Feb  3 08:40:25 2023 -0500

zink: fix max acquired image count

according to spec, the maximum number of acquired images can be calculated with

swapchain_size - VkSurfaceCapabilitiesKHR::minImageCount + 1

the previous calculation was both wrong and occurring in the wrong place,
so this corrects both issues

cc: mesa-stable

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21095>

---

 src/gallium/drivers/zink/zink_kopper.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/zink/zink_kopper.c 
b/src/gallium/drivers/zink/zink_kopper.c
index a80993b45c2..400e790d971 100644
--- a/src/gallium/drivers/zink/zink_kopper.c
+++ b/src/gallium/drivers/zink/zink_kopper.c
@@ -309,7 +309,6 @@ kopper_CreateSwapchain(struct zink_screen *screen, struct 
kopper_displaytarget *
        *result = error;
        return NULL;
    }
-   cswap->max_acquires = cswap->scci.minImageCount - cdt->caps.minImageCount;
    cswap->last_present = UINT32_MAX;
 
    *result = VK_SUCCESS;
@@ -332,6 +331,7 @@ kopper_GetSwapchainImages(struct zink_screen *screen, 
struct kopper_swapchain *c
       for (unsigned i = 0; i < cswap->num_images; i++)
          cswap->images[i].image = images[i];
    }
+   cswap->max_acquires = cswap->num_images - cswap->scci.minImageCount + 1;
    return error;
 }
 
@@ -508,7 +508,7 @@ kopper_acquire(struct zink_screen *screen, struct 
zink_resource *res, uint64_t t
          res->obj->access_stage = 0;
       }
       if (timeout == UINT64_MAX && 
util_queue_is_initialized(&screen->flush_queue) &&
-          p_atomic_read_relaxed(&cdt->swapchain->num_acquires) > 
cdt->swapchain->max_acquires) {
+          p_atomic_read_relaxed(&cdt->swapchain->num_acquires) >= 
cdt->swapchain->max_acquires) {
          util_queue_fence_wait(&cdt->present_fence);
       }
       VkResult ret;

Reply via email to