diff options
author | Eric Anholt <[email protected]> | 2013-04-19 13:30:34 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2013-04-30 10:40:42 -0700 |
commit | 741e540055d009c4a2d615b3286bce7e69e54b5f (patch) | |
tree | 3557726a52b1bf43eedc6bc4202c10e550e45f4d /src | |
parent | dca4178130f2704d54cc16fba13f9585e6ae0e54 (diff) |
swrast: Factor out texture slice counting.
This function going to get used a lot more in upcoming patches.
Reviewed-by: Kenneth Graunke <[email protected]>
Reviewed-by: Brian Paul <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/swrast/s_texture.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/mesa/swrast/s_texture.c b/src/mesa/swrast/s_texture.c index 2e2e860d72f..4e11b0a1828 100644 --- a/src/mesa/swrast/s_texture.c +++ b/src/mesa/swrast/s_texture.c @@ -59,6 +59,14 @@ _swrast_delete_texture_image(struct gl_context *ctx, _mesa_delete_texture_image(ctx, texImage); } +static unsigned int +texture_slices(struct gl_texture_image *texImage) +{ + if (texImage->TexObject->Target == GL_TEXTURE_1D_ARRAY) + return texImage->Height; + else + return texImage->Depth; +} /** * Called via ctx->Driver.AllocTextureImageBuffer() @@ -84,11 +92,11 @@ _swrast_alloc_texture_image_buffer(struct gl_context *ctx, * We allocate the array for 1D/2D textures too in order to avoid special- * case code in the texstore routines. */ - swImg->ImageOffsets = malloc(texImage->Depth * sizeof(GLuint)); + swImg->ImageOffsets = malloc(texture_slices(texImage) * sizeof(GLuint)); if (!swImg->ImageOffsets) return GL_FALSE; - for (i = 0; i < texImage->Depth; i++) { + for (i = 0; i < texture_slices(texImage); i++) { swImg->ImageOffsets[i] = i * texImage->Width * texImage->Height; } @@ -210,20 +218,20 @@ _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); - 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; } |