xf86-video-intel: src/i830_driver.c src/i830_video.c src/i830_video.h

Dave Airlie airlied at kemper.freedesktop.org
Tue Oct 16 23:35:47 PDT 2007


 src/i830_driver.c |   21 +++++++++++++++++++++
 src/i830_video.c  |   24 ++++++++++--------------
 src/i830_video.h  |    3 +++
 3 files changed, 34 insertions(+), 14 deletions(-)

New commits:
commit c824c45e72908b5b3fa832fec91c7b47f305180c
Author: Dave Airlie <airlied at optimus.(none)>
Date:   Wed Oct 17 16:35:29 2007 +1000

    intel: make block handler hook happen no matter what video is in use
    
    This shouldn't make a difference now, but for upcoming EXA/batch changes it
    will be more useful

diff --git a/src/i830_driver.c b/src/i830_driver.c
index 1d4e154..4407241 100644
--- a/src/i830_driver.c
+++ b/src/i830_driver.c
@@ -197,6 +197,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "i830_display.h"
 #include "i830_debug.h"
 #include "i830_bios.h"
+#include "i830_video.h"
 
 #ifdef XF86DRI
 #include "dri.h"
@@ -2255,6 +2256,23 @@ IntelEmitInvarientState(ScrnInfoPtr pScrn)
    }
 }
 
+static void
+I830BlockHandler(int i,
+		 pointer blockData, pointer pTimeout, pointer pReadmask)
+{
+    ScreenPtr pScreen = screenInfo.screens[i];
+    ScrnInfoPtr pScrn = xf86Screens[i];
+    I830Ptr pI830 = I830PTR(pScrn);
+
+    pScreen->BlockHandler = pI830->BlockHandler;
+
+    (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask);
+
+    pScreen->BlockHandler = I830BlockHandler;
+
+    I830VideoBlockHandler(i, blockData, pTimeout, pReadmask);
+}
+
 static Bool
 I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 {
@@ -2865,6 +2883,9 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "direct rendering: Not available\n");
 #endif
 
+   pI830->BlockHandler = pScreen->BlockHandler;
+   pScreen->BlockHandler = I830BlockHandler;
+
    pScreen->SaveScreen = xf86SaveScreen;
    pI830->CloseScreen = pScreen->CloseScreen;
    pScreen->CloseScreen = I830CloseScreen;
diff --git a/src/i830_video.c b/src/i830_video.c
index 8c2d804..255444b 100644
--- a/src/i830_video.c
+++ b/src/i830_video.c
@@ -105,8 +105,6 @@ static int I830QueryImageAttributesOverlay(ScrnInfoPtr, int, unsigned short *,
 static int I830QueryImageAttributesTextured(ScrnInfoPtr, int, unsigned short *,
 					    unsigned short *, int *, int *);
 
-static void I830BlockHandler(int, pointer, pointer, pointer);
-
 #define MAKE_ATOM(a) MakeAtom(a, sizeof(a) - 1, TRUE)
 
 static Atom xvBrightness, xvContrast, xvSaturation, xvColorKey, xvPipe, xvDoubleBuffer;
@@ -866,9 +864,6 @@ I830SetupImageVideoOverlay(ScreenPtr pScreen)
      */
     pPriv->overlayOK = TRUE;
 
-    pI830->BlockHandler = pScreen->BlockHandler;
-    pScreen->BlockHandler = I830BlockHandler;
-
     xvColorKey = MAKE_ATOM("XV_COLORKEY");
     xvBrightness = MAKE_ATOM("XV_BRIGHTNESS");
     xvContrast = MAKE_ATOM("XV_CONTRAST");
@@ -2536,20 +2531,22 @@ I830QueryImageAttributesTextured(ScrnInfoPtr pScrn,
     return I830QueryImageAttributes(pScrn, id, w, h, pitches, offsets, TRUE);
 }
 
-static void
-I830BlockHandler(int i,
-		 pointer blockData, pointer pTimeout, pointer pReadmask)
+void
+I830VideoBlockHandler(int i, pointer blockData, pointer pTimeout,
+		      pointer pReadmask)
 {
-    ScreenPtr pScreen = screenInfo.screens[i];
     ScrnInfoPtr pScrn = xf86Screens[i];
     I830Ptr pI830 = I830PTR(pScrn);
-    I830PortPrivPtr pPriv = GET_PORT_PRIVATE(pScrn);
+    I830PortPrivPtr pPriv;
 
-    pScreen->BlockHandler = pI830->BlockHandler;
+    if (pI830->adaptor == NULL)
+        return;
 
-    (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask);
+    /* No overlay scaler on the 965. */
+    if (IS_I965G(pI830))
+        return;
 
-    pScreen->BlockHandler = I830BlockHandler;
+    pPriv = GET_PORT_PRIVATE(pScrn);
 
     if (pPriv->videoStatus & TIMER_MASK) {
 #if 1
@@ -2778,7 +2775,6 @@ I830DisplaySurface(XF86SurfacePtr surface,
 	UpdateCurrentTime();
 	pI830Priv->videoStatus = FREE_TIMER;
 	pI830Priv->freeTime = currentTime.milliseconds + FREE_DELAY;
-	pScrn->pScreen->BlockHandler = I830BlockHandler;
     }
 
     return Success;
diff --git a/src/i830_video.h b/src/i830_video.h
index 23954e1..e67831d 100644
--- a/src/i830_video.h
+++ b/src/i830_video.h
@@ -90,3 +90,6 @@ void I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
 			      short src_w, short src_h,
 			      short drw_w, short drw_h,
 			      PixmapPtr pPixmap);
+
+void I830VideoBlockHandler(int i, pointer blockData, pointer pTimeout,
+			   pointer pReadmask);


More information about the xorg-commit mailing list