diff options
author | Ian Romanick <ian.d.romanick@intel.com> | 2011-07-22 15:26:24 -0700 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2011-07-25 19:57:17 -0700 |
commit | 143b65f7612c255f29d08392192098b1c2bf4b62 (patch) | |
tree | ba7b92032bc9d3ea9376c7a38f55e5ac68204c91 | |
parent | 09916e877fc14723d7950f892e181df9f7d7f36f (diff) |
mesa: Return the correct internal fmt when a generic compressed fmt was used
If an application requests a generic compressed format for a texture
and the driver does not pick a specific compressed format, return the
generic base format (e.g., GL_RGBA) for the GL_TEXTURE_INTERNAL_FORMAT
query.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=3165
Reviewed-by: Brian Paul <brianp@vmware.com>
-rw-r--r-- | src/mesa/main/texparam.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c index 4b9dcb5d3b..c4ec29533e 100644 --- a/src/mesa/main/texparam.c +++ b/src/mesa/main/texparam.c @@ -915,9 +915,23 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level, *params = _mesa_compressed_format_to_glenum(ctx, texFormat); } else { - /* return the user's requested internal format */ - *params = img->InternalFormat; - } + /* If the true internal format is not compressed but the user + * requested a generic compressed format, we have to return the + * generic base format that matches. + * + * From page 119 (page 129 of the PDF) of the OpenGL 1.3 spec: + * + * "If no specific compressed format is available, + * internalformat is instead replaced by the corresponding base + * internal format." + * + * Otherwise just return the user's requested internal format + */ + const GLenum f = + _mesa_gl_compressed_format_base_format(img->InternalFormat); + + *params = (f != 0) ? f : img->InternalFormat; + } break; case GL_TEXTURE_BORDER: *params = img->Border; |