[Mesa-dev] [PATCH 1/2] intel: Prevent huge lastlevel values from being computed.

Ian Romanick idr at freedesktop.org
Tue Sep 4 15:39:38 PDT 2012


On 09/04/2012 03:32 PM, Stéphane Marchesin wrote:
> On Tue, Sep 4, 2012 at 3:27 PM, Ian Romanick <idr at freedesktop.org> wrote:
>> On 09/04/2012 03:19 PM, Stéphane Marchesin wrote:
>>>
>>> On Tue, Sep 4, 2012 at 2:59 PM, Eric Anholt <eric at anholt.net> wrote:
>>>>
>>>> Stéphane Marchesin <marcheu at chromium.org> writes:
>>>>
>>>>> The current computation for the lastlevel is based on the level size and
>>>>> can
>>>>> lead to writing past the end of the texture array. Instead we clamp it
>>>>> by
>>>>> MAX_TEXTURE_LEVELS.
>>>>> ---
>>>>>    src/mesa/drivers/dri/intel/intel_tex_image.c |    5 +++++
>>>>>    1 files changed, 5 insertions(+), 0 deletions(-)
>>>>>
>>>>> diff --git a/src/mesa/drivers/dri/intel/intel_tex_image.c
>>>>> b/src/mesa/drivers/dri/intel/intel_tex_image.c
>>>>> index fe9040c..7ef258b 100644
>>>>> --- a/src/mesa/drivers/dri/intel/intel_tex_image.c
>>>>> +++ b/src/mesa/drivers/dri/intel/intel_tex_image.c
>>>>> @@ -88,6 +88,11 @@ intel_miptree_create_for_teximage(struct
>>>>> intel_context *intel,
>>>>>          lastLevel = firstLevel;
>>>>>          } else {
>>>>>          lastLevel = firstLevel + _mesa_logbase2(MAX2(MAX2(width,
>>>>> height), depth));
>>>>> +      /* We tried to guess the last level based on the texture size,
>>>>> make
>>>>> +       * sure we don't go past MAX_TEXTURE_LEVELS since it's hardcoded
>>>>> +       * in many places.
>>>>> +       */
>>>>> +      lastLevel = MIN2(lastLevel, MAX_TEXTURE_LEVELS - 1);
>>>>>          }
>>>>>       }
>>>>
>>>>
>>>> I'm confused.  MAX_TEXTURE_LEVELS should set such that it covers
>>>> something from the texture size limits down to 1x1.  Does it not?
>>>
>>>
>>> Let's say the app calls glTexImage for level 6, and width = 2048. That
>>
>>
>> Is that valid?  Since the base level of this texture would be huge, it seems
>> like glTexImage should reject it.  I'm not sure there's any language in the
>> spec either way, but that's my gut feeling.
>
> I didn't see anything in the spec. I also wonder how that interacts
> with something like a subsequent glCopyTexImage from that level of an
> incomplete texture to somewhere else.
>
> I'd be fine with rejecting it, if that's the right thing to do.

I found it!  There's similar language for 3D and cube textures also.
Page 149 (page 164 of the PDF) of the OpenGL 3.3 core profile spec says:

     "In a similar fashion, the maximum allowable width of a texel
     array for a one- or two-dimensional, one- or two-dimensional
     array, two-dimensional multisample, or two-dimensional
     multisample array texture, and the maximum allowable height
     of a two-dimensional, two-dimensional array, two-dimensional
     multisample, or two-dimensional multisample array texture,
     must be at least 2k−lod + 2bt for image arrays of level 0
     through k, where k is the log base 2 of MAX_TEXTURE_SIZE."




More information about the mesa-dev mailing list