# HG changeset patch # User faust3 # Date 1097327608 0 # Node ID acfe017b6195cfab83cdac55df54109e8e3f5f41 # Parent e2dca00374f23ac9f9af2539d21a0820fd490187 correct scaling when the screen resolution is smaller than the flat panel resolution diff -r e2dca00374f2 -r acfe017b6195 vidix/drivers/radeon_vid.c --- a/vidix/drivers/radeon_vid.c Sat Oct 09 13:07:18 2004 +0000 +++ b/vidix/drivers/radeon_vid.c Sat Oct 09 13:13:28 2004 +0000 @@ -309,6 +309,19 @@ return yres + 1; } +/* get flat panel x resolution*/ +static uint32_t radeon_get_fp_xres( void ){ + uint32_t xres=(INREG(FP_HORZ_STRETCH)&0x00fff000)>>16; + xres=(xres+1)*8; + return xres; +} + +/* get flat panel y resolution*/ +static uint32_t radeon_get_fp_yres( void ){ + uint32_t yres=(INREG(FP_VERT_STRETCH)&0x00fff000)>>12; + return yres+1; +} + static void radeon_wait_vsync(void) { int i; @@ -1292,6 +1305,7 @@ printf(RADEON_MSG"radeon_overlay_off=%08X\n",radeon_overlay_off); printf(RADEON_MSG"radeon_ram_size=%08X\n",radeon_ram_size); printf(RADEON_MSG"video mode: %ux%u@%u\n",radeon_get_xres(),radeon_get_yres(),radeon_vid_get_dbpp()); + printf(RADEON_MSG"flatpanel size: %ux%u\n",radeon_get_fp_xres(),radeon_get_fp_yres()); printf(RADEON_MSG"*** Begin of OV0 registers dump ***\n"); for(i=0;ifourcc; - besr.v_inc = (src_h << 20) / dest_h; + + /* flat panel */ + if(INREG(FP_VERT_STRETCH)&VERT_STRETCH_ENABLE){ + besr.v_inc = (src_h * radeon_get_yres() / radeon_get_fp_yres() << 20) / dest_h; + } + else besr.v_inc = (src_h << 20) / dest_h; if(radeon_is_interlace()) besr.v_inc *= 2; h_inc = (src_w << 12) / dest_w;