From: Søren Sandmann Pedersen <s...@redhat.com>

The fb version simply calls the new pixman_composite_triangles(). This
allows us to get rid of miCreateAlphaPicture().

Signed-off-by: Søren Sandmann <s...@redhat.com>
---
 fb/fbpict.c     |    1 +
 fb/fbpict.h     |   10 +++++
 fb/fbtrap.c     |  109 +++++++++++++++++++++++++++++++++++++++----------------
 render/mipict.c |    2 +-
 render/mipict.h |   17 ---------
 render/mitrap.c |   49 -------------------------
 render/mitri.c  |   59 ------------------------------
 7 files changed, 90 insertions(+), 157 deletions(-)

diff --git a/fb/fbpict.c b/fb/fbpict.c
index 6e66db8..312f3df 100644
--- a/fb/fbpict.c
+++ b/fb/fbpict.c
@@ -367,6 +367,7 @@ fbPictureInit (ScreenPtr pScreen, PictFormatPtr formats, 
int nformats)
     ps->Trapezoids = fbTrapezoids;
     ps->AddTraps = fbAddTraps;
     ps->AddTriangles = fbAddTriangles;
+    ps->Triangles = fbTriangles;
 
     return TRUE;
 }
diff --git a/fb/fbpict.h b/fb/fbpict.h
index 03d2665..b880ebb 100644
--- a/fb/fbpict.h
+++ b/fb/fbpict.h
@@ -75,4 +75,14 @@ fbTrapezoids (CARD8      op,
              int           ntrap,
              xTrapezoid    *traps);
 
+extern _X_EXPORT void
+fbTriangles (CARD8         op,
+            PicturePtr     pSrc,
+            PicturePtr     pDst,
+            PictFormatPtr  maskFormat,
+            INT16          xSrc,
+            INT16          ySrc,
+            int            ntris,
+            xTriangle     *tris);
+
 #endif /* _FBPICT_H_ */
diff --git a/fb/fbtrap.c b/fb/fbtrap.c
index 687de55..3b197b4 100644
--- a/fb/fbtrap.c
+++ b/fb/fbtrap.c
@@ -157,51 +157,56 @@ fbAddTriangles (PicturePtr  pPicture,
     }
 }
 
+typedef void (* CompositeShapesFunc) (pixman_op_t op,
+                                     pixman_image_t *src,
+                                     pixman_image_t *dst,
+                                     pixman_format_code_t mask_format,
+                                     int x_src, int y_src,
+                                     int x_dst, int y_dst,
+                                     int n_shapes, const uint8_t *shapes);
 
-void
-fbTrapezoids (CARD8        op,
-             PicturePtr    pSrc,
-             PicturePtr    pDst,
-             PictFormatPtr maskFormat,
-             INT16         xSrc,
-             INT16         ySrc,
-             int           ntrap,
-             xTrapezoid    *traps)
+static void
+fbShapes (CompositeShapesFunc  composite,
+         pixman_op_t           op,
+         PicturePtr            pSrc,
+         PicturePtr            pDst,
+         PictFormatPtr         maskFormat,
+         int16_t               xSrc,
+         int16_t               ySrc,
+         int16_t               xDst,
+         int16_t               yDst,
+         int                   nshapes,
+         int                   shape_size,
+         const uint8_t *       shapes)
 {
     pixman_image_t *src, *dst;
     int src_xoff, src_yoff;
     int dst_xoff, dst_yoff;
 
-    if (ntrap == 0)
-       return;
-    
     src = image_from_pict (pSrc, FALSE, &src_xoff, &src_yoff);
     dst = image_from_pict (pDst, TRUE, &dst_xoff, &dst_yoff);
 
     if (src && dst)
     {
        pixman_format_code_t format;
-       int x_dst, y_dst;
-       int i;
 
-       x_dst = traps[0].left.p1.x >> 16;
-       y_dst = traps[0].left.p1.y >> 16;
-           
        if (!maskFormat)
        {
+           int i;
+
            if (pDst->polyEdge == PolyEdgeSharp)
                format = PIXMAN_a1;
            else
                format = PIXMAN_a8;
 
-           for (i = 0; i < ntrap; ++i)
+           for (i = 0; i < nshapes; ++i)
            {
-               pixman_composite_trapezoids (op, src, dst, format,
-                                            xSrc + src_xoff,
-                                            ySrc + src_yoff,
-                                            x_dst + dst_xoff,
-                                            y_dst + dst_yoff,
-                                            1, (pixman_trapezoid_t *)traps++);
+               composite (op, src, dst, format,
+                          xSrc + src_xoff,
+                          ySrc + src_yoff,
+                          xDst + dst_xoff,
+                          yDst + dst_yoff,
+                          1, shapes + i * shape_size);
            }
        }
        else
@@ -221,16 +226,58 @@ fbTrapezoids (CARD8           op,
                format = PIXMAN_a8;
                break;
            }
-
-           pixman_composite_trapezoids (op, src, dst, format,
-                                        xSrc + src_xoff,
-                                        ySrc + src_yoff,
-                                        x_dst + dst_xoff,
-                                        y_dst + dst_yoff,
-                                        ntrap, (pixman_trapezoid_t *)traps);
+           
+           composite (op, src, dst, format,
+                      xSrc + src_xoff,
+                      ySrc + src_yoff,
+                      xDst + dst_xoff,
+                      yDst + dst_yoff,
+                      nshapes, shapes);
        }
     }
 
     free_pixman_pict (pSrc, src);
     free_pixman_pict (pDst, dst);
 }
