mesa: Implement GL_DEBUG_OUTPUT
authorTimothy Arceri <t_arceri@yahoo.com.au>
Mon, 26 Aug 2013 09:02:11 +0000 (19:02 +1000)
committerBrian Paul <brianp@vmware.com>
Wed, 4 Sep 2013 13:47:49 +0000 (07:47 -0600)
Signed-off-by: Timothy Arceri <t_arceri@yahoo.com.au>
Reviewed-by: Brian Paul <brianp@vmware.com>
src/mesa/drivers/dri/i965/brw_context.c
src/mesa/main/enable.c
src/mesa/main/errors.c
src/mesa/main/mtypes.h
src/mesa/state_tracker/st_manager.c

index 23210761d4312da960586dd9644fc5d1a1f87eff..d0b2fc1fdc8a2270997e767f69e6ae8f0046635f 100644 (file)
@@ -468,8 +468,10 @@ brwCreateContext(int api,
    if ((flags & __DRI_CTX_FLAG_FORWARD_COMPATIBLE) != 0)
       ctx->Const.ContextFlags |= GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT;
 
+   ctx->Debug.DebugOutput = GL_FALSE;
    if ((flags & __DRI_CTX_FLAG_DEBUG) != 0) {
       ctx->Const.ContextFlags |= GL_CONTEXT_FLAG_DEBUG_BIT;
+      ctx->Debug.DebugOutput = GL_TRUE;
 
       /* Turn on some extra GL_ARB_debug_output generation. */
       brw->perf_debug = true;
index 21e593117b350949a1146c5909a2572b8f7d61d6..5e2fd80d22703461e23fca5c84c1bfaaa45a0d3b 100644 (file)
@@ -364,6 +364,11 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
          FLUSH_VERTICES(ctx, _NEW_DEPTH);
          ctx->Depth.Test = state;
          break;
+      case GL_DEBUG_OUTPUT:
+         if (!_mesa_is_desktop_gl(ctx))
+            goto invalid_enum_error;
+         ctx->Debug.DebugOutput = state;
+         break;
       case GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB:
          if (!_mesa_is_desktop_gl(ctx))
             goto invalid_enum_error;
@@ -1201,6 +1206,10 @@ _mesa_IsEnabled( GLenum cap )
         return ctx->Light.ColorMaterialEnabled;
       case GL_CULL_FACE:
          return ctx->Polygon.CullFlag;
+      case GL_DEBUG_OUTPUT:
+         if (!_mesa_is_desktop_gl(ctx))
+            goto invalid_enum_error;
+         return ctx->Debug.DebugOutput;
       case GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB:
          if (!_mesa_is_desktop_gl(ctx))
             goto invalid_enum_error;
index afe1affcf99c87f849f44ec1ed9dffa5180ecd2a..52fbadeb2dd7c7142b2c05acb5a90e69a9020563 100644 (file)
@@ -194,6 +194,9 @@ should_log(struct gl_context *ctx,
          &ctx->Debug.Namespaces[gstack][source][type];
    uintptr_t state;
 
+   if (!ctx->Debug.DebugOutput)
+      return GL_FALSE;
+
    /* In addition to not being able to store zero as a value, HashTable also
       can't use zero as a key. */
    if (id)
index 1747866aec84031481ad910ed32a2b1a4df49b4f..5e68a779f8cdae7b36dbd1c8a48da921ca000630 100644 (file)
@@ -3392,6 +3392,7 @@ struct gl_debug_state
    GLDEBUGPROC Callback;
    const void *CallbackData;
    GLboolean SyncOutput;
+   GLboolean DebugOutput;
    GLboolean Defaults[MAX_DEBUG_GROUP_STACK_DEPTH][MESA_DEBUG_SEVERITY_COUNT][MESA_DEBUG_SOURCE_COUNT][MESA_DEBUG_TYPE_COUNT];
    struct gl_debug_namespace Namespaces[MAX_DEBUG_GROUP_STACK_DEPTH][MESA_DEBUG_SOURCE_COUNT][MESA_DEBUG_TYPE_COUNT];
    struct gl_debug_msg Log[MAX_DEBUG_LOGGED_MESSAGES];
index 9c2b4d24e874cc1d48363a694048b17bbb18265e..098e6c02c76bbd59968339613131fd93f9087f03 100644 (file)
@@ -626,8 +626,12 @@ st_api_create_context(struct st_api *stapi, struct st_manager *smapi,
       return NULL;
    }
 
-   if (attribs->flags & ST_CONTEXT_FLAG_DEBUG)
+   st->ctx->Debug.DebugOutput = GL_FALSE;
+   if (attribs->flags & ST_CONTEXT_FLAG_DEBUG){
       st->ctx->Const.ContextFlags |= GL_CONTEXT_FLAG_DEBUG_BIT;
+      st->ctx->Debug.DebugOutput = GL_TRUE;
+   }
+
    if (attribs->flags & ST_CONTEXT_FLAG_FORWARD_COMPATIBLE)
       st->ctx->Const.ContextFlags |= GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT;