diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index 19af0cf9903..2a7887349a9 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -1522,6 +1522,25 @@ radv_get_attrib_stride(const VkPipelineVertexInputStateCreateInfo *vi, uint32_t VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT | \ VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT) +static VkGraphicsPipelineLibraryFlagBitsEXT +shader_stage_to_pipeline_library_flags(VkShaderStageFlagBits stage) +{ + assert(util_bitcount(stage) == 1); + switch (stage) { + case VK_SHADER_STAGE_VERTEX_BIT: + case VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT: + case VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT: + case VK_SHADER_STAGE_GEOMETRY_BIT: + case VK_SHADER_STAGE_TASK_BIT_EXT: + case VK_SHADER_STAGE_MESH_BIT_EXT: + return VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT; + case VK_SHADER_STAGE_FRAGMENT_BIT: + return VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT; + default: + unreachable("Invalid shader stage"); + } +} + static VkResult radv_pipeline_import_graphics_info(struct radv_graphics_pipeline *pipeline, struct vk_graphics_pipeline_state *state, @@ -1546,6 +1565,10 @@ radv_pipeline_import_graphics_info(struct radv_graphics_pipeline *pipeline, for (uint32_t i = 0; i < pCreateInfo->stageCount; i++) { const VkPipelineShaderStageCreateInfo *sinfo = &pCreateInfo->pStages[i]; + /* Ignore shader stages that don't need to be imported. */ + if (!(shader_stage_to_pipeline_library_flags(sinfo->stage) & lib_flags)) + continue; + pipeline->active_stages |= sinfo->stage; }