[xserver-commit] xserver/render mipict.c,1.18,1.19

Keith Packard xserver-commit@pdx.freedesktop.org
Mon, 01 Dec 2003 17:59:40 -0800


Committed by: keithp

Update of /cvs/xserver/xserver/render
In directory pdx:/tmp/cvs-serv28394/render

Modified Files:
	mipict.c 
Log Message:
	* composite/compinit.c: (compCloseScreen), (compScreenInit):
	* composite/compint.h:
	* composite/compwindow.c: (compPositionWindow), (compClipNotify),
	(compWindowUpdateAutomatic):
	Wrap ClipNotify to see region motions during MoveWindow.
	
	Check window reorigin in PositionWindow and bump pixmap
	serial numbers to revalidate GCs.

	Fix picture clip region origin in automatic update
	
	* damageext/damageext.c: (DamageClientCallback):
	Initialize client private 'critical' value
	
	* fb/fbpixmap.c: (fbValidateBits), (fbValidateDrawable):
	* fb/fbscreen.c: (fbFinishScreenInit):
	Clean up pixmap bounds checking code to only affect
	contents allocated by fb.
	
	* render/mipict.c: (miCompositeSourceValidate),
	(miComputeCompositeRegion):
	Oops.  Call SourceValidate for Composite operations.

	* configure.ac:
	* hw/kdrive/Makefile.am:
	* hw/kdrive/chips/.cvsignore:
	* hw/kdrive/chips/Imakefile:
	* hw/kdrive/chips/Makefile.am:
	* hw/kdrive/chips/chips.c: (chipsRandRSetConfig), (chipsRandRInit),
	(chipsFinishInitScreen), (chipsCreateResources):
	* hw/kdrive/chips/chipsdraw.c: (chipsWaitIdle),
	(chipsPrepareSolid), (chipsPrepareCopy), (chipsDrawInit),
	(chipsDrawEnable):
	Add Xchips server (vesa based)


Index: mipict.c
===================================================================
RCS file: /cvs/xserver/xserver/render/mipict.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -d -r1.18 -r1.19
--- mipict.c	22 Nov 2003 00:49:11 -0000	1.18
+++ mipict.c	2 Dec 2003 01:59:38 -0000	1.19
@@ -325,6 +325,58 @@
     }
 }
 
+static void
+miCompositeSourceValidate (PicturePtr	pPicture,
+			   INT16	x,
+			   INT16	y,
+			   CARD16	width,
+			   CARD16	height)
+{
+    DrawablePtr	pDrawable = pPicture->pDrawable;
+    ScreenPtr	pScreen = pDrawable->pScreen;
+    
+    if (pScreen->SourceValidate)
+    {
+        x -= pPicture->pDrawable->x;
+        y -= pPicture->pDrawable->y;
+	if (pPicture->transform)
+	{
+	    xPoint	    points[4];
+	    int		    i;
+	    int		    xmin, ymin, xmax, ymax;
+
+#define VectorSet(i,_x,_y) { points[i].x = _x; points[i].y = _y; }
+	    VectorSet (0, x, y);
+	    VectorSet (1, x + width, y);
+	    VectorSet (2, x, y + height);
+	    VectorSet (3, x + width, y + height);
+	    xmin = ymin = 32767;
+	    xmax = ymax = -32737;
+	    for (i = 0; i < 4; i++)
+	    {
+		PictVector  t;
+		t.vector[0] = IntToxFixed (points[i].x);
+		t.vector[1] = IntToxFixed (points[i].y);
+		t.vector[2] = xFixed1;
+		if (PictureTransformPoint (pPicture->transform, &t))
+		{
+		    int	tx = xFixedToInt (t.vector[0]);
+		    int ty = xFixedToInt (t.vector[1]);
+		    if (tx < xmin) xmin = tx;
+		    if (tx > xmax) xmax = tx;
+		    if (ty < ymin) ymin = ty;
+		    if (ty > ymax) ymax = ty;
+		}
+	    }
+	    x = xmin;
+	    y = ymin;
+	    width = xmax - xmin;
+	    height = ymax - ymin;
+	}
+	(*pScreen->SourceValidate) (pDrawable, x, y, width, height);
+    }
+}
+
 /*
  * returns FALSE if the final region is empty.  Indistinguishable from
  * an allocation failure, but rendering ignores those anyways.
@@ -411,6 +463,9 @@
 	    }
 	}
     }
+    miCompositeSourceValidate (pSrc, xSrc, ySrc, width, height);
+    if (pMask)
+	miCompositeSourceValidate (pMask, xMask, yMask, width, height);
     return TRUE;
 }