summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mesa/swrast/s_context.h3
-rw-r--r--src/mesa/swrast/s_texture.c24
2 files changed, 17 insertions, 10 deletions
diff --git a/src/mesa/swrast/s_context.h b/src/mesa/swrast/s_context.h
index cf9d5af97f7..5d9354d7cf1 100644
--- a/src/mesa/swrast/s_context.h
+++ b/src/mesa/swrast/s_context.h
@@ -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);
diff --git a/src/mesa/swrast/s_texture.c b/src/mesa/swrast/s_texture.c
index 4e11b0a1828..82b2ce6f18b 100644
--- a/src/mesa/swrast/s_texture.c
+++ b/src/mesa/swrast/s_texture.c
@@ -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;
}