st/mesa: fix incorrect src/dst stride params to _mesa_generate_mipmap_level()
authorBrian Paul <brianp@vmware.com>
Mon, 18 May 2009 16:28:04 +0000 (10:28 -0600)
committerBrian Paul <brianp@vmware.com>
Mon, 18 May 2009 16:28:04 +0000 (10:28 -0600)
The stride needs to be in texels, not bytes.

src/mesa/state_tracker/st_gen_mipmap.c

index 3a88908022a1ce981b477a5cc49110dfe991d7a9..dc6d77825f5dcce0246e63adf824603c262239e3 100644 (file)
@@ -123,6 +123,7 @@ fallback_generate_mipmap(GLcontext *ctx, GLenum target,
       struct pipe_transfer *srcTrans, *dstTrans;
       const ubyte *srcData;
       ubyte *dstData;
+      int srcStride, dstStride;
 
       srcTrans = st_cond_flush_get_tex_transfer(st_context(ctx), pt, face,
                                                srcLevel, zslice,
@@ -139,14 +140,17 @@ fallback_generate_mipmap(GLcontext *ctx, GLenum target,
       srcData = (ubyte *) screen->transfer_map(screen, srcTrans);
       dstData = (ubyte *) screen->transfer_map(screen, dstTrans);
 
+      srcStride = srcTrans->stride / srcTrans->block.size;
+      dstStride = dstTrans->stride / dstTrans->block.size;
+
       _mesa_generate_mipmap_level(target, datatype, comps,
                    0 /*border*/,
                    pt->width[srcLevel], pt->height[srcLevel], pt->depth[srcLevel],
                    srcData,
-                   srcTrans->stride, /* stride in bytes */
+                   srcStride, /* stride in texels */
                    pt->width[dstLevel], pt->height[dstLevel], pt->depth[dstLevel],
                    dstData,
-                   dstTrans->stride); /* stride in bytes */
+                   dstStride); /* stride in texels */
 
       screen->transfer_unmap(screen, srcTrans);
       screen->transfer_unmap(screen, dstTrans);