radv/meta: stop using string keys also for DGC and query objects

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33405>
This commit is contained in:
Samuel Pitoiset 2025-02-04 17:04:21 +01:00 committed by Marge Bot
parent 5443c23983
commit 03c3250e04
3 changed files with 24 additions and 19 deletions

View file

@ -138,6 +138,14 @@ enum radv_meta_object_key_type {
RADV_META_OBJECT_KEY_RESOLVE_FS,
RADV_META_OBJECT_KEY_RESOLVE_COLOR_FS,
RADV_META_OBJECT_KEY_RESOLVE_DS_FS,
RADV_META_OBJECT_KEY_DGC,
RADV_META_OBJECT_KEY_QUERY,
RADV_META_OBJECT_KEY_QUERY_OCCLUSION,
RADV_META_OBJECT_KEY_QUERY_PIPELINE_STATS,
RADV_META_OBJECT_KEY_QUERY_TFB,
RADV_META_OBJECT_KEY_QUERY_TIMESTAMP,
RADV_META_OBJECT_KEY_QUERY_PRIMS_GEN,
RADV_META_OBJECT_KEY_QUERY_MESH_PRIMS_GEN,
};
VkResult radv_device_init_meta(struct radv_device *device);

View file

@ -2670,7 +2670,7 @@ build_dgc_prepare_shader(struct radv_device *dev, struct radv_indirect_command_l
static VkResult
radv_create_dgc_pipeline(struct radv_device *device, struct radv_indirect_command_layout *layout)
{
const char *key_data = "radv-dgc-layout";
enum radv_meta_object_key_type key = RADV_META_OBJECT_KEY_DGC;
VkResult result;
const VkDescriptorSetLayoutBinding binding = {
@ -2692,8 +2692,8 @@ radv_create_dgc_pipeline(struct radv_device *device, struct radv_indirect_comman
.size = sizeof(struct radv_dgc_params),
};
result = vk_meta_get_pipeline_layout(&device->vk, &device->meta_state.device, &desc_info, &pc_range, key_data,
strlen(key_data), &layout->pipeline_layout);
result = vk_meta_get_pipeline_layout(&device->vk, &device->meta_state.device, &desc_info, &pc_range, &key,
sizeof(key), &layout->pipeline_layout);
if (result != VK_SUCCESS)
return result;

View file

@ -1742,7 +1742,7 @@ radv_copy_ms_prim_query_result(struct radv_cmd_buffer *cmd_buffer, struct radv_q
static VkResult
create_layout(struct radv_device *device, VkPipelineLayout *layout_out)
{
const char *key_data = "radv-query";
enum radv_meta_object_key_type key = RADV_META_OBJECT_KEY_QUERY;
const VkDescriptorSetLayoutBinding bindings[] = {
{.binding = 0,
@ -1769,15 +1769,14 @@ create_layout(struct radv_device *device, VkPipelineLayout *layout_out)
.size = 20,
};
return vk_meta_get_pipeline_layout(&device->vk, &device->meta_state.device, &desc_info, &pc_range, key_data,
strlen(key_data), layout_out);
return vk_meta_get_pipeline_layout(&device->vk, &device->meta_state.device, &desc_info, &pc_range, &key, sizeof(key),
layout_out);
}
static VkResult
get_pipeline(struct radv_device *device, VkQueryType query_type, VkPipeline *pipeline_out, VkPipelineLayout *layout_out)
{
char *query_name;
char key_data[64];
enum radv_meta_object_key_type key = 0;
VkResult result;
nir_shader *cs;
@ -1787,30 +1786,28 @@ get_pipeline(struct radv_device *device, VkQueryType query_type, VkPipeline *pip
switch (query_type) {
case VK_QUERY_TYPE_OCCLUSION:
query_name = "occlusion";
key = RADV_META_OBJECT_KEY_QUERY_OCCLUSION;
break;
case VK_QUERY_TYPE_PIPELINE_STATISTICS:
query_name = "pipeline-stats";
key = RADV_META_OBJECT_KEY_QUERY_PIPELINE_STATS;
break;
case VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT:
query_name = "tfb";
key = RADV_META_OBJECT_KEY_QUERY_TFB;
break;
case VK_QUERY_TYPE_TIMESTAMP:
query_name = "timestamp";
key = RADV_META_OBJECT_KEY_QUERY_TIMESTAMP;
break;
case VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT:
query_name = "pg";
key = RADV_META_OBJECT_KEY_QUERY_PRIMS_GEN;
break;
case VK_QUERY_TYPE_MESH_PRIMITIVES_GENERATED_EXT:
query_name = "ms-prim-gen";
key = RADV_META_OBJECT_KEY_QUERY_MESH_PRIMS_GEN;
break;
default:
unreachable("invalid query type");
}
snprintf(key_data, sizeof(key_data), "radv-query-%s", query_name);
VkPipeline pipeline_from_cache = vk_meta_lookup_pipeline(&device->meta_state.device, key_data, strlen(key_data));
VkPipeline pipeline_from_cache = vk_meta_lookup_pipeline(&device->meta_state.device, &key, sizeof(key));
if (pipeline_from_cache != VK_NULL_HANDLE) {
*pipeline_out = pipeline_from_cache;
return VK_SUCCESS;
@ -1854,8 +1851,8 @@ get_pipeline(struct radv_device *device, VkQueryType query_type, VkPipeline *pip
.layout = *layout_out,
};
result = vk_meta_create_compute_pipeline(&device->vk, &device->meta_state.device, &pipeline_info, key_data,
strlen(key_data), pipeline_out);
result = vk_meta_create_compute_pipeline(&device->vk, &device->meta_state.device, &pipeline_info, &key, sizeof(key),
pipeline_out);
ralloc_free(cs);
return result;