mesa/formatquery: Add READ_PIXELS_TYPE pname
authorEduardo Lima Mitev <elima@igalia.com>
Tue, 22 Dec 2015 17:52:38 +0000 (18:52 +0100)
committerEduardo Lima Mitev <elima@igalia.com>
Thu, 3 Mar 2016 14:14:07 +0000 (15:14 +0100)
We call the driver to provide its preferred type, but also provide a
default implementation that selects a generic type based on the passed
internal format.

Reviewed-by: Dave Airlie <airlied@redhat.com>
src/mesa/main/formatquery.c

index a5f7c774a9d06762e36d3b10cb78dca07db56c06..32f8cf429530a2354a2df95dd83eda06f20da367 100644 (file)
@@ -590,6 +590,17 @@ _legal_target_for_framebuffer_texture_layer(struct gl_context *ctx,
    }
 }
 
+static GLenum
+_mesa_generic_type_for_internal_format(GLenum internalFormat)
+{
+   if (_mesa_is_enum_format_unsigned_int(internalFormat))
+      return GL_UNSIGNED_BYTE;
+   else if (_mesa_is_enum_format_signed_int(internalFormat))
+      return GL_BYTE;
+   else
+      return GL_FLOAT;
+}
+
 /* default implementation of QueryInternalFormat driverfunc, for
  * drivers not implementing ARB_internalformat_query2.
  */
@@ -634,6 +645,15 @@ _mesa_query_internal_format_default(struct gl_context *ctx, GLenum target,
       break;
    }
 
+   case GL_READ_PIXELS_TYPE: {
+      GLenum base_format = _mesa_base_tex_format(ctx, internalFormat);
+      if (base_format > 0)
+         params[0] = _mesa_generic_type_for_internal_format(internalFormat);
+      else
+         params[0] = GL_NONE;
+      break;
+   }
+
    case GL_MANUAL_GENERATE_MIPMAP:
    case GL_AUTO_GENERATE_MIPMAP:
    case GL_SRGB_READ:
@@ -1109,14 +1129,11 @@ _mesa_GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname,
 
    case GL_READ_PIXELS:
    case GL_READ_PIXELS_FORMAT:
+   case GL_READ_PIXELS_TYPE:
       ctx->Driver.QueryInternalFormat(ctx, target, internalformat, pname,
                                       buffer);
       break;
 
-   case GL_READ_PIXELS_TYPE:
-      /* @TODO */
-      break;
-
    case GL_TEXTURE_IMAGE_FORMAT:
       /* @TODO */
       break;