On Son, 2003-02-16 at 21:59, Sean E. Russell wrote:
> 
> I've been talking with Felix Kühling about a problem I've been observing WRT 
> DRI, my Radeon, and KDE 3.1, and he suggested that it might be time to submit 
> a bug report to the devel list, so here I am.
> 
> The summary of the problem is that, with accellerated GL enabled, I get a lag 
> of 2 seconds each time the mouse pointer changed "modes."
> 
> First, I'm using KDE 3.1, which provides a shaded, transluescent mouse pointer 
> for the I-bar and the arrow; the other pointers (the hourglass, the hand, the 
> resize shapes) are the regular X shapes.

Actually, I think they aren't, that's why they're not ARGB as well. This
isn't a feature of KDE but the new Xlib.

The problem has been discussed on the XFree86 lists; the radeon 2D
driver function to wait for a vertical blank interfered with the DRM
handling vertical blank interrupts. This has been fixed in XFree86 CVS
after RC1. DRI CVS doesn't even have the affected code yet.


> 4) The option SWCursor fixes the problem, but then of course causes X to crash 
> when trying to access any of the OpenGL functions.

'Of course'? A crash is a bug. Does this patch help?


-- 
Earthling Michel Dänzer (MrCooper)/ Debian GNU/Linux (powerpc) developer
XFree86 and DRI project member   /  CS student, Free Software enthusiast
Index: programs/Xserver/hw/xfree86/drivers/ati/radeon_dri.c
===================================================================
RCS file: /cvs/xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_dri.c,v
retrieving revision 1.30
diff -p -u -r1.30 radeon_dri.c
--- programs/Xserver/hw/xfree86/drivers/ati/radeon_dri.c	2003/02/08 23:27:36	1.30
+++ programs/Xserver/hw/xfree86/drivers/ati/radeon_dri.c	2003/02/16 22:46:20
@@ -1829,7 +1829,9 @@ static void RADEONDRITransitionTo3d(Scre
     RADEONEnablePageFlip(pScreen);
 
     info->have3DWindows = 1;
-    xf86ForceHWCursor (pScreen, TRUE);
+
+    if (info->cursor_start)
+	xf86ForceHWCursor (pScreen, TRUE);
 }
 
 static void RADEONDRITransitionTo2d(ScreenPtr pScreen)
@@ -1852,5 +1854,7 @@ static void RADEONDRITransitionTo2d(Scre
     xf86FreeOffscreenArea(info->depthTexArea); 
 
     info->have3DWindows = 0;
-    xf86ForceHWCursor (pScreen, FALSE);
+
+    if (info->cursor_start)
+	    xf86ForceHWCursor (pScreen, FALSE);
 }
Index: programs/Xserver/hw/xfree86/drivers/ati/radeon_video.c
===================================================================
RCS file: /cvs/xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_video.c,v
retrieving revision 1.23
diff -p -u -r1.23 radeon_video.c
--- programs/Xserver/hw/xfree86/drivers/ati/radeon_video.c	2003/01/29 18:06:07	1.23
+++ programs/Xserver/hw/xfree86/drivers/ati/radeon_video.c	2003/02/16 22:46:20
@@ -680,7 +680,8 @@ RADEONStopVideo(ScrnInfoPtr pScrn, point
      if(pPriv->videoStatus & CLIENT_VIDEO_ON) {
 	RADEONWaitForFifo(pScrn, 2);
 	OUTREG(RADEON_OV0_SCALE_CNTL, 0);
-	xf86ForceHWCursor (pScrn->pScreen, FALSE);
+	if (info->cursor_start)
+	    xf86ForceHWCursor (pScrn->pScreen, FALSE);
      }
      if(info->videoLinear) {
 	xf86FreeOffscreenLinear(info->videoLinear);
@@ -1282,7 +1283,7 @@ RADEONPutImage(
 					   REGION_RECTS(clipBoxes));
     }
 
-    if (!(pPriv->videoStatus & CLIENT_VIDEO_ON))
+    if (info->cursor_start && !(pPriv->videoStatus & CLIENT_VIDEO_ON))
 	xf86ForceHWCursor (pScrn->pScreen, TRUE);
 
     RADEONDisplayVideo(pScrn, id, offset, offset, width, height, dstPitch,
@@ -1349,7 +1350,7 @@ RADEONVideoTimerCallback(ScrnInfoPtr pSc
 	    if(pPriv->offTime < now) {
 		unsigned char *RADEONMMIO = info->MMIO;
 		OUTREG(RADEON_OV0_SCALE_CNTL, 0);
-		if (pPriv->videoStatus & CLIENT_VIDEO_ON)
+		if (info->cursor_start && pPriv->videoStatus & CLIENT_VIDEO_ON)
 		    xf86ForceHWCursor (pScrn->pScreen, FALSE);
 		pPriv->videoStatus = FREE_TIMER;
 		pPriv->freeTime = now + FREE_DELAY;
@@ -1360,7 +1361,7 @@ RADEONVideoTimerCallback(ScrnInfoPtr pSc
 		   xf86FreeOffscreenLinear(info->videoLinear);
 		   info->videoLinear = NULL;
 		}
-		if (pPriv->videoStatus & CLIENT_VIDEO_ON)
+		if (info->cursor_start && pPriv->videoStatus & CLIENT_VIDEO_ON)
 		    xf86ForceHWCursor (pScrn->pScreen, FALSE);
 		pPriv->videoStatus = 0;
 		info->VideoTimerCallback = NULL;
@@ -1543,7 +1544,8 @@ RADEONDisplaySurface(
     if (portPriv->videoStatus & CLIENT_VIDEO_ON) {
 	REGION_EMPTY(pScrn->pScreen, &portPriv->clip);   
 	UpdateCurrentTime();
-	xf86ForceHWCursor (pScrn->pScreen, FALSE);
+	if (info->cursor_start)
+	    xf86ForceHWCursor (pScrn->pScreen, FALSE);
 	portPriv->videoStatus = FREE_TIMER;
 	portPriv->freeTime = currentTime.milliseconds + FREE_DELAY;
 	info->VideoTimerCallback = RADEONVideoTimerCallback;

Reply via email to