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

Phil Blundell <xserver-commit-u7BhqnqprCWvj1b/[email protected]>
Newsgroups gmane.comp.freedesktop.xserver.cvs
Message-ID <[email protected]>
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-Y0/[email protected]>

	* 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);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.