From 87b2de3998fd26767af437ffe512779dc2e8d404 Mon Sep 17 00:00:00 2001 From: Antia Puentes Date: Sat, 19 Dec 2015 18:49:08 +0100 Subject: [PATCH] mesa/formatquery: Added mipmap related queries Specifically MIPMAP, MANUAL_GENERATE_MIPMAP and AUTO_GENERATE_MIPMAP queries. From the ARB_internalformat_query2 specification: "- MIPMAP: If the resource supports mipmaps, TRUE is returned in . 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 . 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 . 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 --- src/mesa/main/formatquery.c | 40 ++++++++++++++++++++++++++++++------- 1 file 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 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: -- 2.30.2