[Mesa-dev] [PATCH] i965: Print input/output VUE maps on INTEL_DEBUG=vs, gs.

Kristian Høgsberg krh at bitplanet.net
Wed Nov 18 13:24:56 PST 2015


On Tue, Nov 10, 2015 at 12:48 AM, Kenneth Graunke <kenneth at whitecape.org> wrote:
> I've been carrying around a patch to do this for the last few months,
> and it's been exceedingly useful for debugging GS and tessellation
> problems.  I've caught lots of bugs by inspecting the interface
> expectations of two adjacent stages.
>
> It's not that much spam, so I figure we may as well just print it.

We do print a lot for vs debug etc, but this doesn't add much, and is
certainly useful.

Reviewed-by: Kristian Høgsberg <krh at bitplanet.net>


> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
>  src/mesa/drivers/dri/i965/brw_compiler.h          |  2 ++
>  src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp |  6 +++++
>  src/mesa/drivers/dri/i965/brw_vs.c                |  6 ++++-
>  src/mesa/drivers/dri/i965/brw_vue_map.c           | 27 +++++++++++++++++++++++
>  4 files changed, 40 insertions(+), 1 deletion(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_compiler.h b/src/mesa/drivers/dri/i965/brw_compiler.h
> index f022f38..e3a26d6 100644
> --- a/src/mesa/drivers/dri/i965/brw_compiler.h
> +++ b/src/mesa/drivers/dri/i965/brw_compiler.h
> @@ -458,6 +458,8 @@ struct brw_vue_map {
>     int num_slots;
>  };
>
> +void brw_print_vue_map(FILE *fp, const struct brw_vue_map *vue_map);
> +
>  /**
>   * Convert a VUE slot number into a byte offset within the VUE.
>   */
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp
> index 49c1083..1a09f76 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp
> @@ -812,6 +812,12 @@ brw_compile_gs(const struct brw_compiler *compiler, void *log_data,
>     /* Now that prog_data setup is done, we are ready to actually compile the
>      * program.
>      */
> +   if (unlikely(INTEL_DEBUG & DEBUG_GS)) {
> +      fprintf(stderr, "GS Input ");
> +      brw_print_vue_map(stderr, &c.input_vue_map);
> +      fprintf(stderr, "GS Output ");
> +      brw_print_vue_map(stderr, &prog_data->base.vue_map);
> +   }
>
>     if (compiler->scalar_gs) {
>        /* TODO: Support instanced GS.  We have basically no tests... */
> diff --git a/src/mesa/drivers/dri/i965/brw_vs.c b/src/mesa/drivers/dri/i965/brw_vs.c
> index 0b805b1..967448e 100644
> --- a/src/mesa/drivers/dri/i965/brw_vs.c
> +++ b/src/mesa/drivers/dri/i965/brw_vs.c
> @@ -159,9 +159,13 @@ brw_codegen_vs_prog(struct brw_context *brw,
>        start_time = get_time();
>     }
>
> -   if (unlikely(INTEL_DEBUG & DEBUG_VS))
> +   if (unlikely(INTEL_DEBUG & DEBUG_VS)) {
>        brw_dump_ir("vertex", prog, vs ? &vs->base : NULL, &vp->program.Base);
>
> +      fprintf(stderr, "VS Output ");
> +      brw_print_vue_map(stderr, &prog_data.base.vue_map);
> +   }
> +
>     int st_index = -1;
>     if (INTEL_DEBUG & DEBUG_SHADER_TIME)
>        st_index = brw_get_shader_time_index(brw, prog, &vp->program.Base, ST_VS);
> diff --git a/src/mesa/drivers/dri/i965/brw_vue_map.c b/src/mesa/drivers/dri/i965/brw_vue_map.c
> index 45662bd..edb1608 100644
> --- a/src/mesa/drivers/dri/i965/brw_vue_map.c
> +++ b/src/mesa/drivers/dri/i965/brw_vue_map.c
> @@ -178,3 +178,30 @@ brw_compute_vue_map(const struct brw_device_info *devinfo,
>
>     vue_map->num_slots = separate ? slot + 1 : slot;
>  }
> +
> +static const char *
> +varying_name(brw_varying_slot slot)
> +{
> +   if (slot < VARYING_SLOT_MAX)
> +      return gl_varying_slot_name(slot);
> +
> +   static const char *brw_names[] = {
> +      [BRW_VARYING_SLOT_NDC - VARYING_SLOT_MAX] = "BRW_VARYING_SLOT_NDC",
> +      [BRW_VARYING_SLOT_PAD - VARYING_SLOT_MAX] = "BRW_VARYING_SLOT_PAD",
> +      [BRW_VARYING_SLOT_PNTC - VARYING_SLOT_MAX] = "BRW_VARYING_SLOT_PNTC",
> +   };
> +
> +   return brw_names[slot - VARYING_SLOT_MAX];
> +}
> +
> +void
> +brw_print_vue_map(FILE *fp, const struct brw_vue_map *vue_map)
> +{
> +   fprintf(fp, "VUE map (%d slots, %s)\n",
> +           vue_map->num_slots, vue_map->separate ? "SSO" : "non-SSO");
> +   for (int i = 0; i < vue_map->num_slots; i++) {
> +      fprintf(fp, "  [%d] %s\n", i,
> +              varying_name(vue_map->slot_to_varying[i]));
> +   }
> +   fprintf(fp, "\n");
> +}
> --
> 2.6.2
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list