mesa: Fix region overlap conditions for rectangles with a shared edge
authorAnuj Phogat <anuj.phogat@gmail.com>
Fri, 11 Dec 2015 22:41:30 +0000 (14:41 -0800)
committerAnuj Phogat <anuj.phogat@gmail.com>
Fri, 10 Jun 2016 21:35:21 +0000 (14:35 -0700)
>From OpenGL 4.0 spec, section 4.3.2 "Copying Pixels":
"The pixels corresponding to these buffers are copied from the source
 rectangle bounded by the locations (srcX0, srcY 0) and (srcX1, srcY 1)
 to the destination rectangle bounded by the locations (dstX0, dstY 0)
 and (dstX1, dstY 1). The lower bounds of the rectangle are inclusive,
 while the upper bounds are exclusive."

So, the rectangles sharing just an edge shouldn't overlap.
     -----------
    |           |
     ------- ---
    |       |   |
    |       |   |
     ------- ---

Cc: "12.0" <mesa-stable@lists.freedesktop.org>
Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/mesa/main/blit.c

index 5729e601c12ce4b8e1d18791e9d04462fdbeed7f..e739130f98491bb1c901e6caeccd05cd52c9b4eb 100644 (file)
@@ -68,16 +68,16 @@ _mesa_regions_overlap(int srcX0, int srcY0,
                       int dstX0, int dstY0,
                       int dstX1, int dstY1)
 {
-   if (MAX2(srcX0, srcX1) < MIN2(dstX0, dstX1))
+   if (MAX2(srcX0, srcX1) <= MIN2(dstX0, dstX1))
       return false; /* dst completely right of src */
 
-   if (MAX2(dstX0, dstX1) < MIN2(srcX0, srcX1))
+   if (MAX2(dstX0, dstX1) <= MIN2(srcX0, srcX1))
       return false; /* dst completely left of src */
 
-   if (MAX2(srcY0, srcY1) < MIN2(dstY0, dstY1))
+   if (MAX2(srcY0, srcY1) <= MIN2(dstY0, dstY1))
       return false; /* dst completely above src */
 
-   if (MAX2(dstY0, dstY1) < MIN2(srcY0, srcY1))
+   if (MAX2(dstY0, dstY1) <= MIN2(srcY0, srcY1))
       return false; /* dst completely below src */
 
    return true; /* some overlap */