From 0a15dcf95c218247c0825ae5d637c2d8a7bf586d Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Thu, 4 Jul 2024 09:40:04 +0200 Subject: [PATCH] radv: store the number of RT stages per pipeline to the shaders cache Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_pipeline_cache.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/amd/vulkan/radv_pipeline_cache.c b/src/amd/vulkan/radv_pipeline_cache.c index 6864e73b213..cd2ece54511 100644 --- a/src/amd/vulkan/radv_pipeline_cache.c +++ b/src/amd/vulkan/radv_pipeline_cache.c @@ -408,6 +408,7 @@ struct radv_ray_tracing_stage_cache_data { struct radv_ray_tracing_pipeline_cache_data { uint32_t has_traversal_shader : 1; + uint32_t num_stages; struct radv_ray_tracing_stage_cache_data stages[]; }; @@ -431,7 +432,8 @@ radv_ray_tracing_pipeline_cache_search(struct radv_device *device, struct vk_pip if (data->has_traversal_shader) pipeline->base.base.shaders[MESA_SHADER_INTERSECTION] = radv_shader_ref(pipeline_obj->shaders[idx++]); - for (unsigned i = 0; i < pipeline->non_imported_stage_count; i++) { + const uint32_t num_stages = data->num_stages; + for (unsigned i = 0; i < num_stages; i++) { pipeline->stages[i].stack_size = data->stages[i].stack_size; pipeline->stages[i].info = data->stages[i].info; memcpy(pipeline->stages[i].sha1, data->stages[i].sha1, sizeof(pipeline->stages[i].sha1)); @@ -486,6 +488,8 @@ radv_ray_tracing_pipeline_cache_insert(struct radv_device *device, struct vk_pip if (data->has_traversal_shader) pipeline_obj->shaders[idx++] = radv_shader_ref(pipeline->base.base.shaders[MESA_SHADER_INTERSECTION]); + data->num_stages = num_stages; + for (unsigned i = 0; i < num_stages; ++i) { data->stages[i].stack_size = pipeline->stages[i].stack_size; data->stages[i].info = pipeline->stages[i].info;