+
+void
+fbTrapezoids (CARD8        op,
+             PicturePtr    pSrc,
+             PicturePtr    pDst,
+             PictFormatPtr maskFormat,
+             INT16         xSrc,
+             INT16         ySrc,
+             int           ntrap,
+             xTrapezoid    *traps)
+{
+    int xDst, yDst;
+
+    xDst = traps[0].left.p1.x >> 16;
+    yDst = traps[0].left.p1.y >> 16;
+    
+    fbShapes ((CompositeShapesFunc)pixman_composite_trapezoids,
+             op, pSrc, pDst, maskFormat,
+             xSrc, ySrc, xDst, yDst,
+             ntrap, sizeof (xTrapezoid), (const uint8_t *)traps);
+}
+
+void
+fbTriangles (CARD8         op,
+            PicturePtr    pSrc,
+            PicturePtr    pDst,
+            PictFormatPtr maskFormat,
+            INT16          xSrc,
+            INT16          ySrc,
+            int            ntris,
+            xTriangle    *tris)
+{ 
+    int xDst, yDst;
+
+    xDst = tris[0].p1.x >> 16;
+    yDst = tris[0].p1.y >> 16;
+    
+    fbShapes ((CompositeShapesFunc)pixman_composite_triangles,
+             op, pSrc, pDst, maskFormat,
+             xSrc, ySrc, xDst, yDst,
+             ntris, sizeof (xTriangle), (const uint8_t *)tris);
+}
diff --git a/render/mipict.c b/render/mipict.c
index 46b45b5..3b73888 100644
--- a/render/mipict.c
+++ b/render/mipict.c
@@ -632,7 +632,7 @@ miPictureInit (ScreenPtr pScreen, PictFormatPtr formats, 
int nformats)
     ps->Glyphs         = miGlyphs;
     ps->CompositeRects = miCompositeRects;
     ps->Trapezoids     = 0;
-    ps->Triangles      = miTriangles;
+    ps->Triangles      = 0;
     ps->TriStrip       = miTriStrip;
     ps->TriFan         = miTriFan;
     
diff --git a/render/mipict.h b/render/mipict.h
index be7b20b..d149589 100644
--- a/render/mipict.h
+++ b/render/mipict.h
@@ -152,16 +152,6 @@ extern _X_EXPORT void
 miTriangleBounds (int ntri, xTriangle *tris, BoxPtr bounds);
 
 extern _X_EXPORT void
