Mesa (main): zink: remove descriptor pools from hash table on deletion

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Oct 19 18:21:04 UTC 2021


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

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Wed Oct 13 10:15:07 2021 -0400

zink: remove descriptor pools from hash table on deletion

ensure these aren't just sitting around stale

Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13430>

---

 src/gallium/drivers/zink/zink_descriptors.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/src/gallium/drivers/zink/zink_descriptors.c b/src/gallium/drivers/zink/zink_descriptors.c
index 03445ae7dd4..8b491df3827 100644
--- a/src/gallium/drivers/zink/zink_descriptors.c
+++ b/src/gallium/drivers/zink/zink_descriptors.c
@@ -285,6 +285,16 @@ descriptor_pool_free(struct zink_screen *screen, struct zink_descriptor_pool *po
    ralloc_free(pool);
 }
 
+static void
+descriptor_pool_delete(struct zink_context *ctx, struct zink_descriptor_pool *pool)
+{
+   struct zink_screen *screen = zink_screen(ctx->base.screen);
+   if (!pool)
+      return;
+   _mesa_hash_table_remove_key(ctx->dd->descriptor_pools[pool->type], &pool->key);
+   descriptor_pool_free(screen, pool);
+}
+
 static struct zink_descriptor_pool *
 descriptor_pool_create(struct zink_screen *screen, enum zink_descriptor_type type,
                        struct zink_descriptor_layout_key *layout_key, VkDescriptorPoolSize *sizes, unsigned num_type_sizes)
@@ -975,7 +985,7 @@ zink_descriptor_set_refs_clear(struct zink_descriptor_refs *refs, void *ptr)
 }
 
 static inline void
-zink_descriptor_pool_reference(struct zink_screen *screen,
+zink_descriptor_pool_reference(struct zink_context *ctx,
                                struct zink_descriptor_pool **dst,
                                struct zink_descriptor_pool *src)
 {
@@ -983,7 +993,7 @@ zink_descriptor_pool_reference(struct zink_screen *screen,
 
    if (pipe_reference_described(old_dst ? &old_dst->reference : NULL, &src->reference,
                                 (debug_reference_descriptor)debug_describe_zink_descriptor_pool))
-      descriptor_pool_free(screen, old_dst);
+      descriptor_pool_delete(ctx, old_dst);
    if (dst) *dst = src;
 }
 
@@ -1076,7 +1086,7 @@ zink_descriptor_program_init(struct zink_context *ctx, struct zink_program *pg)
       struct zink_descriptor_pool *pool = descriptor_pool_get(ctx, i, pg->dd->layout_key[i], size, num_sizes);
       if (!pool)
          return false;
-      zink_descriptor_pool_reference(screen, &pdd_cached(pg)->pool[i], pool);
+      zink_descriptor_pool_reference(ctx, &pdd_cached(pg)->pool[i], pool);
 
       if (screen->info.have_KHR_descriptor_update_template &&
           screen->descriptor_mode != ZINK_DESCRIPTOR_MODE_NOTEMPLATES)
@@ -1089,11 +1099,10 @@ zink_descriptor_program_init(struct zink_context *ctx, struct zink_program *pg)
 void
 zink_descriptor_program_deinit(struct zink_context *ctx, struct zink_program *pg)
 {
-   struct zink_screen *screen = zink_screen(ctx->base.screen);
    if (!pg->dd)
       return;
    for (unsigned i = 0; i < ZINK_DESCRIPTOR_TYPES; i++)
-      zink_descriptor_pool_reference(screen, &pdd_cached(pg)->pool[i], NULL);
+      zink_descriptor_pool_reference(ctx, &pdd_cached(pg)->pool[i], NULL);
 
    zink_descriptor_program_deinit_lazy(ctx, pg);
 }
@@ -1101,11 +1110,10 @@ zink_descriptor_program_deinit(struct zink_context *ctx, struct zink_program *pg
 static void
 zink_descriptor_pool_deinit(struct zink_context *ctx)
 {
-   struct zink_screen *screen = zink_screen(ctx->base.screen);
    for (unsigned i = 0; i < ZINK_DESCRIPTOR_TYPES; i++) {
       hash_table_foreach(ctx->dd->descriptor_pools[i], entry) {
          struct zink_descriptor_pool *pool = (void*)entry->data;
-         zink_descriptor_pool_reference(screen, &pool, NULL);
+         zink_descriptor_pool_reference(ctx, &pool, NULL);
       }
       _mesa_hash_table_destroy(ctx->dd->descriptor_pools[i], NULL);
    }



More information about the mesa-commit mailing list