mesa: only copy the requested teximage faces
authorIlia Mirkin <imirkin@alum.mit.edu>
Thu, 27 Aug 2015 19:28:24 +0000 (15:28 -0400)
committerIlia Mirkin <imirkin@alum.mit.edu>
Thu, 27 Aug 2015 21:18:43 +0000 (17:18 -0400)
Cube maps are special in that they have separate teximages for each
face. We handled that by copying the data to them separately, but in
case zoffset != 0 or depth != 6 we would read off the end of the client
array or modify the wrong images.

zoffset/depth have already been verified by the time the code gets to
this stage, so no need to double-check.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Brian Paul <brianp@vmware.com>
Cc: "10.6 11.0" <mesa-stable@lists.freedesktop.org>
src/mesa/main/teximage.c

index 8d94903db6787f1aa2e0bbee6f616d98fa207aeb..ee4b6105064f1c13560cd6e4ad1a01606db6cd13 100644 (file)
@@ -3805,12 +3805,12 @@ texturesubimage(struct gl_context *ctx, GLuint dims,
       rowStride = _mesa_image_image_stride(&ctx->Unpack, width, height,
                                            format, type);
       /* Copy in each face. */
-      for (i = 0; i < 6; ++i) {
+      for (i = zoffset; i < zoffset + depth; ++i) {
          texImage = texObj->Image[i][level];
          assert(texImage);
 
          _mesa_texture_sub_image(ctx, 3, texObj, texImage, texObj->Target,
-                                 level, xoffset, yoffset, zoffset,
+                                 level, xoffset, yoffset, 0,
                                  width, height, 1, format,
                                  type, pixels, true);
          pixels = (GLubyte *) pixels + rowStride;