Module: Mesa Branch: main Commit: 4932e65f1e6a1dcac431caf638298687a7b71705 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4932e65f1e6a1dcac431caf638298687a7b71705
Author: Mike Blumenkrantz <[email protected]> Date: Wed Aug 16 12:52:07 2023 -0400 zink: hook up cached fd semaphore usage for batch signal/waits not yet used, matches handling of normal semaphores Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24962> --- src/gallium/drivers/zink/zink_batch.c | 11 +++++++++++ src/gallium/drivers/zink/zink_types.h | 3 +++ 2 files changed, 14 insertions(+) diff --git a/src/gallium/drivers/zink/zink_batch.c b/src/gallium/drivers/zink/zink_batch.c index b82e549e7f6..cd3c893879b 100644 --- a/src/gallium/drivers/zink/zink_batch.c +++ b/src/gallium/drivers/zink/zink_batch.c @@ -162,6 +162,14 @@ zink_reset_batch_state(struct zink_context *ctx, struct zink_batch_state *bs) util_dynarray_clear(&bs->wait_semaphores); simple_mtx_unlock(&screen->semaphores_lock); } + if (util_dynarray_contains(&bs->signal_semaphores, VkSemaphore) || util_dynarray_contains(&bs->fd_wait_semaphores, VkSemaphore)) { + simple_mtx_lock(&screen->semaphores_lock); + util_dynarray_append_dynarray(&screen->fd_semaphores, &bs->signal_semaphores); + util_dynarray_clear(&bs->signal_semaphores); + util_dynarray_append_dynarray(&screen->fd_semaphores, &bs->fd_wait_semaphores); + util_dynarray_clear(&bs->fd_wait_semaphores); + simple_mtx_unlock(&screen->semaphores_lock); + } bs->swapchain = NULL; bs->unordered_write_access = 0; @@ -342,11 +350,14 @@ create_batch_state(struct zink_context *ctx) SET_CREATE_OR_FAIL(&bs->programs); SET_CREATE_OR_FAIL(&bs->active_queries); + util_dynarray_init(&bs->signal_semaphores, NULL); util_dynarray_init(&bs->wait_semaphores, NULL); + util_dynarray_init(&bs->fd_wait_semaphores, NULL); util_dynarray_init(&bs->dead_querypools, NULL); util_dynarray_init(&bs->dgc.pipelines, NULL); util_dynarray_init(&bs->dgc.layouts, NULL); util_dynarray_init(&bs->wait_semaphore_stages, NULL); + util_dynarray_init(&bs->fd_wait_semaphore_stages, NULL); util_dynarray_init(&bs->zombie_samplers, NULL); util_dynarray_init(&bs->dead_framebuffers, NULL); util_dynarray_init(&bs->unref_resources, NULL); diff --git a/src/gallium/drivers/zink/zink_types.h b/src/gallium/drivers/zink/zink_types.h index 8399bca650b..03aebc254cd 100644 --- a/src/gallium/drivers/zink/zink_types.h +++ b/src/gallium/drivers/zink/zink_types.h @@ -599,8 +599,11 @@ struct zink_batch_state { VkCommandBuffer cmdbuf; VkCommandBuffer barrier_cmdbuf; VkSemaphore signal_semaphore; //external signal semaphore + struct util_dynarray signal_semaphores; //external signal semaphores struct util_dynarray wait_semaphores; //external wait semaphores struct util_dynarray wait_semaphore_stages; //external wait semaphores + struct util_dynarray fd_wait_semaphores; //dmabuf wait semaphores + struct util_dynarray fd_wait_semaphore_stages; //dmabuf wait semaphores VkSemaphore present; struct zink_resource *swapchain;
