diff --git a/src/broadcom/vulkan/v3dv_meta_clear.c b/src/broadcom/vulkan/v3dv_meta_clear.c index 07d2a20070e..26e7e8fb006 100644 --- a/src/broadcom/vulkan/v3dv_meta_clear.c +++ b/src/broadcom/vulkan/v3dv_meta_clear.c @@ -575,7 +575,9 @@ get_color_clear_pipeline(struct v3dv_device *device, if (result != VK_SUCCESS) goto fail; - _mesa_hash_table_insert(device->meta.color_clear.cache, &key, *pipeline); + (*pipeline)->key = key; + _mesa_hash_table_insert(device->meta.color_clear.cache, + &(*pipeline)->key, *pipeline); mtx_unlock(&device->meta.mtx); return VK_SUCCESS; @@ -653,7 +655,9 @@ get_depth_clear_pipeline(struct v3dv_device *device, if (result != VK_SUCCESS) goto fail; - _mesa_hash_table_insert(device->meta.depth_clear.cache, &key, *pipeline); + (*pipeline)->key = key; + _mesa_hash_table_insert(device->meta.depth_clear.cache, + &(*pipeline)->key, *pipeline); mtx_unlock(&device->meta.mtx); return VK_SUCCESS; diff --git a/src/broadcom/vulkan/v3dv_meta_copy.c b/src/broadcom/vulkan/v3dv_meta_copy.c index aea5278a8db..e1e63071a97 100644 --- a/src/broadcom/vulkan/v3dv_meta_copy.c +++ b/src/broadcom/vulkan/v3dv_meta_copy.c @@ -3609,7 +3609,9 @@ get_blit_pipeline(struct v3dv_device *device, if (!ok) goto fail; - _mesa_hash_table_insert(device->meta.blit.cache[src_type], &key, *pipeline); + memcpy((*pipeline)->key, key, sizeof((*pipeline)->key)); + _mesa_hash_table_insert(device->meta.blit.cache[src_type], + &(*pipeline)->key, *pipeline); mtx_unlock(&device->meta.mtx); return true; diff --git a/src/broadcom/vulkan/v3dv_private.h b/src/broadcom/vulkan/v3dv_private.h index efce022f737..82a5a634749 100644 --- a/src/broadcom/vulkan/v3dv_private.h +++ b/src/broadcom/vulkan/v3dv_private.h @@ -228,23 +228,26 @@ struct v3dv_queue { mtx_t mutex; }; +#define V3DV_META_BLIT_CACHE_KEY_SIZE (4 * sizeof(uint32_t)) + struct v3dv_meta_color_clear_pipeline { VkPipeline pipeline; VkRenderPass pass; bool free_render_pass; + uint64_t key; }; struct v3dv_meta_depth_clear_pipeline { VkPipeline pipeline; + uint64_t key; }; struct v3dv_meta_blit_pipeline { VkPipeline pipeline; VkRenderPass pass; + uint8_t key[V3DV_META_BLIT_CACHE_KEY_SIZE]; }; -#define V3DV_META_BLIT_CACHE_KEY_SIZE (4 * sizeof(uint32_t)) - struct v3dv_pipeline_cache_stats { uint32_t miss; uint32_t hit;