Module: Mesa
Branch: master
Commit: f32079efab4def44ecd2e77edb3e5b47df608b53
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f32079efab4def44ecd2e77edb3e5b47df608b53

Author: Mike Blumenkrantz <[email protected]>
Date:   Mon Mar 22 10:54:14 2021 -0400

zink: add locking for fence resources

Reviewed-by: Dave Airlie <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9885>

---

 src/gallium/drivers/zink/zink_batch.c | 2 ++
 src/gallium/drivers/zink/zink_fence.c | 2 ++
 src/gallium/drivers/zink/zink_fence.h | 2 ++
 3 files changed, 6 insertions(+)

diff --git a/src/gallium/drivers/zink/zink_batch.c 
b/src/gallium/drivers/zink/zink_batch.c
index f9560b8df43..224c3d51223 100644
--- a/src/gallium/drivers/zink/zink_batch.c
+++ b/src/gallium/drivers/zink/zink_batch.c
@@ -125,6 +125,7 @@ zink_batch_state_destroy(struct zink_screen *screen, struct 
zink_batch_state *bs
    _mesa_set_destroy(bs->programs, NULL);
    _mesa_set_destroy(bs->desc_sets, NULL);
    _mesa_set_destroy(bs->active_queries, NULL);
+   simple_mtx_destroy(&bs->fence.resource_mtx);
    ralloc_free(bs);
 }
 
@@ -168,6 +169,7 @@ create_batch_state(struct zink_context *ctx)
       /* this destroys the batch state on failure */
       return NULL;
 
+   simple_mtx_init(&bs->fence.resource_mtx, mtx_plain);
    return bs;
 fail:
    zink_batch_state_destroy(screen, bs);
diff --git a/src/gallium/drivers/zink/zink_fence.c 
b/src/gallium/drivers/zink/zink_fence.c
index 188a049ff21..12d61f8c394 100644
--- a/src/gallium/drivers/zink/zink_fence.c
+++ b/src/gallium/drivers/zink/zink_fence.c
@@ -35,6 +35,7 @@
 void
 zink_fence_clear_resources(struct zink_screen *screen, struct zink_fence 
*fence)
 {
+   simple_mtx_lock(&fence->resource_mtx);
    /* unref all used resources */
    set_foreach(fence->resources, entry) {
       struct zink_resource_object *obj = (struct zink_resource_object 
*)entry->key;
@@ -43,6 +44,7 @@ zink_fence_clear_resources(struct zink_screen *screen, struct 
zink_fence *fence)
       zink_resource_object_reference(screen, &obj, NULL);
       _mesa_set_remove(fence->resources, entry);
    }
+   simple_mtx_unlock(&fence->resource_mtx);
 }
 
 static void
diff --git a/src/gallium/drivers/zink/zink_fence.h 
b/src/gallium/drivers/zink/zink_fence.h
index ba59de495f7..f4b2a8d97cc 100644
--- a/src/gallium/drivers/zink/zink_fence.h
+++ b/src/gallium/drivers/zink/zink_fence.h
@@ -24,6 +24,7 @@
 #ifndef ZINK_FENCE_H
 #define ZINK_FENCE_H
 
+#include "util/simple_mtx.h"
 #include "util/u_inlines.h"
 
 #include <vulkan/vulkan.h>
@@ -40,6 +41,7 @@ struct zink_fence {
    VkFence fence;
    struct pipe_context *deferred_ctx;
    uint32_t batch_id;
+   simple_mtx_t resource_mtx;
    struct set *resources; /* resources need access removed asap, so they're on 
the fence */
    bool submitted;
 };

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to