[Mesa-dev] [PATCH] mesa: Add condition in glGetTexImage for zero size textures

Anuj Phogat anuj.phogat at gmail.com
Tue Jan 17 15:23:15 PST 2012


On Tue 17 Jan 2012 02:54:41 PM PST, Brian Paul wrote:
> On 01/17/2012 02:03 PM, Anuj Phogat wrote:
>> 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
>>
>> Signed-off-by: Anuj Phogat<anuj.phogat at gmail.com>
>> ---
>> This is the latest patch. Added the zero size texture check in
>> glGetCompressedTexImage
>> Please ignore my previous e-mail. Sent the old patch in that e-mail
>> by mistake.
>>
>>   src/mesa/main/texgetimage.c |    6 ++++++
>>   src/mesa/main/teximage.h    |    9 ++++++++-
>>   2 files changed, 14 insertions(+), 1 deletions(-)
>>
>> diff --git a/src/mesa/main/texgetimage.c b/src/mesa/main/texgetimage.c
>> index f848aa8..8c85c1e 100644
>> --- a/src/mesa/main/texgetimage.c
>> +++ b/src/mesa/main/texgetimage.c
>> @@ -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",
>> diff --git a/src/mesa/main/teximage.h b/src/mesa/main/teximage.h
>> index 12af0e6..e2bdaca 100644
>> --- a/src/mesa/main/teximage.h
>> +++ b/src/mesa/main/teximage.h
>> @@ -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 */
>>   /*@{*/
>
>
> Reviewed-by: Brian Paul <brianp at vmware.com>
>
> Probably also tag this as a candidate for the stable branches.
>
> Are you able to commit/push this?
Yes. Pushed the patch on mesa master.

Thanks
Anuj




More information about the mesa-dev mailing list