[Mesa-dev] [PATCH 2/2] nir: Print the components referenced for split or packed shader in/outs.

Timothy Arceri tarceri at itsqueeze.com
Fri Oct 20 06:33:25 UTC 2017


On 18/10/17 07:52, Eric Anholt wrote:
> 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)
> ---
>   src/compiler/nir/nir_print.c | 25 ++++++++++++++++++++++++-
>   1 file changed, 24 insertions(+), 1 deletion(-)
> 
> diff --git a/src/compiler/nir/nir_print.c b/src/compiler/nir/nir_print.c
> index f4811fe8bc11..df7a2057bfb9 100644
> --- a/src/compiler/nir/nir_print.c
> +++ b/src/compiler/nir/nir_print.c
> @@ -447,7 +447,30 @@ 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(var->type);

This needs to be:

glsl_without_array(glsl_get_components(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) {
> +            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-dev mailing list