mesa/formatquery: Added mipmap related <pname> queries
authorAntia Puentes <apuentes@igalia.com>
Sat, 19 Dec 2015 17:49:08 +0000 (18:49 +0100)
committerEduardo Lima Mitev <elima@igalia.com>
Thu, 3 Mar 2016 14:14:07 +0000 (15:14 +0100)
Specifically MIPMAP, MANUAL_GENERATE_MIPMAP and AUTO_GENERATE_MIPMAP <pname>
queries.

From the ARB_internalformat_query2 specification:

   "- MIPMAP: If the resource supports mipmaps, TRUE is returned in <params>.
      If the resource is not supported, or if mipmaps are not supported for
      this type of resource, FALSE is returned.

    - MANUAL_GENERATE_MIPMAP: The support for manually generating mipmaps for
      the resource is returned in <params>.
      Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
      If the resource is not supported, or if the operation is not supported,
      NONE is returned.

    - AUTO_GENERATE_MIPMAP: The support for automatic generation of mipmaps
      for the resource is returned in <params>.
      Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
      If the resource is not supported, or if the operation is not supported,
      NONE is returned."

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

index 339bee0d454c30ba0c64262a8751dd884edbc109..aeed46f725930598a8c1b0afa3128599ac44c77a 100644 (file)
@@ -32,6 +32,7 @@
 #include "texparam.h"
 #include "texobj.h"
 #include "get.h"
+#include "genmipmap.h"
 
 static bool
 _is_renderable(struct gl_context *ctx, GLenum internalformat)
@@ -595,6 +596,11 @@ _mesa_query_internal_format_default(struct gl_context *ctx, GLenum target,
       params[0] = internalFormat;
       break;
 
+   case GL_MANUAL_GENERATE_MIPMAP:
+   case GL_AUTO_GENERATE_MIPMAP:
+      params[0] = GL_FULL_SUPPORT;
+      break;
+
    default:
       _set_default_response(pname, params);
       break;
@@ -1061,15 +1067,35 @@ _mesa_GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname,
       break;
 
    case GL_MIPMAP:
-      /* @TODO */
-      break;
-
    case GL_MANUAL_GENERATE_MIPMAP:
-      /* @TODO */
-      break;
-
    case GL_AUTO_GENERATE_MIPMAP:
-      /* @TODO */
+      if (!_mesa_is_valid_generate_texture_mipmap_target(ctx, target) ||
+          !_mesa_is_valid_generate_texture_mipmap_internalformat(ctx,
+                                                              internalformat)) {
+         goto end;
+      }
+
+      if (pname == GL_MIPMAP) {
+         buffer[0] = GL_TRUE;
+         goto end;
+      }
+      else if (pname == GL_MANUAL_GENERATE_MIPMAP) {
+         if (!_mesa_has_ARB_framebuffer_object(ctx))
+            goto end;
+      }
+      else {
+         /* From ARB_internalformat_query2:
+          *    "Dependencies on OpenGL 3.2 (Core Profile)
+          *     In core profiles for OpenGL 3.2 and later versions, queries
+          *     for the AUTO_GENERATE_MIPMAP <pname> return the appropriate
+          *     unsupported response."
+          */
+         if (_mesa_is_desktop_gl(ctx) && ctx->Version >= 32)
+            goto end;
+      }
+
+      ctx->Driver.QueryInternalFormat(ctx, target, internalformat, pname,
+                                      buffer);
       break;
 
    case GL_COLOR_ENCODING: