From: Mikulas P. <mpa...@re...> - 2009-06-17 10:00:56
|
Use the same color-calculating algorithm as in atyfb_imageblit in this driver or in generic cfb_fillrect. This patch fixes bad colors when using an accelerator in 15-bit and 16-bit modes. Signed-off-by: Mikulas Patocka <mpa...@re... --- drivers/video/aty/mach64_accel.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) Index: linux-2.6.30-fast/drivers/video/aty/mach64_accel.c =================================================================== --- linux-2.6.30-fast.orig/drivers/video/aty/mach64_accel.c 2009-06-15 21:42:10.000000000 +0200 +++ linux-2.6.30-fast/drivers/video/aty/mach64_accel.c 2009-06-17 08:49:01.000000000 +0200 @@ -239,7 +239,7 @@ void atyfb_copyarea(struct fb_info *info void atyfb_fillrect(struct fb_info *info, const struct fb_fillrect *rect) { struct atyfb_par *par = (struct atyfb_par *) info->par; - u32 color = rect->color, dx = rect->dx, width = rect->width, rotation = 0; + u32 color, dx = rect->dx, width = rect->width, rotation = 0; if (par->asleep) return; @@ -250,8 +250,11 @@ void atyfb_fillrect(struct fb_info *info return; } - color |= (rect->color << 8); - color |= (rect->color << 16); + if (info->fix.visual == FB_VISUAL_TRUECOLOR || + info->fix.visual == FB_VISUAL_DIRECTCOLOR) + color = ((u32 *)(info->pseudo_palette))[rect->color]; + else + color = rect->color; if (info->var.bits_per_pixel == 24) { /* In 24 bpp, the engine is in 8 bpp - this requires that all */ |