xserver/hw/kdrive/fbdev fbdev.c,1.46,1.47

Phil Blundell xserver-commit at pdx.freedesktop.org
Tue Jul 20 07:33:44 PDT 2004


Committed by: pb

Update of /cvs/xserver/xserver/hw/kdrive/fbdev
In directory pdx:/tmp/cvs-serv30863/hw/kdrive/fbdev

Modified Files:
	fbdev.c 
Log Message:
2004-07-20  Phil Blundell  <pb at nexus.co.uk>

	* hw/kdrive/fbdev/fbdev.c (fbdevSetShadow): Select optimized 
16bpp
	shadow copy functions if screen is 16bpp.  Select -YX versions 
for
	90 and 270 rotations if architecture is ARM.



Index: fbdev.c
===================================================================
RCS file: /cvs/xserver/xserver/hw/kdrive/fbdev/fbdev.c,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -d -r1.46 -r1.47
--- fbdev.c	28 Jun 2004 00:48:51 -0000	1.46
+++ fbdev.c	20 Jul 2004 14:33:42 -0000	1.47
@@ -391,13 +391,44 @@
     KdScreenPriv(pScreen);
     KdScreenInfo	*screen = pScreenPriv->screen;
     FbdevScrPriv	*scrpriv = screen->driver;
+    FbdevPriv		*priv = screen->card->driver;
     ShadowUpdateProc	update;
     ShadowWindowProc	window;
+    int			useYX = 0;
+
+#ifdef __arm__
+    /* Use variant copy routines that always read left to right in the
+       shadow framebuffer.  Reading vertical strips is exceptionally
+       slow on XScale due to cache effects.  */
+    useYX = 1;
+#endif
 
     window = fbdevWindowLinear;
     update = 0;
     if (scrpriv->randr)
-	update = shadowUpdateRotatePacked;
+	if (priv->var.bits_per_pixel == 16) {
+	    switch (scrpriv->randr) {
+	    case RR_Rotate_90:
+		if (useYX)
+		    update = shadowUpdateRotate16_90YX;
+		else
+		    update =  shadowUpdateRotate16_90;
+		break;
+	    case RR_Rotate_180:
+		update = shadowUpdateRotate16_180;
+		break;
+	    case RR_Rotate_270:
+		if (useYX)
+		    update = shadowUpdateRotate16_270YX;
+		else
+		    update =  shadowUpdateRotate16_270;
+		break;
+	    default:
+		update = shadowUpdateRotate16;
+		break;
+	    }
+	} else
+	    update = shadowUpdateRotatePacked;
     else
 	update = shadowUpdatePacked;
     return KdShadowSet (pScreen, scrpriv->randr, update, window);



More information about the xserver-commit mailing list