xf86-video-intel: Branch 'i830-pageflip' - 2 commits - man/intel.man src/i830.h src/i830_dri.c

Michel Daenzer daenzer at kemper.freedesktop.org
Thu Feb 22 19:28:30 EET 2007


 man/intel.man  |    2 +-
 src/i830.h     |    1 +
 src/i830_dri.c |   38 +++++++++++++++++++++++++++++++-------
 3 files changed, 33 insertions(+), 8 deletions(-)

New commits:
diff-tree 8cce74f195e5ef6ce5599ecd52f35bcfcb0d7913 (from f346549183a407a4bff6521ec2450dacb97442e9)
Author: Michel Dänzer <michel at tungstengraphics.com>
Date:   Thu Feb 22 18:27:59 2007 +0100

    Do not sync DRI windows between pages when possible.

diff --git a/src/i830.h b/src/i830.h
index bbbb4a8..e26556f 100644
--- a/src/i830.h
+++ b/src/i830.h
@@ -310,6 +310,7 @@ typedef struct _I830Rec {
 
 #ifdef DAMAGE
    DamagePtr pDamage;
+   RegionRec driRegion;
 #endif
 #endif
 
diff --git a/src/i830_dri.c b/src/i830_dri.c
index 65736cd..6c91cdc 100644
--- a/src/i830_dri.c
+++ b/src/i830_dri.c
@@ -980,6 +980,10 @@ I830DRICloseScreen(ScreenPtr pScreen)
 
    DPRINTF(PFX, "I830DRICloseScreen\n");
 
+#ifdef DAMAGE
+   REGION_UNINIT(pScreen, &pI830->driRegion);
+#endif
+
    if (pI830DRI->irq) {
        drmCtlUninstHandler(pI830->drmSubFD);
        pI830DRI->irq = 0;
@@ -1164,10 +1168,16 @@ I830DRISwapContext(ScreenPtr pScreen, DR
 	 RegionPtr pDamageReg = DamageRegion(pI830->pDamage);
 
 	 if (pDamageReg) {
-	    int nrects = REGION_NUM_RECTS(pDamageReg);
+	    RegionRec region;
+	    int nrects;
 
-	    if (nrects)
-	       I830DRIRefreshArea(pScrn, nrects, REGION_RECTS(pDamageReg));
+	    REGION_NULL(pScreen, &region);
+	    REGION_SUBTRACT(pScreen, &region, pDamageReg, &pI830->driRegion);
+
+	    if ((nrects = REGION_NUM_RECTS(&region)))
+	       I830DRIRefreshArea(pScrn, nrects, REGION_RECTS(&region));
+
+	    REGION_UNINIT(pScreen, &region);
 	 }
       }
 #endif
@@ -1486,8 +1496,13 @@ I830DRITransitionTo2d(ScreenPtr pScreen)
 static void
 I830DRIClipNotify(ScreenPtr pScreen, WindowPtr *ppWin, int num)
 {
+   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+   I830Ptr pI830 = I830PTR(pScrn);
    unsigned pfMask = 0;
 
+   REGION_UNINIT(pScreen, &pI830->driRegion);
+   REGION_NULL(pScreen, &pI830->driRegion);
+
    if (num > 0) {
       drmI830Sarea *sPriv = (drmI830Sarea *) DRIGetSAREAPrivate(pScreen);
       BoxRec crtcBox[2];
@@ -1505,15 +1520,24 @@ I830DRIClipNotify(ScreenPtr pScreen, Win
 
       for (i = 0; i < 2; i++) {
 	 for (j = 0; j < num; j++) {
-	    if (ppWin[j] && RECT_IN_REGION(pScreen, &ppWin[j]->clipList,
-					   &crtcBox[i]) != rgnOUT)
-	       numvisible[i]++;
+	    WindowPtr pWin = ppWin[j];
+
+	    if (pWin) {
+	       if (RECT_IN_REGION(pScreen, &pWin->clipList, &crtcBox[i]) !=
+		   rgnOUT)
+		  numvisible[i]++;
+
+	       if (i == 0)
+		  REGION_UNION(pScreen, &pI830->driRegion, &pWin->clipList,
+			       &pI830->driRegion);
+	    }
 	 }
 
 	 if (numvisible[i] == 1)
 	    pfMask |= 1 << i;
       }
-   }
+   } else
+      REGION_NULL(pScreen, &pI830->driRegion);
 
    I830DRISetPfMask(pScreen, pfMask);
 }
diff-tree f346549183a407a4bff6521ec2450dacb97442e9 (from 0bee64f4bc7581de7ab28ca438581d215e85c610)
Author: Michel Dänzer <michel at tungstengraphics.com>
Date:   Wed Feb 21 09:19:54 2007 +0100

    intel.man: Fix typo.

diff --git a/man/intel.man b/man/intel.man
index 503b52a..05a91f7 100644
--- a/man/intel.man
+++ b/man/intel.man
@@ -170,7 +170,7 @@ Default for i810: The option is not used
 Default for i830 and above: Disabled.
 .TP
 .BI "Option \*qTripleBuffer\*q \*q" boolean \*q
-Enable support for triple flipping. This should improve 3D performance at the
+Enable support for triple buffering. This should improve 3D performance at the
 potential cost of worse performance with mixed 2D/3D. Also note that this gives
 no benefit without corresponding support in the Mesa 3D driver and may not give
 any benefit without page flipping either (see



More information about the xorg-commit mailing list