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: