swrast: Clean up and explain the mapping process.
authorEric Anholt <eric@anholt.net>
Fri, 19 Apr 2013 20:35:31 +0000 (13:35 -0700)
committerEric Anholt <eric@anholt.net>
Tue, 30 Apr 2013 17:40:43 +0000 (10:40 -0700)
v2: Move slice height calculation to a helper function (recommeded by Brian).

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> (v1)
Reviewed-by: Brian Paul <brianp@vmware.com>
src/mesa/swrast/s_context.h
src/mesa/swrast/s_texture.c

index cf9d5af97f7488c5cc7f178d7df923bbeea9569d..5d9354d7cf11f5fd0efd756a4443c0f80183de88 100644 (file)
@@ -380,6 +380,9 @@ _swrast_map_textures(struct gl_context *ctx);
 extern void
 _swrast_unmap_textures(struct gl_context *ctx);
 
+extern unsigned int
+_swrast_teximage_slice_height(struct gl_texture_image *texImage);
+
 extern void
 _swrast_map_texture(struct gl_context *ctx, struct gl_texture_object *texObj);
 
index 4e11b0a18280b1c32c1d7279fcab84b80a9d941e..82b2ce6f18b455236f9fa02e371b60a55b7b5dcb 100644 (file)
@@ -68,6 +68,18 @@ texture_slices(struct gl_texture_image *texImage)
       return texImage->Depth;
 }
 
+unsigned int
+_swrast_teximage_slice_height(struct gl_texture_image *texImage)
+{
+   /* For 1D array textures, the slices are all 1 pixel high, and Height is
+    * the number of slices.
+    */
+   if (texImage->TexObject->Target == GL_TEXTURE_1D_ARRAY)
+      return 1;
+   else
+      return texImage->Height;
+}
+
 /**
  * Called via ctx->Driver.AllocTextureImageBuffer()
  */
@@ -219,18 +231,10 @@ _swrast_map_teximage(struct gl_context *ctx,
    map = swImage->Buffer;
 
    assert(slice < texture_slices(texImage));
-
-   if (texImage->TexObject->Target == GL_TEXTURE_3D ||
-       texImage->TexObject->Target == GL_TEXTURE_2D_ARRAY) {
-      GLuint sliceSize = _mesa_format_image_size(texImage->TexFormat,
-                                                 texImage->Width,
-                                                 texImage->Height,
-                                                 1);
-      map += slice * sliceSize;
-   } else if (texImage->TexObject->Target == GL_TEXTURE_1D_ARRAY) {
+   if (slice != 0) {
       GLuint sliceSize = _mesa_format_image_size(texImage->TexFormat,
                                                  texImage->Width,
-                                                 1,
+                                                 _swrast_teximage_slice_height(texImage),
                                                  1);
       map += slice * sliceSize;
    }