diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index 52dc22287e7..34b3dbdaf9f 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -227,6 +227,7 @@ radv_pipeline_stage_init(const VkPipelineShaderStageCreateInfo *sinfo, memset(out_stage, 0, sizeof(*out_stage)); out_stage->stage = vk_to_mesa_shader_stage(sinfo->stage); + out_stage->next_stage = MESA_SHADER_NONE; out_stage->entrypoint = sinfo->pName; out_stage->spec_info = sinfo->pSpecializationInfo; out_stage->feedback.flags = VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT; diff --git a/src/amd/vulkan/radv_pipeline_graphics.c b/src/amd/vulkan/radv_pipeline_graphics.c index 9fdbc601f30..b5516b9c43a 100644 --- a/src/amd/vulkan/radv_pipeline_graphics.c +++ b/src/amd/vulkan/radv_pipeline_graphics.c @@ -2505,7 +2505,13 @@ radv_graphics_shaders_compile(struct radv_device *device, struct vk_pipeline_cac radv_foreach_stage(i, active_nir_stages) { - gl_shader_stage next_stage = radv_get_next_stage(i, active_nir_stages); + gl_shader_stage next_stage; + + if (stages[i].next_stage != MESA_SHADER_NONE) { + next_stage = stages[i].next_stage; + } else { + next_stage = radv_get_next_stage(i, active_nir_stages); + } radv_nir_shader_info_init(i, next_stage, &stages[i].info); } @@ -2638,6 +2644,7 @@ radv_graphics_pipeline_compile(struct radv_graphics_pipeline *pipeline, const Vk stages[i].entrypoint = NULL; stages[i].nir = NULL; stages[i].spirv.size = 0; + stages[i].next_stage = MESA_SHADER_NONE; } for (uint32_t i = 0; i < pCreateInfo->stageCount; i++) { diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index 4fe0518c601..845502e816d 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -2285,6 +2285,7 @@ struct radv_shader_layout { struct radv_shader_stage { gl_shader_stage stage; + gl_shader_stage next_stage; struct { const struct vk_object_base *object;