v3dv/meta: fix hash table insertion
So far we were using directly the local variable key to do the insertion, when the hash table expects a permanent address. We add a key field on all the meta structures (that are already basically a wrapper over v3dv_pipeline). Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6766>
This commit is contained in:
parent
5a59a331e2
commit
e8ceb8f56a
|
@ -575,7 +575,9 @@ get_color_clear_pipeline(struct v3dv_device *device,
|
||||||
if (result != VK_SUCCESS)
|
if (result != VK_SUCCESS)
|
||||||
goto fail;
|
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);
|
mtx_unlock(&device->meta.mtx);
|
||||||
return VK_SUCCESS;
|
return VK_SUCCESS;
|
||||||
|
@ -653,7 +655,9 @@ get_depth_clear_pipeline(struct v3dv_device *device,
|
||||||
if (result != VK_SUCCESS)
|
if (result != VK_SUCCESS)
|
||||||
goto fail;
|
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);
|
mtx_unlock(&device->meta.mtx);
|
||||||
return VK_SUCCESS;
|
return VK_SUCCESS;
|
||||||
|
|
|
@ -3609,7 +3609,9 @@ get_blit_pipeline(struct v3dv_device *device,
|
||||||
if (!ok)
|
if (!ok)
|
||||||
goto fail;
|
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);
|
mtx_unlock(&device->meta.mtx);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -228,23 +228,26 @@ struct v3dv_queue {
|
||||||
mtx_t mutex;
|
mtx_t mutex;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define V3DV_META_BLIT_CACHE_KEY_SIZE (4 * sizeof(uint32_t))
|
||||||
|
|
||||||
struct v3dv_meta_color_clear_pipeline {
|
struct v3dv_meta_color_clear_pipeline {
|
||||||
VkPipeline pipeline;
|
VkPipeline pipeline;
|
||||||
VkRenderPass pass;
|
VkRenderPass pass;
|
||||||
bool free_render_pass;
|
bool free_render_pass;
|
||||||
|
uint64_t key;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct v3dv_meta_depth_clear_pipeline {
|
struct v3dv_meta_depth_clear_pipeline {
|
||||||
VkPipeline pipeline;
|
VkPipeline pipeline;
|
||||||
|
uint64_t key;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct v3dv_meta_blit_pipeline {
|
struct v3dv_meta_blit_pipeline {
|
||||||
VkPipeline pipeline;
|
VkPipeline pipeline;
|
||||||
VkRenderPass pass;
|
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 {
|
struct v3dv_pipeline_cache_stats {
|
||||||
uint32_t miss;
|
uint32_t miss;
|
||||||
uint32_t hit;
|
uint32_t hit;
|
||||||
|
|
Loading…
Reference in New Issue