[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#338245: framebuffer driver does not set display width properly if used without Shadow



Package: xserver-xorg
Version: 6.8.2.dfsg.1-7
Severity: important
Tags: patch

The framebuffer driver does not set the display width properly if used
without Shadow, but keeps the old value from the probed built-in mode.
If the horizontal resolution of the later selected video mode differs,
this is a problem. The patch below fixes this.

Peter Teichmann


diff -urd xc.orig/programs/Xserver/hw/xfree86/drivers/fbdev/fbdev.c xc/programs/Xserver/hw/xfree86/drivers/fbdev/fbdev.c
--- xc.orig/programs/Xserver/hw/xfree86/drivers/fbdev/fbdev.c	2005-10-25 23:02:32.000000000 +0200
+++ xc/programs/Xserver/hw/xfree86/drivers/fbdev/fbdev.c	2005-10-25 22:55:14.000000000 +0200
@@ -672,11 +672,19 @@
 
 	if(fPtr->rotate==FBDEV_ROTATE_CW || fPtr->rotate==FBDEV_ROTATE_CCW)
 	{
-	  height = pScrn->virtualX;
-	  width = pScrn->displayWidth = pScrn->virtualY;
+		height = pScrn->virtualX;
+		width = pScrn->displayWidth = pScrn->virtualY;
 	} else {
-	  height = pScrn->virtualY;
-	  width = pScrn->virtualX;
+		height = pScrn->virtualY;
+		width = pScrn->virtualX;
+	}
+	if (!fPtr->shadowFB)
+	{
+		int fbbpp;
+		/* FIXME: this doesn't work for all cases, e.g. when each scanline
+			has a padding which is independent from the depth (controlfb) */
+		fbdevHWGetDepth(pScrn,&fbbpp);
+		pScrn->displayWidth = fbdevHWGetLineLength(pScrn)/(fbbpp >> 3);
 	}
 
 	if(fPtr->rotate && !fPtr->PointerMoved) {



Reply to: