swrast: Clean up and explain the mapping process.

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>
This commit is contained in:
Eric Anholt 2013-04-19 13:35:31 -07:00
parent 741e540055
commit f709c31c67
2 changed files with 17 additions and 10 deletions

View 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);

View 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) {
if (slice != 0) {
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) {
GLuint sliceSize = _mesa_format_image_size(texImage->TexFormat,
texImage->Width,
1,
_swrast_teximage_slice_height(texImage),
1);
map += slice * sliceSize;
}