From 03c3250e04a1ba85e3e19b99adfcffed8e70407b Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Tue, 4 Feb 2025 17:04:21 +0100 Subject: [PATCH] radv/meta: stop using string keys also for DGC and query objects Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/meta/radv_meta.h | 8 ++++++++ src/amd/vulkan/radv_dgc.c | 6 +++--- src/amd/vulkan/radv_query.c | 29 +++++++++++++---------------- 3 files changed, 24 insertions(+), 19 deletions(-) diff --git a/src/amd/vulkan/meta/radv_meta.h b/src/amd/vulkan/meta/radv_meta.h index c15c7da0213..134de14b680 100644 --- a/src/amd/vulkan/meta/radv_meta.h +++ b/src/amd/vulkan/meta/radv_meta.h @@ -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); diff --git a/src/amd/vulkan/radv_dgc.c b/src/amd/vulkan/radv_dgc.c index 4aac8297535..74f70a7705a 100644 --- a/src/amd/vulkan/radv_dgc.c +++ b/src/amd/vulkan/radv_dgc.c @@ -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; diff --git a/src/amd/vulkan/radv_query.c b/src/amd/vulkan/radv_query.c index e2bcdbf1103..1e43bcefb81 100644 --- a/src/amd/vulkan/radv_query.c +++ b/src/amd/vulkan/radv_query.c @@ -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;