diff options
author | Eric Anholt <[email protected]> | 2013-04-19 13:35:31 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2013-04-30 10:40:43 -0700 |
commit | f709c31c6717f898ae8689af2eb25232309f0cba (patch) | |
tree | c3abe0c33e01576dff712bd75d07f7b2fabde6da /src/mesa | |
parent | 741e540055d009c4a2d615b3286bce7e69e54b5f (diff) |
swrast: Clean up and explain the mapping process.
v2: Move slice height calculation to a helper function (recommeded by Brian).
Reviewed-by: Kenneth Graunke <[email protected]> (v1)
Reviewed-by: Brian Paul <[email protected]>
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/swrast/s_context.h | 3 | ||||
-rw-r--r-- | src/mesa/swrast/s_texture.c | 24 |
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; } |