-miTriangles (CARD8         op,
-            PicturePtr     pSrc,
-            PicturePtr     pDst,
-            PictFormatPtr  maskFormat,
-            INT16          xSrc,
-            INT16          ySrc,
-            int            ntri,
-            xTriangle      *tris);
-
-extern _X_EXPORT void
 miTriStrip (CARD8          op,
            PicturePtr      pSrc,
            PicturePtr      pDst,
@@ -181,13 +171,6 @@ miTriFan (CARD8            op,
          int           npoint,
          xPointFixed   *points);
 
-extern _X_EXPORT PicturePtr
-miCreateAlphaPicture (ScreenPtr            pScreen, 
-                     PicturePtr    pDst,
-                     PictFormatPtr pPictFormat,
-                     CARD16        width,
-                     CARD16        height);
-
 extern _X_EXPORT Bool
 miInitIndexed (ScreenPtr       pScreen,
               PictFormatPtr    pFormat);
diff --git a/render/mitrap.c b/render/mitrap.c
index 1f09a1e..445f236 100644
--- a/render/mitrap.c
+++ b/render/mitrap.c
@@ -34,55 +34,6 @@
 #include "picturestr.h"
 #include "mipict.h"
 
-PicturePtr
-miCreateAlphaPicture (ScreenPtr            pScreen, 
-                     PicturePtr    pDst,
-                     PictFormatPtr pPictFormat,
-                     CARD16        width,
-                     CARD16        height)
-{
-    PixmapPtr      pPixmap;
-    PicturePtr     pPicture;
-    GCPtr          pGC;
-    int                    error;
-    xRectangle     rect;
-
-    if (width > 32767 || height > 32767)
-       return 0;
-
-    if (!pPictFormat)
-    {
-       if (pDst->polyEdge == PolyEdgeSharp)
-           pPictFormat = PictureMatchFormat (pScreen, 1, PICT_a1);
-       else
-           pPictFormat = PictureMatchFormat (pScreen, 8, PICT_a8);
-       if (!pPictFormat)
-           return 0;
-    }
-
-    pPixmap = (*pScreen->CreatePixmap) (pScreen, width, height, 
-                                       pPictFormat->depth, 0);
-    if (!pPixmap)
-       return 0;
-    pGC = GetScratchGC (pPixmap->drawable.depth, pScreen);
-    if (!pGC)
-    {
-       (*pScreen->DestroyPixmap) (pPixmap);
-       return 0;
-    }
-    ValidateGC (&pPixmap->drawable, pGC);
-    rect.x = 0;
-    rect.y = 0;
-    rect.width = width;
-    rect.height = height;
-    (*pGC->ops->PolyFillRect)(&pPixmap->drawable, pGC, 1, &rect);
-    FreeScratchGC (pGC);
-    pPicture = CreatePicture (0, &pPixmap->drawable, pPictFormat,
-                             0, 0, serverClient, &error);
-    (*pScreen->DestroyPixmap) (pPixmap);
-    return pPicture;
-}
-
 static xFixed
 miLineFixedX (xLineFixed *l, xFixed y, Bool ceil)
 {
diff --git a/render/mitri.c b/render/mitri.c
index a805a71..b258c21 100644
--- a/render/mitri.c
+++ b/render/mitri.c
@@ -68,65 +68,6 @@ miTriangleBounds (int ntri, xTriangle *tris, BoxPtr bounds)
 }
 
 void
-miTriangles (CARD8         op,
-            PicturePtr     pSrc,
-            PicturePtr     pDst,
-            PictFormatPtr  maskFormat,
-            INT16          xSrc,
-            INT16          ySrc,
-            int            ntri,
-            xTriangle      *tris)
-{
-    ScreenPtr          pScreen = pDst->pDrawable->pScreen;
-    PictureScreenPtr    ps = GetPictureScreen(pScreen);
-    
-    /*
-     * Check for solid alpha add
-     */
-    if (op == PictOpAdd && miIsSolidAlpha (pSrc))
-    {
-       (*ps->AddTriangles) (pDst, 0, 0, ntri, tris);
-    }
-    else if (maskFormat)
-    {
-       BoxRec          bounds;
-       PicturePtr      pPicture;
-       INT16           xDst, yDst;
-       INT16           xRel, yRel;
-       
-       xDst = tris[0].p1.x >> 16;
-       yDst = tris[0].p1.y >> 16;
-
-       miTriangleBounds (ntri, tris, &bounds);
-       if (bounds.x2 <= bounds.x1 || bounds.y2 <= bounds.y1)
-           return;
-       pPicture = miCreateAlphaPicture (pScreen, pDst, maskFormat,
-                                        bounds.x2 - bounds.x1,
-                                        bounds.y2 - bounds.y1);
-       if (!pPicture)
-           return;
-       (*ps->AddTriangles) (pPicture, -bounds.x1, -bounds.y1, ntri, tris);
-       
-       xRel = bounds.x1 + xSrc - xDst;
-       yRel = bounds.y1 + ySrc - yDst;
-       CompositePicture (op, pSrc, pPicture, pDst,
-                         xRel, yRel, 0, 0, bounds.x1, bounds.y1,
-                         bounds.x2 - bounds.x1, bounds.y2 - bounds.y1);
-       FreePicture (pPicture, 0);
-    }
-    else
-    {
-       if (pDst->polyEdge == PolyEdgeSharp)
-           maskFormat = PictureMatchFormat (pScreen, 1, PICT_a1);
-       else
-           maskFormat = PictureMatchFormat (pScreen, 8, PICT_a8);
-       
-       for (; ntri; ntri--, tris++)
-           miTriangles (op, pSrc, pDst, maskFormat, xSrc, ySrc, 1, tris);
-    }
-}
-
-void
 miTriStrip (CARD8          op,
            PicturePtr      pSrc,
            PicturePtr      pDst,
-- 
1.7.3.1

_______________________________________________
Pixman mailing list
Pixman@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/pixman

Reply via email to