Module: Mesa
Branch: main
Commit: b44d47748918d4eb8889d076fcb40431a8bfddcf
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b44d47748918d4eb8889d076fcb40431a8bfddcf

Author: Emma Anholt <[email protected]>
Date:   Thu May  4 16:14:59 2023 -0700

tu: Ignore unused shader stages in pipeline library creation.

Cc: mesa-stable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22865>

---

 src/freedreno/ci/freedreno-a618-fails.txt |  8 --------
 src/freedreno/ci/freedreno-a630-fails.txt |  9 ---------
 src/freedreno/vulkan/tu_pipeline.cc       | 29 ++++++++++++++++++++++++++++-
 3 files changed, 28 insertions(+), 18 deletions(-)

diff --git a/src/freedreno/ci/freedreno-a618-fails.txt 
b/src/freedreno/ci/freedreno-a618-fails.txt
index 84881ad478d..8f337319a99 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 5fa993d57d5..dad93687d13 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 07dfe0e9b16..93d295f8e86 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;
 

Reply via email to