The default behavior of the Radeon driver (w/ 250 Lf; M9) is to use the chipset's RMX facility to stretch the output to fill the LCD display. This results in ugly/annoying smearing of fonts and other graphics when stretching from 1280x1024 to 1400x1050. The BIOS is set to not expand but the Radeon driver does it anyway. The following patch (to the code from the Suse 9.2 update) turns off the stretching if the ``NoStretch'' option is set to true. Unfortunately the output is now in the upper lefthand corner instead of being centered and I have no idea what needs to be modified to center the output. I do not know if the registers are programmed correctly when this patch is used but I do get a non stretched display on my laptop. Also, it would be really nice if the stretching could be toggled (like windows can) without restarting the xserver. diff -wubr ORIG/xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c BUILD/xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c --- ORIG/xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c 2005-02-13 18:10:11.000000000 -0500 +++ BUILD/xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c 2005-02-16 06:54:02.531263544 -0500 @@ -164,7 +164,8 @@ OPTION_SUBPIXEL_ORDER, #endif OPTION_SHOWCACHE, - OPTION_DYNAMIC_CLOCKS + OPTION_DYNAMIC_CLOCKS, + OPTION_NO_STRETCH } RADEONOpts; static const OptionInfoRec RADEONOptions[] = { @@ -209,6 +210,7 @@ #endif { OPTION_SHOWCACHE, "ShowCache", OPTV_BOOLEAN, {0}, FALSE }, { OPTION_DYNAMIC_CLOCKS, "DynamicClocks", OPTV_BOOLEAN, {0}, FALSE }, + { OPTION_NO_STRETCH, "NoStretch", OPTV_BOOLEAN, {0}, FALSE }, { -1, NULL, OPTV_NONE, {0}, FALSE } }; @@ -2881,8 +2883,11 @@ p->VSyncEnd = p->VSyncStart + info->VSyncWidth; p->Clock = info->DotClock; + if (!xf86ReturnOptValBool(info->Options, OPTION_NO_STRETCH, FALSE)) + { p->Flags |= RADEON_USE_RMX; } + } maxVirtX = MAX(maxVirtX, p->HDisplay); maxVirtY = MAX(maxVirtY, p->VDisplay); @@ -3099,7 +3104,11 @@ new->VSyncStart = info->PanelYRes + info->VOverPlus; new->VSyncEnd = new->VSyncStart + info->VSyncWidth; new->Clock = info->DotClock; + + if (!xf86ReturnOptValBool(info->Options, OPTION_NO_STRETCH, FALSE)) + { new->Flags |= RADEON_USE_RMX; + } new->type |= M_T_USERDEF; @@ -3150,8 +3159,11 @@ new->VSyncStart = info->PanelYRes + info->VOverPlus; new->VSyncEnd = new->VSyncStart + info->VSyncWidth; new->Clock = info->DotClock; - new->Flags |= RADEON_USE_RMX; + if (!xf86ReturnOptValBool(info->Options, OPTION_NO_STRETCH, FALSE)) + { + new->Flags |= RADEON_USE_RMX; + } new->type |= M_T_DEFAULT;
I can do some testing to facilitate a resolution to this problem.
Is this that is supposed/is to be merged into mainline?
Nack from me in the current form; the option name should be just "Stretch" (ideally a little less ambiguous, actually), the config file parser handles the "No" prefix transparently.
Marking broken (status null/blank) bugs in xorg with no activity in a long time as fixed. Please reopen if you think it's necessary, but first do a search if a similar bug report is already filed and in a NEW/ASSIGNED state. These bugs do not currently show in most search results as they do not have any status. Sorry for this janitorial spam, you know where to send hate mails to when your inbox gets full of bugs you're subscribed to.
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.