mesa: Fix error code for GetFramebufferAttachmentParameter in ES 3.0+.

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@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
Kenneth Graunke 2016-03-07 16:43:35 -08:00
parent 8b3496f378
commit 19f13b2096
1 changed files with 16 additions and 2 deletions

View File

@ -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