xf86-video-intel: Branch 'i830-pageflip' - 3 commits - src/i830_display.c src/i830_dri.c src/i830_driver.c

Michel Daenzer daenzer at kemper.freedesktop.org
Wed Feb 28 18:54:16 EET 2007


 src/i830_display.c |    6 +++---
 src/i830_dri.c     |   14 +++++++++++---
 src/i830_driver.c  |    4 ----
 3 files changed, 14 insertions(+), 10 deletions(-)

New commits:
diff-tree 36cad3fcb65e3dcd88e58e301cd60adb121cb96b (from b5316fb2623e9630cbd58020e0a7c95bf354c587)
Author: Michel Dänzer <michel at tungstengraphics.com>
Date:   Wed Feb 28 17:52:42 2007 +0100

    Update vblank pipe setup when setting a mode.

diff --git a/src/i830_display.c b/src/i830_display.c
index 258897e..04159e7 100644
--- a/src/i830_display.c
+++ b/src/i830_display.c
@@ -864,6 +864,9 @@ i830_crtc_mode_set(xf86CrtcPtr crtc, Dis
     OUTREG(dspcntr_reg, dspcntr);
     /* Flush the plane changes */
     i830PipeSetBase(crtc, x, y);
+#ifdef XF86DRI
+   I830DRISetVBlankInterrupt (pScrn, TRUE);
+#endif
     
     i830WaitForVblank(pScrn);
 }
@@ -1041,9 +1044,6 @@ i830SetMode(ScrnInfoPtr pScrn, DisplayMo
 
     i830DescribeOutputConfiguration(pScrn);
 
-#ifdef XF86DRI
-   I830DRISetVBlankInterrupt (pScrn, TRUE);
-#endif
 done:
     i830DumpRegs (pScrn);
     i830_sdvo_dump(pScrn);
diff --git a/src/i830_driver.c b/src/i830_driver.c
index 3c8ec1a..9bd7029 100644
--- a/src/i830_driver.c
+++ b/src/i830_driver.c
@@ -3085,10 +3085,6 @@ I830EnterVT(int scrnIndex, int flags)
    i830DumpRegs (pScrn);
    i830DescribeOutputConfiguration(pScrn);
 
-#ifdef XF86DRI
-   I830DRISetVBlankInterrupt (pScrn, TRUE);
-#endif
-
    ResetState(pScrn, TRUE);
    SetHWOperatingState(pScrn);
 
diff-tree b5316fb2623e9630cbd58020e0a7c95bf354c587 (from f5ab9e0ad3a65c972861dd53be6e33e1aac13191)
Author: Michel Dänzer <michel at tungstengraphics.com>
Date:   Wed Feb 28 17:50:56 2007 +0100

    I830DRIClipNotify: Fix initialization of crtcBox[1].[xy]2.

diff --git a/src/i830_dri.c b/src/i830_dri.c
index afc7de0..e546066 100644
--- a/src/i830_dri.c
+++ b/src/i830_dri.c
@@ -1523,8 +1523,8 @@ I830DRIClipNotify(ScreenPtr pScreen, Win
       crtcBox[0].y2 = crtcBox[0].y1 + sPriv->pipeA_h;
       crtcBox[1].x1 = sPriv->pipeB_x;
       crtcBox[1].y1 = sPriv->pipeB_y;
-      crtcBox[1].x2 = crtcBox[0].x1 + sPriv->pipeB_w;
-      crtcBox[1].y2 = crtcBox[0].y1 + sPriv->pipeB_h;
+      crtcBox[1].x2 = crtcBox[1].x1 + sPriv->pipeB_w;
+      crtcBox[1].y2 = crtcBox[1].y1 + sPriv->pipeB_h;
 
       for (i = 0; i < 2; i++) {
 	 for (j = 0; j < num; j++) {
diff-tree f5ab9e0ad3a65c972861dd53be6e33e1aac13191 (from 8cce74f195e5ef6ce5599ecd52f35bcfcb0d7913)
Author: Michel Dänzer <michel at tungstengraphics.com>
Date:   Thu Feb 22 18:57:23 2007 +0100

    I830DRISwapContext: Some cleanups.
    
    Also call I830EmitFlush() when entering/leaving the server context. Doesn't
    seem to help for artifacts with page flipping and mixed 2D/3D unfortunately.

diff --git a/src/i830_dri.c b/src/i830_dri.c
index 6c91cdc..afc7de0 100644
--- a/src/i830_dri.c
+++ b/src/i830_dri.c
@@ -1135,6 +1135,8 @@ I830DRISwapContext(ScreenPtr pScreen, DR
       pI830->LockHeld = 1;
       I830RefreshRing(pScrn);
 
+      I830EmitFlush(pScrn);
+
 #ifdef DAMAGE
       if (!pI830->pDamage && pI830->allowPageFlip) {
 	 PixmapPtr pPix  = pScreen->GetScreenPixmap(pScreen);
@@ -1159,10 +1161,12 @@ I830DRISwapContext(ScreenPtr pScreen, DR
    } else if (syncType == DRI_2D_SYNC &&
 	      oldContextType == DRI_NO_CONTEXT &&
 	      newContextType == DRI_2D_CONTEXT) {
-      pI830->LockHeld = 0;
       if (I810_DEBUG & DEBUG_VERBOSE_DRI)
 	 ErrorF("i830DRISwapContext (out)\n");
 
+      if (!pScrn->vtSema)
+     	 return;
+
 #ifdef DAMAGE
       if (pI830->pDamage) {
 	 RegionPtr pDamageReg = DamageRegion(pI830->pDamage);
@@ -1181,6 +1185,10 @@ I830DRISwapContext(ScreenPtr pScreen, DR
 	 }
       }
 #endif
+
+      I830EmitFlush(pScrn);
+
+      pI830->LockHeld = 0;
    } else if (I810_DEBUG & DEBUG_VERBOSE_DRI)
       ErrorF("i830DRISwapContext (other)\n");
 }



More information about the xorg-commit mailing list