Unlike the previous commit removing this style of code, the code in
this one was originally wrong, and would fail to clip in the second
pass of clipping when y was > pbox->y2.
Bug #37233.
---
 uxa/uxa-accel.c |   79 ++++++++++++++++--------------------------------------
 1 files changed, 24 insertions(+), 55 deletions(-)

diff --git a/uxa/uxa-accel.c b/uxa/uxa-accel.c
index 31c37e8..8f6da63 100644
--- a/uxa/uxa-accel.c
+++ b/uxa/uxa-accel.c
@@ -63,11 +63,9 @@ uxa_fill_spans(DrawablePtr pDrawable, GCPtr pGC, int n,
        uxa_screen_t *uxa_screen = uxa_get_screen(screen);
        RegionPtr pClip = fbGetCompositeClip(pGC);
        PixmapPtr dst_pixmap, src_pixmap = NULL;
-       BoxPtr pextent, pbox;
+       BoxPtr pbox;
        int nbox;
-       int extentX1, extentX2, extentY1, extentY2;
-       int x1, x2, y, fullX1, fullX2, fullY1;
-       int partX1, partX2;
+       int x1, x2, y;
        int off_x, off_y;
        xRenderColor color;
        PictFormatPtr format;
@@ -142,62 +140,35 @@ uxa_fill_spans(DrawablePtr pDrawable, GCPtr pGC, int n,
                goto solid;
        }
 
-       pextent = REGION_EXTENTS(pGC->screen, pClip);
-       extentX1 = pextent->x1;
-       extentY1 = pextent->y1;
-       extentX2 = pextent->x2;
-       extentY2 = pextent->y2;
        while (n--) {
-               fullX1 = ppt->x;
-               fullY1 = ppt->y;
-               fullX2 = fullX1 + (int)*pwidth;
+               x1 = ppt->x;
+               y = ppt->y;
+               x2 = x1 + (int)*pwidth;
                ppt++;
                pwidth++;
 
-               if (fullY1 < extentY1 || extentY2 <= fullY1)
-                       continue;
+               nbox = REGION_NUM_RECTS(pClip);
+               pbox = REGION_RECTS(pClip);
+               while (nbox--) {
+                       if (pbox->y1 > y || pbox->y2 <= y)
+                               continue;
 
-               if (fullX1 < extentX1)
-                       fullX1 = extentX1;
+                       if (x1 < pbox->x1)
+                               x1 = pbox->x1;
 
-               if (fullX2 > extentX2)
-                       fullX2 = extentX2;
+                       if (x2 > pbox->x2)
+                               x2 = pbox->x2;
 
-               if (fullX1 >= fullX2)
-                       continue;
+                       if (x2 <= x1)
+                               continue;
 
-               nbox = REGION_NUM_RECTS(pClip);
-               if (nbox == 1) {
                        uxa_screen->info->composite(dst_pixmap,
-                                                   0, 0, 0, 0,
-                                                   fullX1 + off_x,
-                                                   fullY1 + off_y,
-                                                   fullX2 - fullX1, 1);
-               } else {
-                       pbox = REGION_RECTS(pClip);
-                       while (nbox--) {
-                               if (pbox->y1 > fullY1)
-                                       break;
-
-                               if (pbox->y1 <= fullY1) {
-                                       partX1 = pbox->x1;
-                                       if (partX1 < fullX1)
-                                               partX1 = fullX1;
-
-                                       partX2 = pbox->x2;
-                                       if (partX2 > fullX2)
-                                               partX2 = fullX2;
-
-                                       if (partX2 > partX1) {
-                                               
uxa_screen->info->composite(dst_pixmap,
-                                                                           0, 
0, 0, 0,
-                                                                           
partX1 + off_x,
-                                                                           
fullY1 + off_y,
-                                                                           
partX2 - partX1, 1);
-                                       }
-                               }
-                               pbox++;
-                       }
+                                                   0, 0,
+                                                   0, 0,
+                                                   x1 + off_x, y + off_y,
+                                                   x2 - x1, 1);
+
+                       pbox++;
                }
        }
 
@@ -240,10 +211,8 @@ solid:
                                continue;
 
                        (*uxa_screen->info->solid) (dst_pixmap,
-                                                   x1 + off_x,
-                                                   y + off_y,
-                                                   x2 + off_x,
-                                                   y + 1 + off_y);
+                                                   x1 + off_x, y + off_y,
+                                                   x2 + off_x, y + 1 + off_y);
                        pbox++;
                }
        }
-- 
1.7.5.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to