--- xserver-xorg-driver-ati-6.5.7.3/src/r128_video.c 2005-07-11 03:29:45.000000000 +0100 +++ r128_video.c_radfix2 2006-04-04 14:04:47.000000000 +0100 @@ -618,13 +618,18 @@ R128InfoPtr info = R128PTR(pScrn); unsigned char *R128MMIO = info->MMIO; R128PortPrivPtr pPriv = info->adaptor->pPortPrivates[0].ptr; - int v_inc, h_inc, step_by, tmp; + int v_inc, h_inc, step_by, tmp, v_inc_shift; int p1_h_accum_init, p23_h_accum_init; int p1_v_accum_init; R128ECP(pScrn, pPriv); - v_inc = (src_h << 20) / drw_h; + v_inc_shift = 20; + if (pScrn->currentMode->Flags & V_INTERLACE) + v_inc_shift++; + if (pScrn->currentMode->Flags & V_DBLSCAN) + v_inc_shift--; + v_inc = ((src_h * pScrn->currentMode->CrtcVDisplay / info->PanelYRes) << v_inc_shift) / drw_h; h_inc = (src_w << (12 + pPriv->ecp_div)) / drw_w; step_by = 1; @@ -692,11 +697,16 @@ R128InfoPtr info = R128PTR(pScrn); unsigned char *R128MMIO = info->MMIO; R128PortPrivPtr pPriv = info->adaptor->pPortPrivates[0].ptr; - int v_inc, h_inc, step_by, tmp, leftUV; + int v_inc, h_inc, step_by, tmp, leftUV, v_inc_shift; int p1_h_accum_init, p23_h_accum_init; int p1_v_accum_init, p23_v_accum_init; - v_inc = (src_h << 20) / drw_h; + v_inc_shift = 20; + if (pScrn->currentMode->Flags & V_INTERLACE) + v_inc_shift++; + if (pScrn->currentMode->Flags & V_DBLSCAN) + v_inc_shift--; + v_inc = ((src_h * pScrn->currentMode->CrtcVDisplay / info->PanelYRes) << v_inc_shift) / drw_h; h_inc = (src_w << (12 + pPriv->ecp_div)) / drw_w; step_by = 1;