diff --git a/src/amd/vulkan/radv_pipeline_rt.c b/src/amd/vulkan/radv_pipeline_rt.c index 1ecff07e789..dee19c468a8 100644 --- a/src/amd/vulkan/radv_pipeline_rt.c +++ b/src/amd/vulkan/radv_pipeline_rt.c @@ -178,6 +178,8 @@ radv_rt_fill_group_info(struct radv_device *device, dst->any_hit_shader += stage_count; if (dst->intersection_shader != VK_SHADER_UNUSED_KHR) dst->intersection_shader += stage_count; + /* Don't set the shader VA since the handles are part of the pipeline hash */ + dst->handle.recursive_shader_ptr = 0; } idx += library_pipeline->group_count; stage_count += library_pipeline->stage_count; diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index 7bd6a78cb5c..d8db5cc7c96 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -2197,6 +2197,8 @@ enum radv_pipeline_type { }; struct radv_pipeline_group_handle { + uint64_t recursive_shader_ptr; + union { uint32_t general_index; uint32_t closest_hit_index; diff --git a/src/amd/vulkan/radv_rt_shader.c b/src/amd/vulkan/radv_rt_shader.c index 36fb4c0917b..e97ba2efd78 100644 --- a/src/amd/vulkan/radv_rt_shader.c +++ b/src/amd/vulkan/radv_rt_shader.c @@ -244,6 +244,7 @@ enum sbt_type { }; enum sbt_entry { + SBT_RECURSIVE_PTR = offsetof(struct radv_pipeline_group_handle, recursive_shader_ptr), SBT_GENERAL_IDX = offsetof(struct radv_pipeline_group_handle, general_index), SBT_CLOSEST_HIT_IDX = offsetof(struct radv_pipeline_group_handle, closest_hit_index), SBT_INTERSECTION_IDX = offsetof(struct radv_pipeline_group_handle, intersection_index),