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;

Reply via email to