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 via email to