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

Author: Mike Blumenkrantz <[email protected]>
Date:   Thu Jan 19 13:33:04 2023 -0500

zink: preserve present resources during async presentation

ensure that these have a lifetime great enough to be presented

fixes #7781

cc: mesa-stable

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

---

 src/gallium/drivers/zink/zink_kopper.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/zink/zink_kopper.c 
b/src/gallium/drivers/zink/zink_kopper.c
index 3156fc25fbb..24584a4ac21 100644
--- a/src/gallium/drivers/zink/zink_kopper.c
+++ b/src/gallium/drivers/zink/zink_kopper.c
@@ -733,8 +733,11 @@ kopper_present(void *data, void *gdata, int thread_idx)
    }
    util_dynarray_append(arr, VkSemaphore, cpi->sem);
 out:
-   if (thread_idx != -1)
+   if (thread_idx != -1) {
       p_atomic_dec(&swapchain->async_presents);
+      struct pipe_resource *pres = &cpi->res->base.b;
+      pipe_resource_reference(&pres, NULL);
+   }
    free(cpi);
 }
 
@@ -783,6 +786,8 @@ zink_kopper_present_queue(struct zink_screen *screen, 
struct zink_resource *res)
    }
    if (util_queue_is_initialized(&screen->flush_queue)) {
       p_atomic_inc(&cpi->swapchain->async_presents);
+      struct pipe_resource *pres = NULL;
+      pipe_resource_reference(&pres, &res->base.b);
       util_queue_add_job(&screen->flush_queue, cpi, &cdt->present_fence,
                          kopper_present, NULL, 0);
    } else {

Reply via email to