Mesa (master): i965/nir: Refactor input/ output lowering setup into helpers.

Kenneth Graunke kwg at kemper.freedesktop.org
Thu Oct 1 18:01:08 UTC 2015


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

Author: Kenneth Graunke <kenneth at whitecape.org>
Date:   Wed Aug 26 03:07:29 2015 -0700

i965/nir: Refactor input/output lowering setup into helpers.

The code for input lowering is going to get significantly more
complicated shortly, so I wanted to pull it out.  Vertex shader inputs
are handled nearly identically regardless of vec4/scalar mode, so I
opted to not split that.

I thought about having each function actually do the lowering, but one
pass through nir_lower_io that handles all types (which weren't handled
earlier) is probably more efficient.

Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
Reviewed-by: Matt Turner <mattst88 at gmail.com>

---

 src/mesa/drivers/dri/i965/brw_nir.c |   46 ++++++++++++++++++++---------------
 1 file changed, 26 insertions(+), 20 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_nir.c b/src/mesa/drivers/dri/i965/brw_nir.c
index 40a8326..2812fd7 100644
--- a/src/mesa/drivers/dri/i965/brw_nir.c
+++ b/src/mesa/drivers/dri/i965/brw_nir.c
@@ -28,6 +28,26 @@
 #include "program/prog_to_nir.h"
 
 static void
+brw_nir_lower_inputs(nir_shader *nir,
+                     const struct gl_program *prog,
+                     bool is_scalar)
+{
+   nir_assign_var_locations(&nir->inputs, &nir->num_inputs,
+                            is_scalar ? type_size_scalar : type_size_vec4);
+}
+
+static void
+brw_nir_lower_outputs(nir_shader *nir, bool is_scalar)
+{
+   if (is_scalar) {
+      nir_assign_var_locations(&nir->outputs, &nir->num_outputs, type_size_scalar);
+   } else {
+      foreach_list_typed(nir_variable, var, node, &nir->outputs)
+         var->data.driver_location = var->data.location;
+   }
+}
+
+static void
 nir_optimize(nir_shader *nir, bool is_scalar)
 {
    bool progress;
@@ -122,26 +142,12 @@ brw_create_nir(struct brw_context *brw,
    /* Get rid of split copies */
    nir_optimize(nir, is_scalar);
 
-   if (is_scalar) {
-      nir_assign_var_locations(&nir->uniforms,
-                               &nir->num_uniforms,
-                               type_size_scalar);
-      nir_assign_var_locations(&nir->inputs, &nir->num_inputs, type_size_scalar);
-      nir_assign_var_locations(&nir->outputs, &nir->num_outputs, type_size_scalar);
-      nir_lower_io(nir, -1, type_size_scalar);
-   } else {
-      nir_assign_var_locations(&nir->uniforms,
-                               &nir->num_uniforms,
-                               type_size_vec4);
-
-      nir_assign_var_locations(&nir->inputs, &nir->num_inputs, type_size_vec4);
-
-      foreach_list_typed(nir_variable, var, node, &nir->outputs)
-         var->data.driver_location = var->data.location;
-
-      nir_lower_io(nir, -1, type_size_vec4);
-   }
-
+   brw_nir_lower_inputs(nir, prog, is_scalar);
+   brw_nir_lower_outputs(nir, is_scalar);
+   nir_assign_var_locations(&nir->uniforms,
+                            &nir->num_uniforms,
+                            is_scalar ? type_size_scalar : type_size_vec4);
+   nir_lower_io(nir, -1, is_scalar ? type_size_scalar : type_size_vec4);
    nir_validate_shader(nir);
 
    nir_remove_dead_variables(nir);




More information about the mesa-commit mailing list