Mesa (master): nir: Print the components referenced for split or packed shader in/outs.

Eric Anholt anholt at kemper.freedesktop.org
Fri Oct 20 23:38:17 UTC 2017


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

Author: Eric Anholt <eric at anholt.net>
Date:   Tue Oct 17 10:41:55 2017 -0700

nir: Print the components referenced for split or packed shader in/outs.

Having 4 variables all called "gl_in_TexCoord0 at n" isn't very informative,
much better to see:

decl_var shader_in INTERP_MODE_NONE float gl_in_TexCoord0 (VARYING_SLOT_VAR0.x, 1, 0)
decl_var shader_in INTERP_MODE_NONE float gl_in_TexCoord0 at 0 (VARYING_SLOT_VAR0.y, 1, 0)
decl_var shader_in INTERP_MODE_NONE float gl_in_TexCoord0 at 1 (VARYING_SLOT_VAR0.z, 1, 0)
decl_var shader_in INTERP_MODE_NONE float gl_in_TexCoord0 at 2 (VARYING_SLOT_VAR0.w, 1, 0)

v2: Handle arrays and structs better (by Timothy)

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

---

 src/compiler/nir/nir_print.c | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/src/compiler/nir/nir_print.c b/src/compiler/nir/nir_print.c
index 0c21e5ba1b..4b7ad5c6ba 100644
--- a/src/compiler/nir/nir_print.c
+++ b/src/compiler/nir/nir_print.c
@@ -447,7 +447,31 @@ print_var_decl(nir_variable *var, print_state *state)
          loc = buf;
       }
 
-      fprintf(fp, " (%s, %u, %u)%s", loc, var->data.driver_location, var->data.binding,
+      /* For shader I/O vars that have been split to components or packed,
+       * print the fractional location within the input/output.
+       */
+      unsigned int num_components =
+         glsl_get_components(glsl_without_array(var->type));
+      const char *components = NULL;
+      char components_local[6] = {'.' /* the rest is 0-filled */};
+      switch (var->data.mode) {
+      case nir_var_shader_in:
+      case nir_var_shader_out:
+         if (num_components != 4 && num_components != 0) {
+            const char *xyzw = "xyzw";
+            for (int i = 0; i < num_components; i++)
+               components_local[i + 1] = xyzw[i + var->data.location_frac];
+
+            components = components_local;
+         }
+         break;
+      default:
+         break;
+      }
+
+      fprintf(fp, " (%s%s, %u, %u)%s", loc,
+              components ? components : "",
+              var->data.driver_location, var->data.binding,
               var->data.compact ? " compact" : "");
    }
 




More information about the mesa-commit mailing list