Fix broken cubemap mipmap layout (the cubemap.c demo was segfaulting).
authorBrian <brian@i915.localnet.net>
Sun, 25 Feb 2007 01:14:53 +0000 (18:14 -0700)
committerBrian <brian@i915.localnet.net>
Sun, 25 Feb 2007 01:14:53 +0000 (18:14 -0700)
In i915_miptree_layout() change the width, height parameters that are passed
to intel_miptree_set_level_info().  As it was, the width, height values were
larger than the source image dimensions and we segfaulted in memcpy() when
copying the original texture data into the texture buffer region.
This fix should probably be checked by someone more familiar with the code (Keith?)

src/mesa/drivers/dri/i915tex/i915_tex_layout.c

index 333fefef859dcd173786f1e2ad2292ec0b932e4c..c844f5351d235a7cc852b5d6f0b7f60d20b18d10 100644 (file)
@@ -62,15 +62,23 @@ i915_miptree_layout(struct intel_mipmap_tree * mt)
    case GL_TEXTURE_CUBE_MAP:{
          const GLuint dim = mt->width0;
          GLuint face;
+         GLuint lvlWidth = mt->width0, lvlHeight = mt->height0;
+
+         assert(lvlWidth == lvlHeight); /* cubemap images are square */
 
          /* double pitch for cube layouts */
          mt->pitch = ((dim * mt->cpp * 2 + 3) & ~3) / mt->cpp;
          mt->total_height = dim * 4;
 
-         for (level = mt->first_level; level <= mt->last_level; level++)
+         for (level = mt->first_level; level <= mt->last_level; level++) {
             intel_miptree_set_level_info(mt, level, 6,
                                          0, 0,
-                                         mt->pitch, mt->total_height, 1);
+                                         /*OLD: mt->pitch, mt->total_height,*/
+                                         lvlWidth, lvlHeight,
+                                         1);
+            lvlWidth /= 2;
+            lvlHeight /= 2;
+         }
 
          for (face = 0; face < 6; face++) {
             GLuint x = initial_offsets[face][0] * dim;