summaryrefslogtreecommitdiffstats
path: root/src/mesa/main/formatquery.c
diff options
context:
space:
mode:
authorAntia Puentes <[email protected]>2015-12-19 18:49:08 +0100
committerEduardo Lima Mitev <[email protected]>2016-03-03 15:14:07 +0100
commit87b2de3998fd26767af437ffe512779dc2e8d404 (patch)
tree4bcc170a6e1bffc349e2e80002ae9efe9de8dade /src/mesa/main/formatquery.c
parent079d99b830073f55a22954f6bb2b56cfb731e5e3 (diff)
mesa/formatquery: Added mipmap related <pname> queries
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 <[email protected]>
Diffstat (limited to 'src/mesa/main/formatquery.c')
-rw-r--r--src/mesa/main/formatquery.c40
1 files changed, 33 insertions, 7 deletions
diff --git a/src/mesa/main/formatquery.c b/src/mesa/main/formatquery.c
index 339bee0d454..aeed46f7259 100644
--- a/src/mesa/main/formatquery.c
+++ b/src/mesa/main/formatquery.c
@@ -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: