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.foss...@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.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to