Mesa (main): zink: inline mem cache hash table

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jul 22 00:44:06 UTC 2021


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

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Wed May 12 08:18:08 2021 -0400

zink: inline mem cache hash table

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

---

 src/gallium/drivers/zink/zink_resource.c | 15 +++++++--------
 src/gallium/drivers/zink/zink_screen.c   |  3 +--
 src/gallium/drivers/zink/zink_screen.h   |  2 +-
 3 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c
index d56966840a9..345ee8a64ff 100644
--- a/src/gallium/drivers/zink/zink_resource.c
+++ b/src/gallium/drivers/zink/zink_resource.c
@@ -111,7 +111,7 @@ cache_or_free_mem(struct zink_screen *screen, struct zink_resource_object *obj)
 {
    if (obj->mkey.key.heap_index != UINT32_MAX) {
       simple_mtx_lock(&screen->mem.mem_cache_mtx);
-      struct hash_entry *he = _mesa_hash_table_search_pre_hashed(screen->mem.resource_mem_cache, obj->mem_hash, &obj->mkey);
+      struct hash_entry *he = _mesa_hash_table_search_pre_hashed(&screen->mem.resource_mem_cache, obj->mem_hash, &obj->mkey);
       assert(he);
       struct util_dynarray *array = he->data;
       struct mem_key *mkey = (void*)he->key;
@@ -714,7 +714,7 @@ resource_object_create(struct zink_screen *screen, const struct pipe_resource *t
       obj->mem_hash = mem_hash(&obj->mkey);
       simple_mtx_lock(&screen->mem.mem_cache_mtx);
 
-      struct hash_entry *he = _mesa_hash_table_search_pre_hashed(screen->mem.resource_mem_cache, obj->mem_hash, &obj->mkey);
+      struct hash_entry *he = _mesa_hash_table_search_pre_hashed(&screen->mem.resource_mem_cache, obj->mem_hash, &obj->mkey);
       struct mem_key *mkey;
       if (he) {
          struct util_dynarray *array = he->data;
@@ -727,12 +727,12 @@ resource_object_create(struct zink_screen *screen, const struct pipe_resource *t
             screen->mem.mem_cache_count--;
          }
       } else {
-         mkey = ralloc(screen->mem.resource_mem_cache, struct mem_key);
+         mkey = ralloc(screen, struct mem_key);
          memcpy(&mkey->key, &obj->mkey.key, sizeof(obj->mkey.key));
          mkey->seen_count = 0;
-         struct util_dynarray *array = rzalloc(screen->mem.resource_mem_cache, struct util_dynarray);
-         util_dynarray_init(array, screen->mem.resource_mem_cache);
-         _mesa_hash_table_insert_pre_hashed(screen->mem.resource_mem_cache, obj->mem_hash, mkey, array);
+         struct util_dynarray *array = rzalloc(screen, struct util_dynarray);
+         util_dynarray_init(array, screen);
+         _mesa_hash_table_insert_pre_hashed(&screen->mem.resource_mem_cache, obj->mem_hash, mkey, array);
       }
       mkey->seen_count++;
       simple_mtx_unlock(&screen->mem.mem_cache_mtx);
@@ -1685,8 +1685,7 @@ zink_screen_resource_init(struct pipe_screen *pscreen)
    }
    pscreen->resource_get_param = zink_resource_get_param;
    simple_mtx_init(&screen->mem.mem_cache_mtx, mtx_plain);
-   screen->mem.resource_mem_cache = _mesa_hash_table_create(NULL, mem_hash, mem_equals);
-   return !!screen->mem.resource_mem_cache;
+   return _mesa_hash_table_init(&screen->mem.resource_mem_cache, screen, mem_hash, mem_equals);
 }
 
 void
diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c
index 0aff948713a..25db59c3d55 100644
--- a/src/gallium/drivers/zink/zink_screen.c
+++ b/src/gallium/drivers/zink/zink_screen.c
@@ -1085,9 +1085,8 @@ zink_destroy_screen(struct pipe_screen *pscreen)
 #endif
    disk_cache_destroy(screen->disk_cache);
    simple_mtx_lock(&screen->mem.mem_cache_mtx);
-   hash_table_foreach(screen->mem.resource_mem_cache, he)
+   hash_table_foreach(&screen->mem.resource_mem_cache, he)
       resource_cache_entry_destroy(screen, he);
-   _mesa_hash_table_destroy(screen->mem.resource_mem_cache, NULL);
    simple_mtx_unlock(&screen->mem.mem_cache_mtx);
    simple_mtx_destroy(&screen->mem.mem_cache_mtx);
 
diff --git a/src/gallium/drivers/zink/zink_screen.h b/src/gallium/drivers/zink/zink_screen.h
index 9c796f968e5..71ead89e334 100644
--- a/src/gallium/drivers/zink/zink_screen.h
+++ b/src/gallium/drivers/zink/zink_screen.h
@@ -94,7 +94,7 @@ struct zink_screen {
 
    struct {
       simple_mtx_t mem_cache_mtx;
-      struct hash_table *resource_mem_cache;
+      struct hash_table resource_mem_cache;
       uint64_t mem_cache_size;
       unsigned mem_cache_count;
    } mem;



More information about the mesa-commit mailing list