Mesa (master): mesa: Enable GL_RGB/GL_RGBA in GLES3 glGetInternalformativ

Chad Versace chadversary at kemper.freedesktop.org
Tue Jan 13 19:27:39 UTC 2015


Module: Mesa
Branch: master
Commit: 90d2a8519307effd4081baadf16067073f2aae49
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=90d2a8519307effd4081baadf16067073f2aae49

Author: Mike Mason <michael.w.mason at intel.com>
Date:   Mon Jan 12 14:37:28 2015 -0800

mesa: Enable GL_RGB/GL_RGBA in GLES3 glGetInternalformativ

Removes commit 7894278 changes and moves fix to _mesa_GetInternalformativ().
The original commit enabled the GL_RGB and GL_RGBA unsized internal formats
as valid for render buffers in GLES3, but this is incorrect. They should
have only been enabled for GetInternalformativ()

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=88079
Reviewed-by: Chad Versace <chad.versace at intel.com>
Reviewed-by: Matt Turner <mattst88 at gmail.com>

---

 src/mesa/main/fbobject.c    |    6 ------
 src/mesa/main/formatquery.c |   16 +++++++++++++++-
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index f4b0d6d..80dc353 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -1455,9 +1455,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:
@@ -1472,9 +1469,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..7741cab 100644
--- a/src/mesa/main/formatquery.c
+++ b/src/mesa/main/formatquery.c
@@ -89,8 +89,22 @@ _mesa_GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname,
     *     "If the <internalformat> parameter to GetInternalformativ is not
     *     color-, depth- or stencil-renderable, then an INVALID_ENUM error is
     *     generated."
+    *
+    * Page 243 of the GLES 3.0.4 spec says this for GetInternalformativ:
+    *
+    *     "internalformat must be color-renderable, depth-renderable or
+    *     stencilrenderable (as defined in section 4.4.4)."
+    *
+    * Section 4.4.4 on page 212 of the same spec says:
+    *
+    *     "An internal format is color-renderable if it is one of the
+    *     formats from table 3.13 noted as color-renderable or if it
+    *     is unsized format RGBA or RGB."
+    *
+    * Therefore, we must accept GL_RGB and GL_RGBA here.
     */
-   if (_mesa_base_fbo_format(ctx, internalformat) == 0) {
+   if (internalformat != GL_RGB && internalformat != GL_RGBA &&
+       _mesa_base_fbo_format(ctx, internalformat) == 0) {
       _mesa_error(ctx, GL_INVALID_ENUM,
                   "glGetInternalformativ(internalformat=%s)",
                   _mesa_lookup_enum_by_nr(internalformat));




More information about the mesa-commit mailing list