On 09/04/2012 03:32 PM, Stéphane Marchesin wrote:
On Tue, Sep 4, 2012 at 3:27 PM, Ian Romanick <i...@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 <e...@anholt.net> wrote:

Stéphane Marchesin <marc...@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."


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to