vulkan/pipeline_cache: remove a bogus assert when inserting objects
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Thu, 4 May 2023 13:29:39 +0000 (15:29 +0200)
committerMarge Bot <emma+marge@anholt.net>
Thu, 25 May 2023 10:07:35 +0000 (10:07 +0000)
If two threads deserialize the raw object at the same time, the
refcount could be more than 1 temporarily.

This can be reproduced with Granite during the multi-threaded pipeline
cache pre-warm on startup, and also with Dota2.

Fixes: cbab396f549 ("vulkan/pipeline_cache: replace raw data objects on cache insertion of real objects")
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22853>

src/vulkan/runtime/vk_pipeline_cache.c

index b16d5a0..bb6e472 100644 (file)
@@ -273,7 +273,7 @@ vk_pipeline_cache_insert_object(struct vk_pipeline_cache *cache,
        if (found_object->ops != object->ops) {
           /* The found object in the cache isn't fully formed. Replace it. */
           assert(found_object->ops == &vk_raw_data_cache_object_ops);
-          assert(found_object->ref_cnt == 1 && object->ref_cnt == 1);
+          assert(object->ref_cnt == 1);
           entry->key = object;
           object = found_object;
        }