Previous patch 78942787170615c9333810cf3a4819a13c9eb8e8 globally introduced GL_RGB and GL_RGBA as valid internal formats on GLES 3.0.4, as the spec implies (page 112). However, page 205 of the spec states that for RenderbufferStorageMultisample, internal format must be a sized internal format. For more detailed info, please look at the linked bug description.
This patch allows GL_RGB and GL_RGBA as internal format only when querying GL state through glGetInternalformativ(). Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=88079 --- src/mesa/main/fbobject.c | 6 ------ src/mesa/main/formatquery.c | 16 ++++++++++++---- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c index 43b0886..f059750 100644 --- a/src/mesa/main/fbobject.c +++ b/src/mesa/main/fbobject.c @@ -1430,9 +1430,6 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat) case GL_RGB8: return GL_RGB; case GL_RGB: - if (_mesa_is_gles3(ctx)) - return GL_RGB; - /* fallthrough */ case GL_R3_G3_B2: case GL_RGB4: case GL_RGB5: @@ -1447,9 +1444,6 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat) case GL_RGBA8: return GL_RGBA; case GL_RGBA: - if (_mesa_is_gles3(ctx)) - return GL_RGBA; - /* fallthrough */ case GL_RGBA2: case GL_RGBA12: case GL_RGBA16: diff --git a/src/mesa/main/formatquery.c b/src/mesa/main/formatquery.c index f6274fe..abcaf9e 100644 --- a/src/mesa/main/formatquery.c +++ b/src/mesa/main/formatquery.c @@ -91,10 +91,18 @@ _mesa_GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, * generated." */ if (_mesa_base_fbo_format(ctx, internalformat) == 0) { - _mesa_error(ctx, GL_INVALID_ENUM, - "glGetInternalformativ(internalformat=%s)", - _mesa_lookup_enum_by_nr(internalformat)); - return; + /* However, _mesa_base_fbo_format() doesn't consider the case that GL_RGB + * and GL_RGBA are valid internal formats on a OpenGL ES 3.0 profile. See + * table 3.3: "valid combinations of format, type, and unsized + * internalformat", page 113 of the GLES 3.0.4 spec. + */ + if (!_mesa_is_gles3(ctx) || + (internalformat != GL_RGB && internalformat != GL_RGBA)) { + _mesa_error(ctx, GL_INVALID_ENUM, + "glGetInternalformativ(internalformat=%s)", + _mesa_lookup_enum_by_nr(internalformat)); + return; + } } /* The ARB_internalformat_query spec says: -- 2.1.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev