[Mesa-dev] [Mesa-stable] [PATCH V2] mesa: Generate correct error code in glDrawBuffers()

Ian Romanick idr at freedesktop.org
Tue Jan 28 14:04:46 PST 2014


On 01/28/2014 02:52 PM, Anuj Phogat wrote:
> OpenGL 3.3 spec expects GL_INVALID_OPERATION:
>  "For both the default framebuffer and framebuffer objects, the
>   constants FRONT, BACK, LEFT, RIGHT, and FRONT AND BACK are not
>   valid in the bufs array passed to DrawBuffers, and will result
>   in the error INVALID OPERATION."
> 
> But OpenGL 4.0 spec changed the error code to GL_INVALID_ENUM:
>  "For both the default framebuffer and framebuffer objects, the
>   constants FRONT, BACK, LEFT, RIGHT, and FRONT_AND_BACK are not
>   valid in the bufs array passed to DrawBuffers, and will result
>   in the error INVALID_ENUM."
> 
> This patch changes the behaviour to match OpenGL 4.0 spec
> Fixes Khronos OpenGL CTS draw_buffers_api.test.
> 
> V2: Update the comment in code.
> 
> Cc: mesa-stable at lists.freedesktop.org
> Signed-off-by: Anuj Phogat <anuj.phogat at gmail.com>

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

> ---
>  src/mesa/main/buffers.c | 8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/src/mesa/main/buffers.c b/src/mesa/main/buffers.c
> index 2bdbf41..6cbce9d 100644
> --- a/src/mesa/main/buffers.c
> +++ b/src/mesa/main/buffers.c
> @@ -360,16 +360,18 @@ _mesa_DrawBuffers(GLsizei n, const GLenum *buffers)
>              return;
>           }         
>  
> -         /* From the OpenGL 3.0 specification, page 259:
> +         /* From the OpenGL 4.0 specification, page 256:
>            * "For both the default framebuffer and framebuffer objects, the
>            *  constants FRONT, BACK, LEFT, RIGHT, and FRONT_AND_BACK are not
>            *  valid in the bufs array passed to DrawBuffers, and will result in
> -          *  the error INVALID_OPERATION.  This restriction is because these
> +          *  the error INVALID_ENUM. This restriction is because these
>            *  constants may themselves refer to multiple buffers, as shown in
>            *  table 4.4."
> +          *  Previous versions of the OpenGL specification say INVALID_OPERATION,
> +          *  but the Khronos conformance tests expect INVALID_ENUM.
>            */
>           if (_mesa_bitcount(destMask[output]) > 1) {
> -            _mesa_error(ctx, GL_INVALID_OPERATION, "glDrawBuffersARB(buffer)");
> +            _mesa_error(ctx, GL_INVALID_ENUM, "glDrawBuffersARB(buffer)");
>              return;
>           }
>  
> 



More information about the mesa-dev mailing list