[Mesa-dev] [PATCH 05/11] mesa: add infrastructure for GL_ARB_debug_output

Brian Paul brianp at vmware.com
Tue May 3 16:34:55 PDT 2011


On 05/02/2011 05:00 PM, nobled wrote:
> ---
>   src/mesa/main/context.c    |    1 +
>   src/mesa/main/enable.c     |    5 +++++
>   src/mesa/main/errors.c     |   10 ++++++++++
>   src/mesa/main/extensions.c |    1 +
>   src/mesa/main/get.c        |    7 +++++++
>   src/mesa/main/getstring.c  |    6 ++++++
>   src/mesa/main/imports.h    |    3 +++
>   src/mesa/main/mtypes.h     |   31 +++++++++++++++++++++++++++++++
>   8 files changed, 64 insertions(+), 0 deletions(-)
>
> diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
> index ea13bdd..0173535 100644
> --- a/src/mesa/main/context.c
> +++ b/src/mesa/main/context.c
> @@ -763,6 +763,7 @@ init_attrib_groups(struct gl_context *ctx)
>      _mesa_init_depth( ctx );
>      _mesa_init_debug( ctx );
>      _mesa_init_display_list( ctx );
> +   _mesa_init_errors( ctx );
>      _mesa_init_eval( ctx );
>      _mesa_init_fbobjects( ctx );
>      _mesa_init_feedback( ctx );
> diff --git a/src/mesa/main/enable.c b/src/mesa/main/enable.c
> index 2ec19c8..c2286a0 100644
> --- a/src/mesa/main/enable.c
> +++ b/src/mesa/main/enable.c
> @@ -344,6 +344,9 @@
>            FLUSH_VERTICES(ctx, _NEW_DEPTH);
>            ctx->Depth.Test = state;
>            break;
> +      case GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB:
> +         ctx->Debug.SyncOutput = state;
> +         break;
>         case GL_DITHER:
>            if (ctx->Color.DitherFlag == state)
>               return;
> @@ -1097,6 +1100,8 @@ _mesa_IsEnabled( GLenum cap )
>   	 return ctx->Light.ColorMaterialEnabled;
>         case GL_CULL_FACE:
>            return ctx->Polygon.CullFlag;
> +      case GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB:
> +         return ctx->Debug.SyncOutput;
>         case GL_DEPTH_TEST:
>            return ctx->Depth.Test;
>         case GL_DITHER:
> diff --git a/src/mesa/main/errors.c b/src/mesa/main/errors.c
> index 009681a..e112915 100644
> --- a/src/mesa/main/errors.c
> +++ b/src/mesa/main/errors.c
> @@ -38,6 +38,16 @@
>
>   #define MAXSTRING 4000  /* for _mesa_vsnprintf() */
>
> +void
> +_mesa_init_errors(struct gl_context *ctx)
> +{
> +   ctx->Debug.Callback = NULL;
> +   ctx->Debug.SyncOutput = GL_FALSE;
> +   ctx->Debug.Log[0].length = 0;
> +   ctx->Debug.NextMsg =&ctx->Debug.Log[0];
> +   ctx->Debug.NumMessages = 0;
> +}
> +
>   /**********************************************************************/
>   /** \name Diagnostics */
>   /*@{*/
> diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
> index e0562cc..c034370 100644
> --- a/src/mesa/main/extensions.c
> +++ b/src/mesa/main/extensions.c
> @@ -81,6 +81,7 @@
>      { "GL_ARB_blend_func_extended",
> o(ARB_blend_func_extended),                 GL,             2009 },
>      { "GL_ARB_color_buffer_float",
> o(ARB_color_buffer_float),                  GL,             2004 },
>      { "GL_ARB_copy_buffer",
> o(ARB_copy_buffer),                         GL,             2008 },
> +   { "GL_ARB_debug_output",
> o(ARB_debug_output),                        GL,             2009 },
>      { "GL_ARB_depth_buffer_float",
> o(ARB_depth_buffer_float),                  GL,             2008 },
>      { "GL_ARB_depth_clamp",
> o(ARB_depth_clamp),                         GL,             2003 },
>      { "GL_ARB_depth_texture",
> o(ARB_depth_texture),                       GL,             2001 },
> diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
> index e933bbe..527480b 100644
> --- a/src/mesa/main/get.c
> +++ b/src/mesa/main/get.c
> @@ -1284,6 +1284,13 @@
>
>      /* GL_ARB_robustness */
>      { GL_RESET_NOTIFICATION_STRATEGY_ARB,
> CONTEXT_ENUM(Const.ResetStrategy), NO_EXTRA },
> +
> +   /* GL_ARB_debug_output */
> +   { GL_DEBUG_LOGGED_MESSAGES_ARB, CONTEXT_INT(Debug.NumMessages), NO_EXTRA },
> +   { GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB,
> CONTEXT_INT(Debug.NextMsgLength), NO_EXTRA },
> +   { GL_MAX_DEBUG_LOGGED_MESSAGES_ARB,
> CONST(_MESA_MAX_DEBUG_LOGGED_MESSAGES), NO_EXTRA },
> +   { GL_MAX_DEBUG_MESSAGE_LENGTH_ARB,
> CONST(_MESA_MAX_DEBUG_MESSAGE_LENGTH), NO_EXTRA },
> +
>   #endif /* FEATURE_GL */
>   };
>
> diff --git a/src/mesa/main/getstring.c b/src/mesa/main/getstring.c
> index c381fb2..019d931 100644
> --- a/src/mesa/main/getstring.c
> +++ b/src/mesa/main/getstring.c
> @@ -224,6 +224,12 @@ _mesa_GetPointerv( GLenum pname, GLvoid **params )
>            *params = (GLvoid *) ctx->Array.ArrayObj->PointSize.Ptr;
>            break;
>   #endif
> +      case GL_DEBUG_CALLBACK_FUNCTION_ARB:
> +         *params = (GLvoid *) ctx->Debug.Callback;
> +         break;
> +      case GL_DEBUG_CALLBACK_USER_PARAM_ARB:
> +         *params = ctx->Debug.CallbackData;
> +         break;
>         default:
>            _mesa_error( ctx, GL_INVALID_ENUM, "glGetPointerv" );
>            return;
> diff --git a/src/mesa/main/imports.h b/src/mesa/main/imports.h
> index 604fbcb..cc5f154 100644
> --- a/src/mesa/main/imports.h
> +++ b/src/mesa/main/imports.h
> @@ -610,6 +610,9 @@
>   extern void
>   _mesa_debug( const struct gl_context *ctx, const char *fmtString, ...
> ) PRINTFLIKE(2, 3);
>
> +extern void
> +_mesa_init_errors( struct gl_context *ctx );
> +
>
>   #if defined(_MSC_VER)&&  !defined(snprintf)
>   #define snprintf _snprintf
> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
> index fba65e8..06083c5 100644
> --- a/src/mesa/main/mtypes.h
> +++ b/src/mesa/main/mtypes.h
> @@ -2765,6 +2765,7 @@ struct gl_extensions
>      GLboolean ARB_blend_func_extended;
>      GLboolean ARB_color_buffer_float;
>      GLboolean ARB_copy_buffer;
> +   GLboolean ARB_debug_output;
>      GLboolean ARB_depth_buffer_float;
>      GLboolean ARB_depth_clamp;
>      GLboolean ARB_depth_texture;
> @@ -3152,6 +3153,33 @@ struct gl_dlist_state
>      } Current;
>   };
>
> +/**
> + * An error, warning, or other piece of debug information for an application
> + * to consume via GL_ARB_debug_output.
> + */
> +struct gl_debug_msg
> +{
> +   GLenum source;
> +   GLenum type;
> +   GLuint id;
> +   GLenum severity;
> +   GLsizei length;
> +   GLcharARB *message;
> +};
> +#define _MESA_MAX_DEBUG_LOGGED_MESSAGES 1
> +#define _MESA_MAX_DEBUG_MESSAGE_LENGTH 4096

Limits like this are typically defined in config.h without a _MESA_ 
prefix.



More information about the mesa-dev mailing list