Mesa (main): zink: key alloc cache on heap index, not heap flags

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jun 17 01:17:17 UTC 2021


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

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Thu May  6 10:59:50 2021 -0400

zink: key alloc cache on heap index, not heap flags

this is a bit more sane

Reviewed-by: Adam Jackson <ajax at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11397>

---

 src/gallium/drivers/zink/zink_resource.c | 9 +++++----
 src/gallium/drivers/zink/zink_resource.h | 2 +-
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c
index ea1221148fb..6b235202d96 100644
--- a/src/gallium/drivers/zink/zink_resource.c
+++ b/src/gallium/drivers/zink/zink_resource.c
@@ -110,7 +110,7 @@ mem_equals(const void *a, const void *b)
 static void
 cache_or_free_mem(struct zink_screen *screen, struct zink_resource_object *obj)
 {
-   if (obj->mkey.flags) {
+   if (obj->mkey.heap_index != UINT32_MAX) {
       simple_mtx_lock(&screen->mem_cache_mtx);
       struct hash_entry *he = _mesa_hash_table_search_pre_hashed(screen->resource_mem_cache, obj->mem_hash, &obj->mkey);
       struct util_dynarray *array = he ? (void*)he->data : NULL;
@@ -539,9 +539,9 @@ resource_object_create(struct zink_screen *screen, const struct pipe_resource *t
 
    /* don't cache visible vram because it's more likely to be limited */
    VkMemoryPropertyFlags visible_vram = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
-   if (!mai.pNext && !(templ->flags & (PIPE_RESOURCE_FLAG_MAP_COHERENT | PIPE_RESOURCE_FLAG_SPARSE)) && ((flags & visible_vram) != visible_vram)) {
+   if (!mai.pNext && !(templ->flags & (PIPE_RESOURCE_FLAG_MAP_COHERENT | PIPE_RESOURCE_FLAG_SPARSE)) && ((mem_type.propertyFlags & visible_vram) != visible_vram)) {
       obj->mkey.reqs = reqs;
-      obj->mkey.flags = flags;
+      obj->mkey.heap_index = mai.memoryTypeIndex;
       obj->mem_hash = mem_hash(&obj->mkey);
       simple_mtx_lock(&screen->mem_cache_mtx);
 
@@ -554,7 +554,8 @@ resource_object_create(struct zink_screen *screen, const struct pipe_resource *t
          obj->map = mc.map;
       }
       simple_mtx_unlock(&screen->mem_cache_mtx);
-   }
+   } else
+      obj->mkey.heap_index = UINT32_MAX;
 
    /* TODO: sparse buffers should probably allocate multiple regions of memory instead of giant blobs? */
    if (!obj->mem && vkAllocateMemory(screen->dev, &mai, NULL, &obj->mem) != VK_SUCCESS) {
diff --git a/src/gallium/drivers/zink/zink_resource.h b/src/gallium/drivers/zink/zink_resource.h
index 6e257299f8c..24d5b7631ab 100644
--- a/src/gallium/drivers/zink/zink_resource.h
+++ b/src/gallium/drivers/zink/zink_resource.h
@@ -49,8 +49,8 @@ enum zink_resource_access {
 };
 
 struct mem_key {
+   unsigned heap_index;
    VkMemoryRequirements reqs;
-   VkMemoryPropertyFlags flags;
 };
 
 struct zink_resource_object {



More information about the mesa-commit mailing list