summaryrefslogtreecommitdiffstats
path: root/src/mesa/main/debug_output.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/main/debug_output.c')
-rw-r--r--src/mesa/main/debug_output.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/mesa/main/debug_output.c b/src/mesa/main/debug_output.c
index 85f64bd459f..4e9209b2377 100644
--- a/src/mesa/main/debug_output.c
+++ b/src/mesa/main/debug_output.c
@@ -99,6 +99,7 @@ struct gl_debug_state
const void *CallbackData;
GLboolean SyncOutput;
GLboolean DebugOutput;
+ GLboolean LogToStderr;
struct gl_debug_group *Groups[MAX_DEBUG_GROUP_STACK_DEPTH];
struct gl_debug_message GroupMessages[MAX_DEBUG_GROUP_STACK_DEPTH];
@@ -617,6 +618,10 @@ debug_log_message(struct gl_debug_state *debug,
GLint nextEmpty;
struct gl_debug_message *emptySlot;
+ if (debug->LogToStderr) {
+ _mesa_log("Mesa debug output: %.*s\n", len, buf);
+ }
+
assert(len < MAX_DEBUG_MESSAGE_LENGTH);
if (log->NumMessages == MAX_DEBUG_LOGGED_MESSAGES)
@@ -845,6 +850,7 @@ log_msg_locked_and_unlock(struct gl_context *ctx,
}
if (ctx->Debug->Callback) {
+ /* Call the user's callback function */
GLenum gl_source = debug_source_enums[source];
GLenum gl_type = debug_type_enums[type];
GLenum gl_severity = debug_severity_enums[severity];
@@ -860,6 +866,7 @@ log_msg_locked_and_unlock(struct gl_context *ctx,
callback(gl_source, gl_type, id, gl_severity, len, buf, data);
}
else {
+ /* add debug message to queue */
debug_log_message(ctx->Debug, source, type, id, severity, len, buf);
_mesa_unlock_debug_state(ctx);
}
@@ -1267,6 +1274,20 @@ void
_mesa_init_debug_output(struct gl_context *ctx)
{
mtx_init(&ctx->DebugMutex, mtx_plain);
+
+ if (MESA_DEBUG_FLAGS & DEBUG_CONTEXT) {
+ /* If the MESA_DEBUG env is set to "context", we'll turn on the
+ * GL_CONTEXT_FLAG_DEBUG_BIT context flag and log debug output
+ * messages to stderr (or whatever MESA_LOG_FILE points at).
+ */
+ struct gl_debug_state *debug = _mesa_lock_debug_state(ctx);
+ if (!debug) {
+ return;
+ }
+ debug->DebugOutput = GL_TRUE;
+ debug->LogToStderr = GL_TRUE;
+ ctx->Const.ContextFlags |= GL_CONTEXT_FLAG_DEBUG_BIT;
+ }
}