vulkan/pipeline_cache: use vk_pipeline_cache_insert_object() to replace raw data...
authorDaniel Schürmann <daniel@schuermann.dev>
Thu, 27 Apr 2023 13:20:06 +0000 (15:20 +0200)
committerMarge Bot <emma+marge@anholt.net>
Tue, 2 May 2023 14:33:56 +0000 (14:33 +0000)
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22735>

src/vulkan/runtime/vk_pipeline_cache.c

index d5b9f34..6a2cd1e 100644 (file)
@@ -177,46 +177,6 @@ vk_pipeline_cache_remove_object(struct vk_pipeline_cache *cache,
    vk_pipeline_cache_object_unref(cache->base.device, object);
 }
 
-/* Consumes references to both search and replace and produces a reference */
-static struct vk_pipeline_cache_object *
-vk_pipeline_cache_replace_object(struct vk_pipeline_cache *cache,
-                                 uint32_t hash,
-                                 struct vk_pipeline_cache_object *search,
-                                 struct vk_pipeline_cache_object *replace)
-{
-   assert(object_keys_equal(search, replace));
-
-   vk_pipeline_cache_lock(cache);
-   struct set_entry *entry =
-      _mesa_set_search_pre_hashed(cache->object_cache, hash, search);
-
-   struct vk_pipeline_cache_object *found = NULL;
-   if (entry) {
-      if (entry->key == (const void *)search) {
-         /* Drop the reference owned by the cache */
-         vk_pipeline_cache_object_unref(cache->base.device, search);
-
-         entry->key = vk_pipeline_cache_object_ref(replace);
-      } else {
-         found = vk_pipeline_cache_object_ref((void *)entry->key);
-      }
-   } else {
-      /* I guess the object was purged?  Re-add it to the cache */
-      vk_pipeline_cache_object_ref(replace);
-      _mesa_set_add_pre_hashed(cache->object_cache, hash, replace);
-   }
-   vk_pipeline_cache_unlock(cache);
-
-   vk_pipeline_cache_object_unref(cache->base.device, search);
-
-   if (found) {
-      vk_pipeline_cache_object_unref(cache->base.device, replace);
-      return found;
-   } else {
-      return replace;
-   }
-}
-
 static bool
 vk_pipeline_cache_object_serialize(struct vk_pipeline_cache *cache,
                                    struct vk_pipeline_cache_object *object,
@@ -419,8 +379,8 @@ vk_pipeline_cache_lookup_object(struct vk_pipeline_cache *cache,
          return NULL;
       }
 
-      object = vk_pipeline_cache_replace_object(cache, hash, object,
-                                                real_object);
+      vk_pipeline_cache_object_unref(cache->base.device, object);
+      object = vk_pipeline_cache_insert_object(cache, real_object);
    }
 
    assert(object->ops == ops);