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 {
