[Mesa-dev] Fix a crash in update_texture_state() when requesting a fallback for external texture target

Brian Paul brianp at vmware.com
Fri Oct 12 07:36:04 PDT 2012


On 10/12/2012 02:42 AM, Abdiel Janulgue wrote:
> On Wednesday, October 10, 2012 08:33:08 AM Brian Paul wrote:
>> On 10/10/2012 05:42 AM, Abdiel Janulgue wrote:
>>> I found a crash where updating the texture unit states ends up requesting
>>> a
>>> fallback texture for a  GL_TEXTURE_EXTERNAL_OES target and sets a null
>>> current texture object for the current unit.
>>>
>>> This is a fix by supporting  TEXTURE_EXTERNAL_INDEX target in
>>> _mesa_get_fallback_texture() and making sure the texture unit is not
>>> really
>>> used should an invalid  fallback be returned.
>>>
>>> Cheers,
>>> -abdiel
>>>
>>> diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c
>>> index e0494c9..7e2b6b5 100644
>>> --- a/src/mesa/main/texobj.c
>>> +++ b/src/mesa/main/texobj.c
>>> @@ -771,6 +771,9 @@ _mesa_get_fallback_texture(struct gl_context *ctx,
>>> gl_texture_index tex)
>>>
>>>             target = GL_TEXTURE_BUFFER;
>>>             break;
>>>
>>>          case TEXTURE_EXTERNAL_INDEX:
>>> +         dims = 2;
>>> +         target = GL_TEXTURE_EXTERNAL_OES;
>>> +         break;
>>>
>>>          default:
>>>             /* no-op */
>>>             return NULL;
>>>
>>> diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c
>>> index 8ca9092..009b077 100644
>>> --- a/src/mesa/main/texstate.c
>>> +++ b/src/mesa/main/texstate.c
>>> @@ -600,6 +600,11 @@ update_texture_state( struct gl_context *ctx )
>>>
>>>                texTarget = (gl_texture_index) (ffs(enabledTargets) - 1);
>>>                texObj = _mesa_get_fallback_texture(ctx, texTarget);
>>>
>>> +
>>> +            if (!texObj)
>>> +               /* invalid fallback texture: make sure to disable texture
>>> unit */
>>> +               continue;
>>
>> So texObj should only be null here if _mesa_get_fallback_texture()
>> fails because of a bad/unsupported texture target or we run out of
>> memory for a 1-texel texture (pretty unlikely).
>>
>> So I think I'd like to see an assert(texObj) there followed by the
>> if/continue so that we get the assertion with debug builds but don't
>> crash with release builds.
>>
>> Looks OK otherwise.
>
> Thanks Brian. I've pushed the improved changes with your feedback to
> git at gitorious.org:mesa3d/mesa.git master branch

Thanks.  I'm going to tweak the comments and will commit it in a bit.

-Brian



More information about the mesa-dev mailing list