diff options
author | Antia Puentes <[email protected]> | 2015-12-19 18:49:08 +0100 |
---|---|---|
committer | Eduardo Lima Mitev <[email protected]> | 2016-03-03 15:14:07 +0100 |
commit | 87b2de3998fd26767af437ffe512779dc2e8d404 (patch) | |
tree | 4bcc170a6e1bffc349e2e80002ae9efe9de8dade | |
parent | 079d99b830073f55a22954f6bb2b56cfb731e5e3 (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]>
-rw-r--r-- | src/mesa/main/formatquery.c | 40 |
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: |