Fixes regression in: dEQP-VK.api.object_management.alloc_callback_fail.graphics_pipeline
Fixes: 1e84e53712ae "radv: add cache items to in memory cache when reading from disk" --- src/amd/vulkan/radv_pipeline_cache.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/amd/vulkan/radv_pipeline_cache.c b/src/amd/vulkan/radv_pipeline_cache.c index 91470d1419..2904b62e6b 100644 --- a/src/amd/vulkan/radv_pipeline_cache.c +++ b/src/amd/vulkan/radv_pipeline_cache.c @@ -269,21 +269,34 @@ radv_create_shader_variants_from_pipeline_cache(struct radv_device *device, uint8_t disk_sha1[20]; disk_cache_compute_key(device->physical_device->disk_cache, sha1, 20, disk_sha1); entry = (struct cache_entry *) disk_cache_get(device->physical_device->disk_cache, disk_sha1, NULL); if (!entry) { pthread_mutex_unlock(&cache->mutex); return false; } else { - radv_pipeline_cache_add_entry(cache, entry); + size_t size = entry_size(entry); + struct cache_entry *new_entry = vk_alloc(&cache->alloc, size, 8, + VK_SYSTEM_ALLOCATION_SCOPE_CACHE); + if (!new_entry) { + free(entry); + pthread_mutex_unlock(&cache->mutex); + return false; + } + + memcpy(new_entry, entry, entry_size(entry)); + free(entry); + entry = new_entry; + + radv_pipeline_cache_add_entry(cache, new_entry); } } char *p = entry->code; for(int i = 0; i < MESA_SHADER_STAGES; ++i) { if (!entry->variants[i] && entry->code_sizes[i]) { struct radv_shader_variant *variant; struct cache_entry_variant_info info; variant = calloc(1, sizeof(struct radv_shader_variant)); -- 2.14.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev