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

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: