[PATCH 2/2] Move miTriangles to fb as fbTriangles().

Søren Sandmann Pedersen ssp at redhat.com
Wed Jan 12 05:49:15 PST 2011


The fb version simply calls the new pixman_composite_triangles(). This
allows us to get rid of miCreateAlphaPicture().
---
 fb/fbpict.c     |    1 +
 fb/fbpict.h     |   10 ++++++
 fb/fbtrap.c     |   87 +++++++++++++++++++++++++++++++++++++++++++------------
 render/mipict.c |    2 +-
 render/mipict.h |   17 -----------
 render/mitrap.c |   49 -------------------------------
 render/mitri.c  |   59 -------------------------------------
 7 files changed, 80 insertions(+), 145 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 578c327..5387e1a 100644
--- a/fb/fbtrap.c
+++ b/fb/fbtrap.c
@@ -157,16 +157,27 @@ 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, void *shapes);
 
-void
-fbTrapezoids (CARD8	    op,
-	      PicturePtr    pSrc,
-	      PicturePtr    pDst,
-	      PictFormatPtr maskFormat,
-	      INT16	    xSrc,
-	      INT16	    ySrc,
-	      int	    ntrap,
-	      xTrapezoid    *traps)
+static void
+fbShapes (CompositeShapesFunc	composite,
+	  CARD8			op,
+	  PicturePtr		pSrc,
+	  PicturePtr		pDst,
+	  PictFormatPtr		maskFormat,
+	  INT16			xSrc,
+	  INT16			ySrc,
+	  INT16			xDst,
+	  INT16			yDst,
+	  int			nshapes,
+	  void *		shapes)
+	  
 {
     pixman_image_t *src, *dst;
     int src_xoff, src_yoff;
@@ -178,7 +189,6 @@ fbTrapezoids (CARD8	    op,
     if (src && dst)
     {
 	pixman_format_code_t format;
-	int x_dst, y_dst;
 
 	if (!maskFormat)
 	{
@@ -206,17 +216,56 @@ fbTrapezoids (CARD8	    op,
 	    }
 	}
 
-	x_dst = traps[0].left.p1.x >> 16;
-	y_dst = traps[0].left.p1.y >> 16;
-	
-	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, 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, 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



More information about the xorg-devel mailing list