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

Author: Emma Anholt <[email protected]>
Date:   Thu Apr  6 17:13:07 2023 -0700

anv: Refactor repeated pipeline creation feedback output code.

Reviewed-by: Lionel Landwerlin <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15637>

---

 src/intel/vulkan/anv_pipeline.c | 58 ++++++++++++++++-------------------------
 1 file changed, 22 insertions(+), 36 deletions(-)

diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c
index 7a1a0988ae7..d30a933fdc6 100644
--- a/src/intel/vulkan/anv_pipeline.c
+++ b/src/intel/vulkan/anv_pipeline.c
@@ -1886,6 +1886,25 @@ anv_pipeline_nir_preprocess(struct anv_pipeline 
*pipeline, nir_shader *nir)
    }
 }
 
+static void
+anv_fill_pipeline_creation_feedback(VkPipelineCreationFeedbackEXT 
*pipeline_feedback,
+                                    const VkGraphicsPipelineCreateInfo *info,
+                                    struct anv_pipeline_stage *stages)
+{
+   const VkPipelineCreationFeedbackCreateInfo *create_feedback =
+      vk_find_struct_const(info->pNext, 
PIPELINE_CREATION_FEEDBACK_CREATE_INFO);
+   if (create_feedback) {
+      *create_feedback->pPipelineCreationFeedback = *pipeline_feedback;
+
+      uint32_t stage_count = 
create_feedback->pipelineStageCreationFeedbackCount;
+      assert(stage_count == 0 || info->stageCount == stage_count);
+      for (uint32_t i = 0; i < stage_count; i++) {
+         gl_shader_stage s = vk_to_mesa_shader_stage(info->pStages[i].stage);
+         create_feedback->pPipelineStageCreationFeedbacks[i] = 
stages[s].feedback;
+      }
+   }
+}
+
 static VkResult
 anv_graphics_pipeline_compile(struct anv_graphics_base_pipeline *pipeline,
                               struct anv_pipeline_stage *stages,
@@ -2282,18 +2301,7 @@ done:
 
    pipeline_feedback->duration = os_time_get_nano() - pipeline_start;
 
-   const VkPipelineCreationFeedbackCreateInfo *create_feedback =
-      vk_find_struct_const(info->pNext, 
PIPELINE_CREATION_FEEDBACK_CREATE_INFO);
-   if (create_feedback) {
-      *create_feedback->pPipelineCreationFeedback = *pipeline_feedback;
-
-      uint32_t stage_count = 
create_feedback->pipelineStageCreationFeedbackCount;
-      assert(stage_count == 0 || info->stageCount == stage_count);
-      for (uint32_t i = 0; i < stage_count; i++) {
-         gl_shader_stage s = vk_to_mesa_shader_stage(info->pStages[i].stage);
-         create_feedback->pPipelineStageCreationFeedbacks[i] = 
stages[s].feedback;
-      }
-   }
+   anv_fill_pipeline_creation_feedback(pipeline_feedback, info, stages);
 
    if (pipeline->shaders[MESA_SHADER_FRAGMENT]) {
       pipeline->fragment_dynamic =
@@ -2858,18 +2866,7 @@ anv_graphics_lib_pipeline_create(struct anv_device 
*device,
 
    pipeline_feedback.duration = os_time_get_nano() - pipeline_start;
 
-   const VkPipelineCreationFeedbackCreateInfo *create_feedback =
-      vk_find_struct_const(pCreateInfo->pNext, 
PIPELINE_CREATION_FEEDBACK_CREATE_INFO);
-   if (create_feedback) {
-      *create_feedback->pPipelineCreationFeedback = pipeline_feedback;
-
-      uint32_t stage_count = 
create_feedback->pipelineStageCreationFeedbackCount;
-      assert(stage_count == 0 || pCreateInfo->stageCount == stage_count);
-      for (uint32_t i = 0; i < stage_count; i++) {
-         gl_shader_stage s = 
vk_to_mesa_shader_stage(pCreateInfo->pStages[i].stage);
-         create_feedback->pPipelineStageCreationFeedbacks[i] = 
stages[s].feedback;
-      }
-   }
+   anv_fill_pipeline_creation_feedback(&pipeline_feedback, pCreateInfo, 
stages);
 
    anv_graphics_lib_validate_shaders(pipeline,
                                      pCreateInfo->flags & 
VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT);
@@ -3007,18 +3004,7 @@ anv_graphics_pipeline_create(struct anv_device *device,
 
    pipeline_feedback.duration = os_time_get_nano() - pipeline_start;
 
-   const VkPipelineCreationFeedbackCreateInfo *create_feedback =
-      vk_find_struct_const(pCreateInfo->pNext, 
PIPELINE_CREATION_FEEDBACK_CREATE_INFO);
-   if (create_feedback) {
-      *create_feedback->pPipelineCreationFeedback = pipeline_feedback;
-
-      uint32_t stage_count = 
create_feedback->pipelineStageCreationFeedbackCount;
-      assert(stage_count == 0 || pCreateInfo->stageCount == stage_count);
-      for (uint32_t i = 0; i < stage_count; i++) {
-         gl_shader_stage s = 
vk_to_mesa_shader_stage(pCreateInfo->pStages[i].stage);
-         create_feedback->pPipelineStageCreationFeedbacks[i] = 
stages[s].feedback;
-      }
-   }
+   anv_fill_pipeline_creation_feedback(&pipeline_feedback, pCreateInfo, 
stages);
 
    *pPipeline = anv_pipeline_to_handle(&pipeline->base.base);
 

Reply via email to