mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 18:18:06 +02:00
i965: Fix inversion for glCopyPixels to/from FBOs.
fixes piglit fbo-copypix.
(cherry picked from commit a589da14de)
This commit is contained in:
parent
fdbe1ca0bd
commit
63fbae81e0
4 changed files with 20 additions and 13 deletions
|
|
@ -518,7 +518,8 @@ intel_miptree_image_copy(struct intel_context *intel,
|
|||
intel_miptree_get_image_offset(dst, level, face, i, &dst_x, &dst_y);
|
||||
success = intel_region_copy(intel,
|
||||
dst->region, 0, dst_x, dst_y,
|
||||
src->region, 0, src_x, src_y, width, height,
|
||||
src->region, 0, src_x, src_y,
|
||||
width, height, GL_FALSE,
|
||||
GL_COPY);
|
||||
if (!success) {
|
||||
GLubyte *src_ptr, *dst_ptr;
|
||||
|
|
|
|||
|
|
@ -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__);
|
||||
|
|
|
|||
|
|
@ -371,8 +371,11 @@ intel_region_copy(struct intel_context *intel,
|
|||
struct intel_region *src,
|
||||
GLuint src_offset,
|
||||
GLuint srcx, GLuint srcy, GLuint width, GLuint height,
|
||||
GLboolean flip,
|
||||
GLenum logicop)
|
||||
{
|
||||
uint32_t src_pitch = src->pitch;
|
||||
|
||||
_DBG("%s\n", __FUNCTION__);
|
||||
|
||||
if (intel == NULL)
|
||||
|
|
@ -388,9 +391,12 @@ intel_region_copy(struct intel_context *intel,
|
|||
|
||||
assert(src->cpp == dst->cpp);
|
||||
|
||||
if (flip)
|
||||
src_pitch = -src_pitch;
|
||||
|
||||
return intelEmitCopyBlit(intel,
|
||||
dst->cpp,
|
||||
src->pitch, src->buffer, src_offset, src->tiling,
|
||||
src_pitch, src->buffer, src_offset, src->tiling,
|
||||
dst->pitch, dst->buffer, dst_offset, dst->tiling,
|
||||
srcx, srcy, dstx, dsty, width, height,
|
||||
logicop);
|
||||
|
|
|
|||
|
|
@ -121,6 +121,7 @@ intel_region_copy(struct intel_context *intel,
|
|||
struct intel_region *src,
|
||||
GLuint src_offset,
|
||||
GLuint srcx, GLuint srcy, GLuint width, GLuint height,
|
||||
GLboolean flip,
|
||||
GLenum logicop);
|
||||
|
||||
/* Helpers for zerocopy uploads, particularly texture image uploads:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue