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>
This commit is contained in:
@@ -915,8 +915,22 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level,
|
|||||||
*params = _mesa_compressed_format_to_glenum(ctx, texFormat);
|
*params = _mesa_compressed_format_to_glenum(ctx, texFormat);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* return the user's requested internal format */
|
/* If the true internal format is not compressed but the user
|
||||||
*params = img->InternalFormat;
|
* 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;
|
break;
|
||||||
case GL_TEXTURE_BORDER:
|
case GL_TEXTURE_BORDER:
|
||||||
|
Reference in New Issue
Block a user