Mesa (master): anv/pipeline: Call anv_pipeline_compile_* in a loop

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Aug 2 17:29:34 UTC 2018


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

Author: Jason Ekstrand <jason.ekstrand at intel.com>
Date:   Fri Oct 27 10:13:38 2017 -0700

anv/pipeline: Call anv_pipeline_compile_* in a loop

Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com>

---

 src/intel/vulkan/anv_pipeline.c | 56 ++++++++++++++++++++++-------------------
 1 file changed, 30 insertions(+), 26 deletions(-)

diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c
index 3033acbe95..81f04ff7ca 100644
--- a/src/intel/vulkan/anv_pipeline.c
+++ b/src/intel/vulkan/anv_pipeline.c
@@ -1421,35 +1421,39 @@ anv_pipeline_init(struct anv_pipeline *pipeline,
          anv_pipeline_add_compiled_stage(pipeline, s, bin);
    }
 
-   if (stages[MESA_SHADER_VERTEX].entrypoint &&
-       !pipeline->shaders[MESA_SHADER_VERTEX]) {
-      result = anv_pipeline_compile_vs(pipeline, cache, pCreateInfo,
-                                       &stages[MESA_SHADER_VERTEX]);
-      if (result != VK_SUCCESS)
-         goto compile_fail;
-   }
+   for (unsigned s = 0; s < MESA_SHADER_STAGES; s++) {
+      if (!stages[s].entrypoint)
+         continue;
 
-   if (stages[MESA_SHADER_TESS_EVAL].entrypoint &&
-       !pipeline->shaders[MESA_SHADER_TESS_EVAL]) {
-      result = anv_pipeline_compile_tcs_tes(pipeline, cache, pCreateInfo,
-                                            &stages[MESA_SHADER_TESS_CTRL],
-                                            &stages[MESA_SHADER_TESS_EVAL]);
-      if (result != VK_SUCCESS)
-         goto compile_fail;
-   }
+      assert(stages[s].stage == s);
 
-   if (stages[MESA_SHADER_GEOMETRY].entrypoint &&
-       !pipeline->shaders[MESA_SHADER_GEOMETRY]) {
-      result = anv_pipeline_compile_gs(pipeline, cache, pCreateInfo,
-                                       &stages[MESA_SHADER_GEOMETRY]);
-      if (result != VK_SUCCESS)
-         goto compile_fail;
-   }
+      if (pipeline->shaders[s])
+         continue;
 
-   if (stages[MESA_SHADER_FRAGMENT].entrypoint &&
-       !pipeline->shaders[MESA_SHADER_FRAGMENT]) {
-      result = anv_pipeline_compile_fs(pipeline, cache, pCreateInfo,
-                                       &stages[MESA_SHADER_FRAGMENT]);
+      switch (s) {
+      case MESA_SHADER_VERTEX:
+         result = anv_pipeline_compile_vs(pipeline, cache, pCreateInfo,
+                                          &stages[s]);
+         break;
+      case MESA_SHADER_TESS_CTRL:
+         /* Handled with TESS_EVAL */
+         break;
+      case MESA_SHADER_TESS_EVAL:
+         result = anv_pipeline_compile_tcs_tes(pipeline, cache, pCreateInfo,
+                                               &stages[MESA_SHADER_TESS_CTRL],
+                                               &stages[MESA_SHADER_TESS_EVAL]);
+         break;
+      case MESA_SHADER_GEOMETRY:
+         result = anv_pipeline_compile_gs(pipeline, cache, pCreateInfo,
+                                          &stages[s]);
+         break;
+      case MESA_SHADER_FRAGMENT:
+         result = anv_pipeline_compile_fs(pipeline, cache, pCreateInfo,
+                                          &stages[s]);
+         break;
+      default:
+         unreachable("Invalid graphics shader stage");
+      }
       if (result != VK_SUCCESS)
          goto compile_fail;
    }




More information about the mesa-commit mailing list