mesa: support GL_RED/GL_RG in ES2 contexts when driver support exists
authorIlia Mirkin <imirkin@alum.mit.edu>
Thu, 26 Nov 2015 15:32:57 +0000 (10:32 -0500)
committerIlia Mirkin <imirkin@alum.mit.edu>
Sat, 28 Nov 2015 22:24:34 +0000 (17:24 -0500)
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93126
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Eduardo Lima Mitev <elima@igalia.com>
Cc: "11.0 11.1" <mesa-stable@lists.freedesktop.org>
src/mesa/main/glformats.c
src/mesa/main/glformats.h
src/mesa/main/readpix.c
src/mesa/main/teximage.c

index 2ed42eaffdd656704765c28665bb2dc117f0e1ca..f5284447b6e617f20ed43503ba472c74cc3c14a8 100644 (file)
@@ -2077,12 +2077,18 @@ _mesa_error_check_format_and_type(const struct gl_context *ctx,
  * \return error code, or GL_NO_ERROR.
  */
 GLenum
-_mesa_es_error_check_format_and_type(GLenum format, GLenum type,
+_mesa_es_error_check_format_and_type(const struct gl_context *ctx,
+                                     GLenum format, GLenum type,
                                      unsigned dimensions)
 {
    GLboolean type_valid = GL_TRUE;
 
    switch (format) {
+   case GL_RED:
+   case GL_RG:
+      if (ctx->API == API_OPENGLES || !ctx->Extensions.ARB_texture_rg)
+         return GL_INVALID_VALUE;
+      /* fallthrough */
    case GL_ALPHA:
    case GL_LUMINANCE:
    case GL_LUMINANCE_ALPHA:
index 92f4bc6864ee5154bbee67374e5a9b1033bec037..b3668556da2dad5f1b768f48d40870d389a0bd1a 100644 (file)
@@ -127,7 +127,8 @@ _mesa_error_check_format_and_type(const struct gl_context *ctx,
                                   GLenum format, GLenum type);
 
 extern GLenum
-_mesa_es_error_check_format_and_type(GLenum format, GLenum type,
+_mesa_es_error_check_format_and_type(const struct gl_context *ctx,
+                                     GLenum format, GLenum type,
                                      unsigned dimensions);
 
 extern GLenum
index 81bb912beb6ced2ad32a6c490240e72abeea8b28..8cdc9fe1cb21ff7c42f1dc9764fce1f9e826e08c 100644 (file)
@@ -1043,7 +1043,7 @@ _mesa_ReadnPixelsARB( GLint x, GLint y, GLsizei width, GLsizei height,
           _mesa_get_color_read_type(ctx) == type) {
          err = GL_NO_ERROR;
       } else if (ctx->Version < 30) {
-         err = _mesa_es_error_check_format_and_type(format, type, 2);
+         err = _mesa_es_error_check_format_and_type(ctx, format, type, 2);
          if (err == GL_NO_ERROR) {
             if (type == GL_FLOAT || type == GL_HALF_FLOAT_OES) {
                err = GL_INVALID_OPERATION;
index ac7599f9fd495de5157388be71ac063a4751f3c2..37dbe267e68d8ef4adb9cab4044f8a0f04fa08b4 100644 (file)
@@ -1699,7 +1699,7 @@ texture_format_error_check_gles(struct gl_context *ctx, GLenum format,
       }
    }
    else {
-      err = _mesa_es_error_check_format_and_type(format, type, dimensions);
+      err = _mesa_es_error_check_format_and_type(ctx, format, type, dimensions);
       if (err != GL_NO_ERROR) {
          _mesa_error(ctx, err, "%s(format = %s, type = %s)",
                      callerName, _mesa_enum_to_string(format),