swrast: When asked to map a slice of a 1D array, give back that slice.
authorEric Anholt <eric@anholt.net>
Wed, 28 Sep 2011 18:15:01 +0000 (11:15 -0700)
committerEric Anholt <eric@anholt.net>
Mon, 3 Oct 2011 20:29:38 +0000 (13:29 -0700)
Until now, we've been treating 1D arrays as a single slice, and each
array slice is actually just a row of the 2D texture.  While swrast
still stores them this way, hardware drivers think that 1D arrays have
actual separate slices not stored as contiguous rows.

Reviewed-by: Brian Paul <brianp@vmware.com>
src/mesa/swrast/s_texture.c

index aa073753f4344f0eb4ac96bcfdc55b86198a261b..36b429cfab9535b7fe784722a68f9890deeee540 100644 (file)
@@ -177,6 +177,13 @@ _swrast_map_teximage(struct gl_context *ctx,
                                                  1);
       assert(slice < texImage->Depth);
       map += slice * sliceSize;
+   } else if (texImage->TexObject->Target == GL_TEXTURE_1D_ARRAY) {
+      GLuint sliceSize = _mesa_format_image_size(texImage->TexFormat,
+                                                 texImage->Width,
+                                                 1,
+                                                 1);
+      assert(slice < texImage->Height);
+      map += slice * sliceSize;
    }
 
    /* apply x/y offset to map address */