[Mesa-dev] [PATCH v3 01/13] mesa/st/glsl_to_tgsi: Add method to collect some statistics

Nicolai Hähnle nhaehnle at gmail.com
Tue May 1 09:57:06 UTC 2018


Please make this thread-safe.

Thanks,
Nicolai


On 28.04.2018 21:30, Gert Wollny wrote:
> When mesa is compiled in debug mode then this adds the possibility
> to print out some statistics about the translated shaders to a file.
> 
> The functionality is enabled by setting the environment variable
> 
>     GLSL_TO_TGSI_PRINT_STATS
> 
> to the file name where the statistics should be collected. The file is
> opened in append mode so that statistics from various runs will be
> accumulated.
> 
> Signed-off-by: Gert Wollny <gw.fossdev at gmail.com>
> ---
>   src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 55 ++++++++++++++++++++++++++++++
>   1 file changed, 55 insertions(+)
> 
> diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> index b321112cf8..1614367a01 100644
> --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> @@ -66,6 +66,38 @@
>   
>   #define MAX_GLSL_TEXTURE_OFFSET 4
>   
> +#ifndef NDEBUG
> +#include <fstream>
> +#include <ios>
> +/* Prepare to make it possible to specify log file */
> +static std::ofstream stats_log;
> +
> +/* Helper function to check whether we want to write some statistics
> + * of the shader conversion.
> + */
> +static inline bool print_stats_enabled ()
> +{
> +   static int stats_enabled = 0;
> +   if (!stats_enabled) {
> +      const char *stats_filename = getenv("GLSL_TO_TGSI_PRINT_STATS");
> +      if (stats_filename) {
> +         bool write_header = std::ifstream(stats_filename).fail();
> +         stats_log.open(stats_filename, std::ios_base::out | std::ios_base::app);
> +         stats_enabled = stats_log.good() ? 1 : -1;
> +         if (write_header)
> +            stats_log << "arrays,temps,temps in arrays,total,instructions\n";
> +      } else {
> +         stats_enabled = -1;
> +      }
> +   }
> +   return stats_enabled > 0;
> +}
> +#define PRINT_STATS(X) if (print_stats_enabled()) do { X; } while (false);
> +#else
> +#define PRINT_STATS(X)
> +#endif
> +
> +
>   static unsigned is_precise(const ir_variable *ir)
>   {
>      if (!ir)
> @@ -345,6 +377,8 @@ public:
>                          st_dst_reg *l, st_src_reg *r,
>                          st_src_reg *cond, bool cond_swap);
>   
> +   void print_stats();
> +
>      void *mem_ctx;
>   };
>   
> @@ -5419,6 +5453,25 @@ glsl_to_tgsi_visitor::renumber_registers(void)
>      ralloc_free(first_writes);
>   }
>   
> +#ifndef NDEBUG
> +void glsl_to_tgsi_visitor::print_stats()
> +{
> +   int narray_registers = 0;
> +   for (unsigned i = 0; i < this->next_array; ++i)
> +      narray_registers += this->array_sizes[i];
> +
> +   int ninstructions = 0;
> +   foreach_in_list(glsl_to_tgsi_instruction, inst, &instructions) {
> +      ++ninstructions;
> +   }
> +
> +   stats_log << next_array << ", "
> +             << next_temp << ", "
> +             << narray_registers << ", "
> +             << next_temp + narray_registers << ", "
> +             << ninstructions << "\n";
> +}
> +#endif
>   /* ------------------------- TGSI conversion stuff -------------------------- */
>   
>   /**
> @@ -6928,6 +6981,8 @@ get_mesa_program_tgsi(struct gl_context *ctx,
>         return NULL;
>      }
>   
> +   PRINT_STATS(v->print_stats());
> +
>      return prog;
>   }
>   
> 


-- 
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.


More information about the mesa-dev mailing list