[Mesa-stable] [Mesa-dev] [PATCH] mesa: add missing DebugMessageControl types

Brian Paul brianp at vmware.com
Fri Feb 28 06:19:28 PST 2014


On 02/27/2014 10:03 PM, Timothy Arceri wrote:
> Forgot to CC stable. This should apply to both 10 branches.
>
>
> On Sunday, 23 February 2014 9:55 PM, Timothy Arceri
> <t_arceri at yahoo.com.au> wrote:
> To make reviewing easier here is the relevant piece of the spec
>
> "Tokens accepted or provided by the <type> parameters of
> DebugMessageControl and DEBUGPROC, and the <types> parameter of
> GetDebugMessageLog:
>
>          DEBUG_TYPE_PUSH_GROUP                            0x8269
>          DEBUG_TYPE_POP_GROUP                            0x826A"
>
> On Wed, 2014-02-19 at 21:43 +1100, Timothy Arceri wrote:
>  > Signed-off-by: Timothy Arceri <t_arceri at yahoo.com.au
> <mailto:t_arceri at yahoo.com.au>>
>  > ---
>  >  src/mesa/main/errors.c | 5 +++++
>  >  1 file changed, 5 insertions(+)
>  >
>  > diff --git a/src/mesa/main/errors.c b/src/mesa/main/errors.c
>  > index 5f4eac6..c00c796 100644
>  > --- a/src/mesa/main/errors.c
>  > +++ b/src/mesa/main/errors.c
>  > @@ -575,6 +575,11 @@ validate_params(struct gl_context *ctx, unsigned
> caller,
>  >        /* this value is only valid for GL_KHR_debug functions */
>  >        if (caller == CONTROL || caller == INSERT)
>  >          break;
>  > +  case GL_DEBUG_TYPE_PUSH_GROUP:
>  > +  case GL_DEBUG_TYPE_POP_GROUP:
>  > +      /* this value is only valid for GL_KHR_debug */
>  > +      if (caller == CONTROL)
>  > +        break;
>  >    case GL_DONT_CARE:
>  >        if (caller == CONTROL || caller == CONTROL_ARB)
>  >          break;

I'm not sure the fall-through logic in these switch statements is correct.

For example, here:

    switch(type) {
    case GL_DEBUG_TYPE_ERROR_ARB:
    case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB:
    case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB:
    case GL_DEBUG_TYPE_PERFORMANCE_ARB:
    case GL_DEBUG_TYPE_PORTABILITY_ARB:
    case GL_DEBUG_TYPE_OTHER_ARB:
       break;
    case GL_DEBUG_TYPE_MARKER:
       /* this value is only valid for GL_KHR_debug functions */
       if (caller == CONTROL || caller == INSERT)
          break;
    case GL_DONT_CARE:
       if (caller == CONTROL || caller == CONTROL_ARB)
          break;
    default:
       goto error;
    }

Is type == GL_DEBUG_TYPE_MARKER and caller == CONTROL_ARB a legal 
combination??  From first glance at the code, it appears that it should 
be illegal.

But if type == GL_DEBUG_TYPE_MARKER and caller == CONTROL_ARB we'll 
fall-through to the GL_DONT_CARE case where the condition will be true 
and we break (thus not generating an error).

How about changing the code to add some else clauses (and comments):

    switch(type) {
    case GL_DEBUG_TYPE_ERROR_ARB:
    case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB:
    case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB:
    case GL_DEBUG_TYPE_PERFORMANCE_ARB:
    case GL_DEBUG_TYPE_PORTABILITY_ARB:
    case GL_DEBUG_TYPE_OTHER_ARB:
       /* legal */
       break;
    case GL_DEBUG_TYPE_MARKER:
       /* this value is only valid for GL_KHR_debug functions */
       if (caller == CONTROL || caller == INSERT)
          /* legal */
          break;
       else
          goto error;
    case GL_DONT_CARE:
       if (caller == CONTROL || caller == CONTROL_ARB)
          /* legal */
          break;
       else
          goto error;
    default:
       goto error;
    }

-Brian



More information about the mesa-stable mailing list