diff options
author | Eric Anholt <eric@anholt.net> | 2010-03-24 14:28:45 -0700 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2010-03-25 17:30:37 -0700 |
commit | 63fbae81e00964ccaf4c15d031893f5110b702a6 (patch) | |
tree | 67e89d45b74dd92c67f90e4c10d2b0901c457892 /src/mesa/drivers/dri/intel/intel_pixel_copy.c | |
parent | fdbe1ca0bd7451c8406795f829d661139d941f27 (diff) |
i965: Fix inversion for glCopyPixels to/from FBOs.
fixes piglit fbo-copypix.
(cherry picked from commit a589da14dee0c2a32e6e529f1a390b01a3ee4001)
Diffstat (limited to 'src/mesa/drivers/dri/intel/intel_pixel_copy.c')
-rw-r--r-- | src/mesa/drivers/dri/intel/intel_pixel_copy.c | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/src/mesa/drivers/dri/intel/intel_pixel_copy.c b/src/mesa/drivers/dri/intel/intel_pixel_copy.c index 757f2f7d4d..56faf076c7 100644 --- a/src/mesa/drivers/dri/intel/intel_pixel_copy.c +++ b/src/mesa/drivers/dri/intel/intel_pixel_copy.c @@ -116,6 +116,7 @@ do_blit_copypixels(GLcontext * ctx, GLint orig_dsty; GLint orig_srcx; GLint orig_srcy; + GLboolean flip = GL_FALSE; if (type == GL_DEPTH || type == GL_STENCIL) { if (INTEL_DEBUG & DEBUG_FALLBACKS) @@ -143,8 +144,6 @@ do_blit_copypixels(GLcontext * ctx, intelFlush(&intel->ctx); - /* XXX: We fail to handle different inversion between read and draw framebuffer. */ - /* Clip to destination buffer. */ orig_dstx = dstx; orig_dsty = dsty; @@ -167,23 +166,23 @@ do_blit_copypixels(GLcontext * ctx, dstx += srcx - orig_srcx; dsty += srcy - orig_srcy; - /* Convert from GL to hardware coordinates: */ + /* Flip dest Y if it's a window system framebuffer. */ if (fb->Name == 0) { - /* copypixels to a system framebuffer */ + /* copypixels to a window system framebuffer */ dsty = fb->Height - dsty - height; - } else { - /* copypixels to a user framebuffer object */ - dsty = dsty; + flip = !flip; } - /* Flip source Y if it's a system framebuffer. */ - if (read_fb->Name == 0) - srcy = fb->Height - srcy - height; + /* Flip source Y if it's a window system framebuffer. */ + if (read_fb->Name == 0) { + srcy = read_fb->Height - srcy - height; + flip = !flip; + } if (!intel_region_copy(intel, dst, 0, dstx, dsty, src, 0, srcx, srcy, - width, height, + width, height, flip, ctx->Color.ColorLogicOpEnabled ? ctx->Color.LogicOp : GL_COPY)) { DBG("%s: blit failure\n", __FUNCTION__); |