[PATCH 1/2] render: Move miCompositeRects() into fb as fbCompositeRects().

Søren Sandmann sandmann at cs.au.dk
Wed Mar 30 09:37:21 PDT 2011


From: Søren Sandmann Pedersen <ssp at redhat.com>

It is not used anywhere else.

Signed-off-by: Soren Sandmann <ssp at redhat.com>
---
 fb/fbpict.c        |   47 +++++++++++++-
 fb/fbpict.h        |    7 ++
 render/Makefile.am |    1 -
 render/mipict.c    |    2 +-
 render/mipict.h    |    7 --
 render/mirect.c    |  185 ----------------------------------------------------
 6 files changed, 54 insertions(+), 195 deletions(-)
 delete mode 100644 render/mirect.c

diff --git a/fb/fbpict.c b/fb/fbpict.c
index 133f422..6b7c920 100644
--- a/fb/fbpict.c
+++ b/fb/fbpict.c
@@ -34,6 +34,7 @@
 #include "picturestr.h"
 #include "mipict.h"
 #include "fbpict.h"
+#include "damage.h"
 
 void
 fbComposite (CARD8      op,
@@ -76,6 +77,50 @@ fbComposite (CARD8      op,
     free_pixman_pict (pDst, dest);
 }
 
+void
+fbCompositeRects (CARD8		op,
+		  PicturePtr	pDst,
+		  xRenderColor  *color,
+		  int		nRect,
+		  xRectangle    *rects)
+{
+    RegionPtr damage;
+    pixman_image_t *image;
+    int dst_xoff, dst_yoff;
+    int i;
+
+    damage = RegionFromRects (nRect, rects, CT_UNSORTED);
+    RegionIntersect (damage, damage, pDst->pCompositeClip);
+
+    if (RegionBroken (damage))
+	return;
+
+    DamageRegionAppend (pDst->pDrawable, damage);
+
+    image = image_from_pict (pDst, TRUE, &dst_xoff, &dst_yoff);
+
+    for (i = 0; i < nRect; ++i)
+    {
+	rects[i].x += dst_xoff;
+	rects[i].y += dst_yoff;
+    }
+
+    pixman_image_fill_rectangles (
+	op, image, (pixman_color_t *)color, nRect,
+	(const pixman_rectangle16_t *)rects);
+
+    for (i = 0; i < nRect; ++i)
+    {
+	rects[i].x -= dst_xoff;
+	rects[i].y -= dst_yoff;
+    }
+
+    free_pixman_pict (pDst, image);
+
+    DamageRegionProcessPending (pDst->pDrawable);
+    RegionDestroy (damage);
+}
+
 static pixman_image_t *
 create_solid_fill_image (PicturePtr pict)
 {
@@ -362,7 +407,7 @@ fbPictureInit (ScreenPtr pScreen, PictFormatPtr formats, int nformats)
     ps = GetPictureScreen(pScreen);
     ps->Composite = fbComposite;
     ps->Glyphs = miGlyphs;
-    ps->CompositeRects = miCompositeRects;
+    ps->CompositeRects = fbCompositeRects;
     ps->RasterizeTrapezoid = fbRasterizeTrapezoid;
     ps->Trapezoids = fbTrapezoids;
     ps->AddTraps = fbAddTraps;
diff --git a/fb/fbpict.h b/fb/fbpict.h
index b880ebb..76c4d44 100644
--- a/fb/fbpict.h
+++ b/fb/fbpict.h
@@ -43,6 +43,13 @@ fbComposite (CARD8      op,
 	     CARD16     width,
 	     CARD16     height);
 
+extern _X_EXPORT void
+fbCompositeRects (CARD8		op,
+		  PicturePtr	pDst,
+		  xRenderColor  *color,
+		  int		nRect,
+		  xRectangle    *rects);
+
 /* fbtrap.c */
 
 extern _X_EXPORT void
diff --git a/render/Makefile.am b/render/Makefile.am
index d02028b..80c3cb7 100644
--- a/render/Makefile.am
+++ b/render/Makefile.am
@@ -9,7 +9,6 @@ librender_la_SOURCES =	\
 	matrix.c	\
 	miindex.c	\
 	mipict.c	\
-	mirect.c	\
 	mitrap.c	\
 	mitri.c		\
 	picture.c	\
diff --git a/render/mipict.c b/render/mipict.c
index 9decd39..fefca84 100644
--- a/render/mipict.c
+++ b/render/mipict.c
@@ -598,7 +598,7 @@ miPictureInit (ScreenPtr pScreen, PictFormatPtr formats, int nformats)
     /* MI rendering routines */
     ps->Composite	= 0;			/* requires DDX support */
     ps->Glyphs		= miGlyphs;
-    ps->CompositeRects	= miCompositeRects;
+    ps->CompositeRects	= 0;
     ps->Trapezoids	= 0;
     ps->Triangles	= 0;
     
diff --git a/render/mipict.h b/render/mipict.h
index f6d9dee..0767b62 100644
--- a/render/mipict.h
+++ b/render/mipict.h
@@ -133,13 +133,6 @@ extern _X_EXPORT Bool
 miIsSolidAlpha (PicturePtr pSrc);
 
 extern _X_EXPORT void
-miCompositeRects (CARD8		op,
-		  PicturePtr	pDst,
-		  xRenderColor  *color,
-		  int		nRect,
-		  xRectangle    *rects);
-
-extern _X_EXPORT void
 miTrapezoidBounds (int ntrap, xTrapezoid *traps, BoxPtr box);
 
 extern _X_EXPORT void
diff --git a/render/mirect.c b/render/mirect.c
deleted file mode 100644
index 1f8fd2c..0000000
--- a/render/mirect.c
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- *
- * Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  Keith Packard makes no
- * representations about the suitability of this software for any purpose.  It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include "scrnintstr.h"
-#include "gcstruct.h"
-#include "pixmapstr.h"
-#include "windowstr.h"
-#include "mi.h"
-#include "picturestr.h"
-#include "mipict.h"
-
-static void
-miColorRects (PicturePtr    pDst,
-	      PicturePtr    pClipPict,
-	      xRenderColor  *color,
-	      int	    nRect,
-	      xRectangle    *rects,
-	      int	    xoff,
-	      int	    yoff)
-{
-    CARD32		pixel;
-    GCPtr		pGC;
-    ChangeGCVal		tmpval[5];
-    RegionPtr		pClip;
-    unsigned long	mask;
-
-    miRenderColorToPixel (pDst->pFormat, color, &pixel);
-
-    pGC = GetScratchGC (pDst->pDrawable->depth, pDst->pDrawable->pScreen);
-    if (!pGC)
-	return;
-    tmpval[0].val = GXcopy;
-    tmpval[1].val = pixel;
-    tmpval[2].val = pDst->subWindowMode;
-    mask = GCFunction | GCForeground | GCSubwindowMode;
-    if (pClipPict->clientClipType == CT_REGION)
-    {
-	tmpval[3].val = pDst->clipOrigin.x - xoff;
-	tmpval[4].val = pDst->clipOrigin.y - yoff;
-	mask |= GCClipXOrigin|GCClipYOrigin;
-	
-	pClip = RegionCreate(NULL);
-	RegionCopy(pClip,
-		     (RegionPtr) pClipPict->clientClip);
-	(*pGC->funcs->ChangeClip) (pGC, CT_REGION, pClip, 0);
-    }
-
-    ChangeGC (NullClient, pGC, mask, tmpval);
-    ValidateGC (pDst->pDrawable, pGC);
-    if (xoff || yoff)
-    {
-	int	i;
-	for (i = 0; i < nRect; i++)
-	{
-	    rects[i].x -= xoff;
-	    rects[i].y -= yoff;
-	}
-    }
-    (*pGC->ops->PolyFillRect) (pDst->pDrawable, pGC, nRect, rects);
-    if (xoff || yoff)
-    {
-	int	i;
-	for (i = 0; i < nRect; i++)
-	{
-	    rects[i].x += xoff;
-	    rects[i].y += yoff;
-	}
-    }
-    FreeScratchGC (pGC);
-}
-
-void
-miCompositeRects (CARD8		op,
-		  PicturePtr	pDst,
-		  xRenderColor  *color,
-		  int		nRect,
-		  xRectangle    *rects)
-{
-    ScreenPtr		pScreen = pDst->pDrawable->pScreen;
-    
-    if (color->alpha == 0xffff)
-    {
-	if (op == PictOpOver)
-	    op = PictOpSrc;
-    }
-    if (op == PictOpClear)
-	color->red = color->green = color->blue = color->alpha = 0;
-    
-    if (op == PictOpSrc || op == PictOpClear)
-    {
-	miColorRects (pDst, pDst, color, nRect, rects, 0, 0);
-	if (pDst->alphaMap)
-	    miColorRects (pDst->alphaMap, pDst,
-			  color, nRect, rects,
-			  pDst->alphaOrigin.x,
-			  pDst->alphaOrigin.y);
-    }
-    else
-    {
-	PictFormatPtr	rgbaFormat;
-	PixmapPtr	pPixmap;
-	PicturePtr	pSrc;
-	xRectangle	one;
-	int		error;
-	Pixel		pixel;
-	GCPtr		pGC;
-	ChangeGCVal	gcvals[2];
-	XID		tmpval[1];
-
-	rgbaFormat = PictureMatchFormat (pScreen, 32, PICT_a8r8g8b8);
-	if (!rgbaFormat)
-	    goto bail1;
-	
-	pPixmap = (*pScreen->CreatePixmap) (pScreen, 1, 1, rgbaFormat->depth,
-					    CREATE_PIXMAP_USAGE_SCRATCH);
-	if (!pPixmap)
-	    goto bail2;
-	
-	miRenderColorToPixel (rgbaFormat, color, &pixel);
-
-	pGC = GetScratchGC (rgbaFormat->depth, pScreen);
-	if (!pGC)
-	    goto bail3;
-	gcvals[0].val = GXcopy;
-	gcvals[1].val = pixel;
-
-	ChangeGC (NullClient, pGC, GCFunction | GCForeground, gcvals);
-	ValidateGC (&pPixmap->drawable, pGC);
-	one.x = 0;
-	one.y = 0;
-	one.width = 1;
-	one.height = 1;
-	(*pGC->ops->PolyFillRect) (&pPixmap->drawable, pGC, 1, &one);
-	
-	tmpval[0] = xTrue;
-	pSrc = CreatePicture (0, &pPixmap->drawable, rgbaFormat,
-			      CPRepeat, tmpval, serverClient, &error);
-			      
-	if (!pSrc)
-	    goto bail4;
-
-	while (nRect--)
-	{
-	    CompositePicture (op, pSrc, 0, pDst, 0, 0, 0, 0, 
-			      rects->x,
-			      rects->y,
-			      rects->width,
-			      rects->height);
-	    rects++;
-	}
-
-	FreePicture ((pointer) pSrc, 0);
-bail4:
-	FreeScratchGC (pGC);
-bail3:
-	(*pScreen->DestroyPixmap) (pPixmap);
-bail2:
-bail1:
-	;
-    }
-}
-- 
1.7.4



More information about the xorg-devel mailing list