From: David E. <eg...@ha...> - 2004-06-25 07:19:48
|
Dear Andrew, I've tracked Jurriaan's radeonfb problem down to copyarea() malfunctioning in 16bpp mode. Here's a hack to just do a software copyarea() in 16bpp mode. No more screen garbage, but then it's slow :-/ for instance, cat' ing the MAINTAINERS file: 8bpp - ~1.5 sec 16bpp - ~19 sec (with yucky fix) 32bpp - ~6 sec -dte radeonfb: 16bpp work-around - copyarea() doesn't work Signed-off-by: David Eger <eg...@ha...> diff -Nru a/drivers/video/aty/radeon_accel.c b/drivers/video/aty/radeon_accel.c --- a/drivers/video/aty/radeon_accel.c 2004-06-25 09:15:24 +02:00 +++ b/drivers/video/aty/radeon_accel.c 2004-06-25 09:15:24 +02:00 @@ -99,7 +99,9 @@ if (info->state != FBINFO_STATE_RUNNING) return; - if (radeon_accel_disabled()) { + if (radeon_accel_disabled() + || info->var.bits_per_pixel == 16) { + /* hack alert: why is 16bpp broken? dunno */ cfb_copyarea(info, area); return; } diff -Nru a/drivers/video/aty/radeon_base.c b/drivers/video/aty/radeon_base.c --- a/drivers/video/aty/radeon_base.c 2004-06-25 09:15:24 +02:00 +++ b/drivers/video/aty/radeon_base.c 2004-06-25 09:15:24 +02:00 @@ -1573,6 +1573,12 @@ } #endif + /* for some reason, copyarea is broken at 16bpp... :-/ */ + if (mode->bits_per_pixel == 16) + info->flags &= ~FBINFO_HWACCEL_COPYAREA; + else + info->flags |= FBINFO_HWACCEL_COPYAREA; + /* Clear surface registers */ for (i=0; i<8; i++) { newmode.surf_lower_bound[i] = 0; |