[Mesa-dev] [PATCH] mesa: Fix error code for GetFramebufferAttachmentParameter in ES 3.0+.

Ian Romanick idr at freedesktop.org
Tue Mar 8 01:03:21 UTC 2016


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

On 03/07/2016 04:55 PM, Kenneth Graunke wrote:
> The ES 3.0+ specifications contain the exact same text as the OpenGL
> specification, which says that we should return GL_INVALID_OPERATION.
> 
> ES 2.0 contains different text saying we should return GL_INVALID_ENUM.
> 
> Previously, Mesa chose the error code based on API (GL vs. ES).
> This patch makes ES 3.0+ follow the GL behavior.  ES 2 remains as is.
> 
> Fixes dEQP-GLES3.functional.fbo.api.attachment_query_empty_fbo.
> However, breaks the dEQP-GLES2 variant of the same test for drivers
> which silently promote to ES 3.0.  This can be worked around by
> exporting MESA_GLES_VERSION_OVERRIDE=2.0, but is a bug in dEQP-GLES2.
> 
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
>  src/mesa/main/fbobject.c | 18 ++++++++++++++++--
>  1 file changed, 16 insertions(+), 2 deletions(-)
> 
> diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
> index feab86c..d490918 100644
> --- a/src/mesa/main/fbobject.c
> +++ b/src/mesa/main/fbobject.c
> @@ -3580,8 +3580,22 @@ _mesa_get_framebuffer_attachment_parameter(struct gl_context *ctx,
>     const struct gl_renderbuffer_attachment *att;
>     GLenum err;
>  
> -   /* The error differs in GL and GLES. */
> -   err = _mesa_is_desktop_gl(ctx) ? GL_INVALID_OPERATION : GL_INVALID_ENUM;
> +   /* The error code for an attachment type of GL_NONE differs between APIs.
> +    *
> +    * From the ES 2.0.25 specification, page 127:
> +    * "If the value of FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE is NONE, then
> +    *  querying any other pname will generate INVALID_ENUM."
> +    *
> +    * From the OpenGL 3.0 specification, page 337, or identically,
> +    * the OpenGL ES 3.0.4 specification, page 240:
> +    *
> +    * "If the value of FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE is NONE, no
> +    *  framebuffer is bound to target.  In this case querying pname
> +    *  FRAMEBUFFER_ATTACHMENT_OBJECT_NAME will return zero, and all other
> +    *  queries will generate an INVALID_OPERATION error."
> +    */
> +   err = ctx->API == API_OPENGLES2 && ctx->Version < 30 ?
> +      GL_INVALID_ENUM : GL_INVALID_OPERATION;
>  
>     if (_mesa_is_winsys_fbo(buffer)) {
>        /* Page 126 (page 136 of the PDF) of the OpenGL ES 2.0.25 spec
> 



More information about the mesa-dev mailing list