xf86-video-intel: Branch 'modesetting-rotation' - 2 commits - src/i830_cursor.c src/i830_xf86Rotate.c

Keith Packard keithp at kemper.freedesktop.org
Sun Jan 28 04:36:07 EET 2007


 src/i830_cursor.c     |    2 +-
 src/i830_xf86Rotate.c |    9 +++++----
 2 files changed, 6 insertions(+), 5 deletions(-)

New commits:
diff-tree d329fa121b2401cadb991c2854e077cfa68e15e8 (from 20419d664c77e9a1a2de82987838b45f44774b47)
Author: Keith Packard <keithp at guitar.keithp.com>
Date:   Sat Jan 27 18:36:15 2007 -0800

    Fetch from root window instead of screen pixmap during rotation.
    
    The XAA Composite wrapper doesn't check for sourcing from the root pixmap
    when deciding whether to sync the hardware drawing. Fix the rotation code to
    reference the root window in IncludeInferiors mode to avoid reading without
    correct synchronization.

diff --git a/src/i830_xf86Rotate.c b/src/i830_xf86Rotate.c
index 7d056e5..3b8be61 100644
--- a/src/i830_xf86Rotate.c
+++ b/src/i830_xf86Rotate.c
@@ -138,7 +138,7 @@ xf86RotateCrtcRedisplay (xf86CrtcPtr crt
 {
     ScrnInfoPtr		scrn = crtc->scrn;
     ScreenPtr		screen = scrn->pScreen;
-    PixmapPtr		src_pixmap = (*screen->GetScreenPixmap) (screen);
+    WindowPtr		root = WindowTable[screen->myNum];
     PixmapPtr		dst_pixmap = crtc->rotatedPixmap;
     PictFormatPtr	format = compWindowFormat (WindowTable[screen->myNum]);
     int			error;
@@ -146,12 +146,13 @@ xf86RotateCrtcRedisplay (xf86CrtcPtr crt
     PictTransform	transform;
     int			n = REGION_NUM_RECTS(region);
     BoxPtr		b = REGION_RECTS(region);
+    XID			include_inferiors = IncludeInferiors;
     
     src = CreatePicture (None,
-			 &src_pixmap->drawable,
+			 &root->drawable,
 			 format,
-			 0L,
-			 NULL,
+			 CPSubwindowMode,
+			 &include_inferiors,
 			 serverClient,
 			 &error);
     if (!src) {
diff-tree 20419d664c77e9a1a2de82987838b45f44774b47 (from 00decd3b6cea0de22c88b9504dbe26d680e8ab16)
Author: Keith Packard <keithp at guitar.keithp.com>
Date:   Sat Jan 27 18:34:12 2007 -0800

    Paint ARGB cursor data to ARGB cursor memory space in frame buffer.
    
    When converting from global cursor to per-crtc cursor, the ARGB cursor data
    was accidentally painted to the wrong location, overwriting some critical
    data and causing the hardware to lock up. (along with generating a garbage
    cursor image from uninitialized data).

diff --git a/src/i830_cursor.c b/src/i830_cursor.c
index da220f5..464eb6d 100644
--- a/src/i830_cursor.c
+++ b/src/i830_cursor.c
@@ -389,7 +389,7 @@ static void I830CRTCLoadCursorARGB (xf86
 {
    I830Ptr pI830 = I830PTR(crtc->scrn);
    I830CrtcPrivatePtr intel_crtc = crtc->driver_private;
-   CARD32 *dst = (CARD32 *) (pI830->FbBase + intel_crtc->cursor_mem.Start);
+   CARD32 *dst = (CARD32 *) (pI830->FbBase + intel_crtc->cursor_mem_argb.Start);
    CARD32 *image = (CARD32 *)pCurs->bits->argb;
    int x, y, w, h;
 



More information about the xorg-commit mailing list