[Mesa-dev] [PATCH 2/2] st/mesa: fix mipmap image size computation w.r.t. texture arrays

Brian Paul brianp at vmware.com
Fri Mar 23 07:18:52 PDT 2012


The image height or depth is the array_size for array textures.
Fixes https://bugs.freedesktop.org/show_bug.cgi?id=47742

NOTE: This is a candidate for the 8.0 branch.
---
 src/mesa/state_tracker/st_gen_mipmap.c |   18 +++++++++++++++---
 1 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/mesa/state_tracker/st_gen_mipmap.c b/src/mesa/state_tracker/st_gen_mipmap.c
index d349664..8892006 100644
--- a/src/mesa/state_tracker/st_gen_mipmap.c
+++ b/src/mesa/state_tracker/st_gen_mipmap.c
@@ -233,10 +233,22 @@ st_generate_mipmap(struct gl_context *ctx, GLenum target,
          = _mesa_get_tex_image(ctx, texObj, target, srcLevel);
       struct gl_texture_image *dstImage;
       struct st_texture_image *stImage;
-      uint dstWidth = u_minify(pt->width0, dstLevel);
-      uint dstHeight = u_minify(pt->height0, dstLevel);
-      uint dstDepth = u_minify(pt->depth0, dstLevel); 
       uint border = srcImage->Border;
+      uint dstWidth, dstHeight, dstDepth;
+
+      dstWidth = u_minify(pt->width0, dstLevel);
+      if (texObj->Target == GL_TEXTURE_1D_ARRAY) {
+         dstHeight = pt->array_size;
+      }
+      else {
+         dstHeight = u_minify(pt->height0, dstLevel);
+      }
+      if (texObj->Target == GL_TEXTURE_2D_ARRAY) {
+         dstDepth = pt->array_size;
+      }
+      else {
+         dstDepth = u_minify(pt->depth0, dstLevel);
+      }
 
       dstImage = _mesa_get_tex_image(ctx, texObj, target, dstLevel);
       if (!dstImage) {
-- 
1.7.3.4



More information about the mesa-dev mailing list