diff options
Diffstat (limited to 'src/mesa/main/debug_output.c')
-rw-r--r-- | src/mesa/main/debug_output.c | 21 |
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; + } } |