Bug#295530: [siliconmotion] Corrupted display on external monitor if external res > built-in res
On Wed, Feb 16, 2005 at 02:10:20PM +0000, Simon Huggins wrote:
> Using the siliconmotion driver and attaching an external display I get
> corrupted pixels on the right hand side (note not on the bottom as well)
> beyond where the display would have stopped.
> e.g. my internal display does 1024x768 and the external LCD does
> 1280x1024 so anything from 1024 -> 1280 is corrupted. The corruption
> takes the form of two copies of the righthand most parts of the display
> which look normal with blues changed to red and then blues changed to
> green.
> It sounds like:
> http://bugs.xfree86.org/show_bug.cgi?id=727
> I've not been able to build X myself to test this yet however. I need
> to find a host with enough disk and time to do it.
Just to confirm I rebuilt -11 with the attached patch and it did indeed
solve this so if you want some low-hanging fruit to please a humble user
please apply this... :)
I just dropped the following as 083a_siliconmotion_widthfix.diff in
debian/patches. It is just the patch in the URL above but rejigged so
the build system doesn't barf and I've now confirmed it fixes this bug.
Simon.
--
[ Deja Moo - the feeling you've heard this bull before. ]
Black Cat Networks. http://www.blackcatnetworks.co.uk/
--- xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_driver.c.orig 2005-02-16 19:55:25.000000000 +0000
+++ xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_driver.c 2005-02-16 19:57:08.000000000 +0000
@@ -2676,12 +2676,12 @@
new->VPR0C = pSmi->FBOffset >> 3;
if (pSmi->rotate)
{
- new->VPR10 = ((((min(pSmi->lcdWidth, pSmi->height) * pSmi->Bpp) >> 3)
+ new->VPR10 = ((((pSmi->height * pSmi->Bpp) >> 3)
+ 2) << 16) | ((pSmi->height * pSmi->Bpp) >> 3);
}
else
{
- new->VPR10 = ((((min(pSmi->lcdWidth, pSmi->width) * pSmi->Bpp) >> 3)
+ new->VPR10 = ((((pSmi->width * pSmi->Bpp) >> 3)
+ 2) << 16) | ((pSmi->width * pSmi->Bpp) >> 3);
}
Reply to: