Module: Mesa Branch: main Commit: a7844772699810c10eb0292b13f0f30706b03e46 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a7844772699810c10eb0292b13f0f30706b03e46
Author: Konstantin Seurer <konstantin.seu...@gmail.com> Date: Thu Sep 14 16:21:39 2023 +0200 radv: Don't store library stack sizes They are already imported in radv_rt_fill_stage_info. Reviewed-by: Friedrich Vock <friedrich.v...@gmx.de> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25224> --- src/amd/vulkan/radv_pipeline_cache.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/amd/vulkan/radv_pipeline_cache.c b/src/amd/vulkan/radv_pipeline_cache.c index 3f2fb9222e7..4d04f8b2c20 100644 --- a/src/amd/vulkan/radv_pipeline_cache.c +++ b/src/amd/vulkan/radv_pipeline_cache.c @@ -434,7 +434,10 @@ radv_ray_tracing_pipeline_cache_search(struct radv_device *device, struct vk_pip if (!is_library) pipeline->base.base.shaders[MESA_SHADER_INTERSECTION] = radv_shader_ref(pipeline_obj->shaders[idx++]); + uint32_t *stack_sizes = pipeline_obj->data; for (unsigned i = 0; i < pCreateInfo->stageCount; i++) { + pipeline->stages[i].stack_size = stack_sizes[i]; + if (radv_ray_tracing_stage_is_compiled(&pipeline->stages[i])) pipeline->stages[i].shader = &radv_shader_ref(pipeline_obj->shaders[idx++])->base; @@ -445,11 +448,7 @@ radv_ray_tracing_pipeline_cache_search(struct radv_device *device, struct vk_pip } assert(idx == pipeline_obj->num_shaders); - assert(pipeline->stage_count == pipeline_obj->data_size / sizeof(uint32_t)); - - uint32_t *stack_sizes = pipeline_obj->data; - for (unsigned i = 0; i < pipeline->stage_count; i++) - pipeline->stages[i].stack_size = stack_sizes[i]; + assert(pCreateInfo->stageCount == pipeline_obj->data_size / sizeof(uint32_t)); if (cache_hit && cache != device->mem_cache) { const VkPipelineCreationFeedbackCreateInfo *creation_feedback = @@ -487,23 +486,22 @@ radv_ray_tracing_pipeline_cache_insert(struct radv_device *device, struct vk_pip num_shaders += radv_ray_tracing_stage_is_compiled(&pipeline->stages[i]) ? 1 : 0; struct radv_pipeline_cache_object *pipeline_obj = - radv_pipeline_cache_object_create(&device->vk, num_shaders, sha1, pipeline->stage_count * sizeof(uint32_t)); + radv_pipeline_cache_object_create(&device->vk, num_shaders, sha1, num_stages * sizeof(uint32_t)); unsigned idx = 0; if (pipeline->base.base.shaders[MESA_SHADER_INTERSECTION]) pipeline_obj->shaders[idx++] = radv_shader_ref(pipeline->base.base.shaders[MESA_SHADER_INTERSECTION]); + uint32_t *stack_sizes = pipeline_obj->data; for (unsigned i = 0; i < num_stages; ++i) { + stack_sizes[i] = pipeline->stages[i].stack_size; + if (radv_ray_tracing_stage_is_compiled(&pipeline->stages[i])) pipeline_obj->shaders[idx++] = radv_shader_ref(container_of(pipeline->stages[i].shader, struct radv_shader, base)); } assert(idx == num_shaders); - uint32_t *stack_sizes = pipeline_obj->data; - for (unsigned i = 0; i < pipeline->stage_count; i++) - stack_sizes[i] = pipeline->stages[i].stack_size; - /* Add the object to the cache */ pipeline->base.base.cache_object = vk_pipeline_cache_add_object(cache, &pipeline_obj->base); }