mesa: Add condition in glGetTexImage for zero size textures
TestMipMaps() function in src/OGLconform/textureNPOT.c calls glTexImage2D() with width = 0. Texture with zero size skips miptree allocation due to a condition in function _mesa_store_teximage3d(). While calling glGetTexImage() it results in assertion failure in intel_map_texture_image() due to null mt pointer. This patch fixes the issue by detecting the zero size texture early in glGetTexImage and glGetCompressedTexImage functions. In such a case function simply returns doing nothing. Verified that below mentioned bug is fixed by this patch. https://bugs.freedesktop.org/show_bug.cgi?id=42334 NOTE: This is a candidate for stable branches Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com> Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
@@ -837,6 +837,9 @@ _mesa_GetnTexImageARB( GLenum target, GLint level, GLenum format,
|
||||
texObj = _mesa_get_current_tex_object(ctx, target);
|
||||
texImage = _mesa_select_tex_image(ctx, texObj, target, level);
|
||||
|
||||
if (_mesa_is_zero_size_texture(texImage))
|
||||
return;
|
||||
|
||||
if (MESA_VERBOSE & (VERBOSE_API | VERBOSE_TEXTURE)) {
|
||||
_mesa_debug(ctx, "glGetTexImage(tex %u) format = %s, w=%d, h=%d,"
|
||||
" dstFmt=0x%x, dstType=0x%x\n",
|
||||
@@ -970,6 +973,9 @@ _mesa_GetnCompressedTexImageARB(GLenum target, GLint level, GLsizei bufSize,
|
||||
texObj = _mesa_get_current_tex_object(ctx, target);
|
||||
texImage = _mesa_select_tex_image(ctx, texObj, target, level);
|
||||
|
||||
if (_mesa_is_zero_size_texture(texImage))
|
||||
return;
|
||||
|
||||
if (MESA_VERBOSE & (VERBOSE_API | VERBOSE_TEXTURE)) {
|
||||
_mesa_debug(ctx,
|
||||
"glGetCompressedTexImage(tex %u) format = %s, w=%d, h=%d\n",
|
||||
|
||||
@@ -44,7 +44,14 @@ _mesa_is_cube_face(GLenum target)
|
||||
target <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB);
|
||||
}
|
||||
|
||||
|
||||
/** Is any of the dimensions of given texture equal to zero? */
|
||||
static inline GLboolean
|
||||
_mesa_is_zero_size_texture(const struct gl_texture_image *texImage)
|
||||
{
|
||||
return (texImage->Width == 0 ||
|
||||
texImage->Height == 0 ||
|
||||
texImage->Depth == 0);
|
||||
}
|
||||
|
||||
/** \name Internal functions */
|
||||
/*@{*/
|
||||
|
||||
Reference in New Issue
Block a user