[Mesa-dev] [PATCH 3/5] mesa: add _mesa_log(), _mesa_get_log_file() functions

Brian Paul brianp at vmware.com
Tue Apr 14 09:56:26 PDT 2015


_mesa_log() simply writes log information to stderr or MESA_LOG_FILE.
_mesa_get_log_file() returns the file handle to use for logging.

This will be used for shader dumping/logging instead of always printing
to stderr.
---
 src/mesa/main/errors.c | 43 ++++++++++++++++++++++++++++++++++++-------
 src/mesa/main/errors.h |  7 +++++++
 2 files changed, 43 insertions(+), 7 deletions(-)

diff --git a/src/mesa/main/errors.c b/src/mesa/main/errors.c
index 8ffbf41..2aa1deb 100644
--- a/src/mesa/main/errors.c
+++ b/src/mesa/main/errors.c
@@ -1232,12 +1232,14 @@ _mesa_free_errors_data(struct gl_context *ctx)
 /** \name Diagnostics */
 /*@{*/
 
+static FILE *LogFile = NULL;
+
+
 static void
 output_if_debug(const char *prefixString, const char *outputString,
                 GLboolean newline)
 {
    static int debug = -1;
-   static FILE *fout = NULL;
 
    /* Init the local 'debug' var once.
     * Note: the _mesa_init_debug() function should have been called
@@ -1249,9 +1251,9 @@ output_if_debug(const char *prefixString, const char *outputString,
        */
       const char *logFile = getenv("MESA_LOG_FILE");
       if (logFile)
-         fout = fopen(logFile, "w");
-      if (!fout)
-         fout = stderr;
+         LogFile = fopen(logFile, "w");
+      if (!LogFile)
+         LogFile = stderr;
 #ifdef DEBUG
       /* in debug builds, print messages unless MESA_DEBUG="silent" */
       if (MESA_DEBUG_FLAGS & DEBUG_SILENT)
@@ -1266,10 +1268,13 @@ output_if_debug(const char *prefixString, const char *outputString,
 
    /* Now only print the string if we're required to do so. */
    if (debug) {
-      fprintf(fout, "%s: %s", prefixString, outputString);
+      if (prefixString)
+         fprintf(LogFile, "%s: %s", prefixString, outputString);
+      else
+         fprintf(LogFile, "%s", outputString);
       if (newline)
-         fprintf(fout, "\n");
-      fflush(fout);
+         fprintf(LogFile, "\n");
+      fflush(LogFile);
 
 #if defined(_WIN32)
       /* stderr from windows applications without console is not usually 
@@ -1285,6 +1290,18 @@ output_if_debug(const char *prefixString, const char *outputString,
 
 
 /**
+ * Return the file handle to use for debug/logging.  Defaults to stderr
+ * unless MESA_LOG_FILE is defined.
+ */
+FILE *
+_mesa_get_log_file(void)
+{
+   assert(LogFile);
+   return LogFile;
+}
+
+
+/**
  * When a new type of error is recorded, print a message describing
  * previous errors which were accumulated.
  */
@@ -1525,6 +1542,18 @@ _mesa_debug( const struct gl_context *ctx, const char *fmtString, ... )
 }
 
 
+void
+_mesa_log(const char *fmtString, ...)
+{
+   char s[MAX_DEBUG_MESSAGE_LENGTH];
+   va_list args;
+   va_start(args, fmtString);
+   _mesa_vsnprintf(s, MAX_DEBUG_MESSAGE_LENGTH, fmtString, args);
+   va_end(args);
+   output_if_debug("", s, GL_FALSE);
+}
+
+
 /**
  * Report debug information from the shader compiler via GL_ARB_debug_output.
  *
diff --git a/src/mesa/main/errors.h b/src/mesa/main/errors.h
index 0c521c0..e6dc9b5 100644
--- a/src/mesa/main/errors.h
+++ b/src/mesa/main/errors.h
@@ -36,6 +36,7 @@
 #define ERRORS_H
 
 
+#include <stdio.h>
 #include "compiler.h"
 #include "glheader.h"
 #include "mtypes.h"
@@ -69,6 +70,12 @@ extern void
 _mesa_debug( const struct gl_context *ctx, const char *fmtString, ... ) PRINTFLIKE(2, 3);
 
 extern void
+_mesa_log(const char *fmtString, ...) PRINTFLIKE(1, 2);
+
+extern FILE *
+_mesa_get_log_file(void);
+
+extern void
 _mesa_gl_debug(struct gl_context *ctx,
                GLuint *id,
                enum mesa_debug_source source,
-- 
1.9.1



More information about the mesa-dev mailing list