[Intel-gfx] [PATCH] intel: Use the compositing-aware colorkey filler instead of homebrew fail.

Eric Anholt eric at anholt.net
Fri Jan 15 21:56:06 CET 2010


Of course, it's still fail since you can't correctly composite
colorkey overlay, but at least this doesn't spam colorkey to the root
window.
---

This patch is untested.  Anyone with a love for overlay up for testing it?

 src/i810_video.c |    2 +-
 src/i830_video.c |   39 +++------------------------------------
 2 files changed, 4 insertions(+), 37 deletions(-)

diff --git a/src/i810_video.c b/src/i810_video.c
index c82fcc9..ee1a232 100644
--- a/src/i810_video.c
+++ b/src/i810_video.c
@@ -1085,7 +1085,7 @@ I810PutImage(
     if(!REGION_EQUAL(pScrn->pScreen, &pPriv->clip, clipBoxes)) {
 	REGION_COPY(pScrn->pScreen, &pPriv->clip, clipBoxes);
 	/* draw these */
-	xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, clipBoxes);
+	xf86XVFillKeyHelperDrawable(pDraw, pPriv->colorKey, clipBoxes);
     }
 
     I810DisplayVideo(pScrn, id, width, height, dstPitch, 
diff --git a/src/i830_video.c b/src/i830_video.c
index 964f1e0..d1f391b 100644
--- a/src/i830_video.c
+++ b/src/i830_video.c
@@ -1282,40 +1282,6 @@ i830_clip_video_helper(ScrnInfoPtr scrn,
 }
 
 static void
-i830_fill_colorkey(ScreenPtr screen, uint32_t key, RegionPtr clipboxes)
-{
-	DrawablePtr root = &WindowTable[screen->myNum]->drawable;
-	XID pval[2];
-	BoxPtr pbox = REGION_RECTS(clipboxes);
-	int i, nbox = REGION_NUM_RECTS(clipboxes);
-	xRectangle *rects;
-	GCPtr gc;
-
-	if (!xf86Screens[screen->myNum]->vtSema)
-		return;
-
-	gc = GetScratchGC(root->depth, screen);
-	pval[0] = key;
-	pval[1] = IncludeInferiors;
-	(void)ChangeGC(gc, GCForeground | GCSubwindowMode, pval);
-	ValidateGC(root, gc);
-
-	rects = xalloc(nbox * sizeof(xRectangle));
-
-	for (i = 0; i < nbox; i++, pbox++) {
-		rects[i].x = pbox->x1;
-		rects[i].y = pbox->y1;
-		rects[i].width = pbox->x2 - pbox->x1;
-		rects[i].height = pbox->y2 - pbox->y1;
-	}
-
-	(*gc->ops->PolyFillRect) (root, gc, nbox, rects);
-
-	xfree(rects);
-	FreeScratchGC(gc);
-}
-
-static void
 i830_wait_for_scanline(ScrnInfoPtr scrn, PixmapPtr pixmap,
 		       xf86CrtcPtr crtc, RegionPtr clipBoxes)
 {
@@ -1599,7 +1565,6 @@ I830PutImageOverlay(ScrnInfoPtr scrn,
 	     DrawablePtr drawable)
 {
 	intel_adaptor_private *adaptor_priv = (intel_adaptor_private *) data;
-	ScreenPtr screen = screenInfo.screens[scrn->scrnIndex];
 	int dstPitch;
 	int dstPitch2 = 0;
 	BoxRec dstBox;
@@ -1654,7 +1619,9 @@ I830PutImageOverlay(ScrnInfoPtr scrn,
 	/* update cliplist */
 	if (!REGION_EQUAL(scrn->pScreen, &adaptor_priv->clip, clipBoxes)) {
 		REGION_COPY(scrn->pScreen, &adaptor_priv->clip, clipBoxes);
-		i830_fill_colorkey(screen, adaptor_priv->colorKey, clipBoxes);
+		xf86XVFillKeyHelperDrawable(drawable,
+					    adaptor_priv->colorKey,
+					    clipBoxes);
 	}
 
 	adaptor_priv->videoStatus = CLIENT_VIDEO_ON;
-- 
1.6.5.7




More information about the Intel-gfx mailing list