From: Emma Anholt Date: Thu, 4 May 2023 23:14:59 +0000 (-0700) Subject: tu: Ignore unused shader stages in pipeline library creation. X-Git-Tag: upstream/23.3.3~7573 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b44d47748918d4eb8889d076fcb40431a8bfddcf;p=platform%2Fupstream%2Fmesa.git tu: Ignore unused shader stages in pipeline library creation. Cc: mesa-stable Part-of: --- diff --git a/src/freedreno/ci/freedreno-a618-fails.txt b/src/freedreno/ci/freedreno-a618-fails.txt index 84881ad..8f33731 100644 --- a/src/freedreno/ci/freedreno-a618-fails.txt +++ b/src/freedreno/ci/freedreno-a618-fails.txt @@ -365,14 +365,6 @@ SRGBReadWritePixels,Fail KHR-GL46.polygon_offset_clamp.PolygonOffsetClampMinMax,Fail KHR-GL46.polygon_offset_clamp.PolygonOffsetClampZeroInfinity,Fail dEQP-VK.pipeline.fast_linked_library.misc.interpolate_at_sample_no_sample_shading,Crash -dEQP-VK.pipeline.fast_linked_library.misc.unused_shader_stages,Crash -dEQP-VK.pipeline.fast_linked_library.misc.unused_shader_stages_include_geom,Crash -dEQP-VK.pipeline.fast_linked_library.misc.unused_shader_stages_include_tess,Crash -dEQP-VK.pipeline.fast_linked_library.misc.unused_shader_stages_include_tess_include_geom,Crash -dEQP-VK.pipeline.pipeline_library.misc.unused_shader_stages,Crash -dEQP-VK.pipeline.pipeline_library.misc.unused_shader_stages_include_geom,Crash -dEQP-VK.pipeline.pipeline_library.misc.unused_shader_stages_include_tess,Crash -dEQP-VK.pipeline.pipeline_library.misc.unused_shader_stages_include_tess_include_geom,Crash dEQP-VK.transform_feedback.simple.lines_or_triangles_line_strip_1,Fail dEQP-VK.transform_feedback.simple.lines_or_triangles_line_strip_3,Fail dEQP-VK.transform_feedback.simple.lines_or_triangles_triangle_strip_1,Fail diff --git a/src/freedreno/ci/freedreno-a630-fails.txt b/src/freedreno/ci/freedreno-a630-fails.txt index 5fa993d..dad9368 100644 --- a/src/freedreno/ci/freedreno-a630-fails.txt +++ b/src/freedreno/ci/freedreno-a630-fails.txt @@ -375,19 +375,10 @@ spec@!opengl 1.1@line-smooth-stipple,Fail # New CTS failures in 1.3.5.0 dEQP-VK.pipeline.fast_linked_library.misc.interpolate_at_sample_no_sample_shading,Crash -dEQP-VK.pipeline.fast_linked_library.misc.unused_shader_stages_include_geom,Crash -dEQP-VK.pipeline.fast_linked_library.misc.unused_shader_stages_include_tess_include_geom,Crash -dEQP-VK.pipeline.fast_linked_library.misc.unused_shader_stages_include_tess,Crash -dEQP-VK.pipeline.fast_linked_library.misc.unused_shader_stages,Crash -dEQP-VK.pipeline.pipeline_library.misc.unused_shader_stages_include_geom,Crash -dEQP-VK.pipeline.pipeline_library.misc.unused_shader_stages_include_tess_include_geom,Crash -dEQP-VK.pipeline.pipeline_library.misc.unused_shader_stages_include_tess,Crash -dEQP-VK.pipeline.pipeline_library.misc.unused_shader_stages,Crash dEQP-VK.transform_feedback.simple.lines_or_triangles_line_strip_1,Fail dEQP-VK.transform_feedback.simple.lines_or_triangles_line_strip_3,Fail dEQP-VK.transform_feedback.simple.lines_or_triangles_triangle_strip_1,Fail dEQP-VK.transform_feedback.simple.lines_or_triangles_triangle_strip_3,Fail -gmem-dEQP-VK.pipeline.fast_linked_library.misc.unused_shader_stages_include_geom,Crash gmem-dEQP-VK.transform_feedback.simple.lines_or_triangles_triangle_strip_1,Fail spec@arb_vertex_attrib_64bit@execution@unused-sub-dvec4-01,Crash spec@arb_vertex_attrib_64bit@execution@unused-sub-dvec4-02,Crash diff --git a/src/freedreno/vulkan/tu_pipeline.cc b/src/freedreno/vulkan/tu_pipeline.cc index 07dfe0e..93d295f 100644 --- a/src/freedreno/vulkan/tu_pipeline.cc +++ b/src/freedreno/vulkan/tu_pipeline.cc @@ -3140,6 +3140,9 @@ tu_pipeline_builder_compile_shaders(struct tu_pipeline_builder *builder, bool must_compile = builder->state & VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT; for (uint32_t i = 0; i < builder->create_info->stageCount; i++) { + if (!(builder->active_stages & builder->create_info->pStages[i].stage)) + continue; + gl_shader_stage stage = vk_to_mesa_shader_stage(builder->create_info->pStages[i].stage); stage_infos[stage] = &builder->create_info->pStages[i]; @@ -4851,6 +4854,24 @@ tu_pipeline_finish(struct tu_pipeline *pipeline, ralloc_free(pipeline->executables_mem_ctx); } +static VkGraphicsPipelineLibraryFlagBitsEXT +vk_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 tu_pipeline_builder_build(struct tu_pipeline_builder *builder, @@ -4872,7 +4893,13 @@ tu_pipeline_builder_build(struct tu_pipeline_builder *builder, VkShaderStageFlags stages = 0; for (unsigned i = 0; i < builder->create_info->stageCount; i++) { - stages |= builder->create_info->pStages[i].stage; + VkShaderStageFlagBits stage = builder->create_info->pStages[i].stage; + + /* Ignore shader stages that don't need to be imported. */ + if (!(vk_shader_stage_to_pipeline_library_flags(stage) & builder->state)) + continue; + + stages |= stage; } builder->active_stages = stages;