st/mesa: fix incorrect glCopyPixels position on fallback path
authorBrian Paul <brianp@vmware.com>
Thu, 17 Feb 2011 17:09:37 +0000 (10:09 -0700)
committerBrian Paul <brianp@vmware.com>
Thu, 17 Feb 2011 17:13:33 +0000 (10:13 -0700)
If we hit the pipe_get/put_tile() path for setting up the glCopyPixels
texture we were passing the wrong x/y position to pipe_get_tile().
The x/y position was already accounted for in the pipe_get_transfer()
call so we were effectively reading from 2*readX, 2*readY.

NOTE: This is a candidate for the 7.9 and 7.10 branches.

src/mesa/state_tracker/st_cb_drawpixels.c

index 07527002b4a0ed1e248a10898782a784432299ba..63b646be7207a4f57025fd61b3e73753087bf975 100644 (file)
@@ -1284,7 +1284,8 @@ st_CopyPixels(struct gl_context *ctx, GLint srcx, GLint srcy,
    else {
       /* CPU-based fallback/conversion */
       struct pipe_transfer *ptRead =
-         pipe_get_transfer(st->pipe, rbRead->texture, 0, 0,
+         pipe_get_transfer(st->pipe, rbRead->texture,
+                           0, 0, /* level, layer */
                            PIPE_TRANSFER_READ,
                            readX, readY, readW, readH);
       struct pipe_transfer *ptTex;
@@ -1308,7 +1309,7 @@ st_CopyPixels(struct gl_context *ctx, GLint srcx, GLint srcy,
          enum pipe_format readFormat, drawFormat;
          readFormat = util_format_linear(rbRead->texture->format);
          drawFormat = util_format_linear(pt->format);
-         pipe_get_tile_rgba_format(pipe, ptRead, readX, readY, readW, readH,
+         pipe_get_tile_rgba_format(pipe, ptRead, 0, 0, readW, readH,
                                    readFormat, buf);
          pipe_put_tile_rgba_format(pipe, ptTex, pack.SkipPixels, pack.SkipRows,
                                    readW, readH, drawFormat, buf);
@@ -1317,7 +1318,7 @@ st_CopyPixels(struct gl_context *ctx, GLint srcx, GLint srcy,
       else {
          /* GL_DEPTH */
          GLuint *buf = (GLuint *) malloc(width * height * sizeof(GLuint));
-         pipe_get_tile_z(pipe, ptRead, readX, readY, readW, readH, buf);
+         pipe_get_tile_z(pipe, ptRead, 0, 0, readW, readH, buf);
          pipe_put_tile_z(pipe, ptTex, pack.SkipPixels, pack.SkipRows,
                          readW, readH, buf);
          free(buf);