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;