Index: programs/Xserver/hw/xfree86/drivers/mga/mga_video.c =================================================================== RCS file: /cvs/xc/programs/Xserver/hw/xfree86/drivers/mga/mga_video.c,v retrieving revision 1.34 diff -u -r1.34 mga_video.c --- programs/Xserver/hw/xfree86/drivers/mga/mga_video.c 20 Feb 2004 16:59:49 -0000 1.34 +++ programs/Xserver/hw/xfree86/drivers/mga/mga_video.c 16 Apr 2004 17:09:29 -0000 @@ -578,48 +578,19 @@ short src_w, short src_h, short drw_w, short drw_h ){ +#define VSYNC_POS 2 + MGAPtr pMga = MGAPTR(pScrn); - int tmp, hzoom, intrep; - int maxOverlayClock; + int tmp, intrep; CHECK_DMA_QUIESCENT(pMga, pScrn); - /* got 48 scanlines to do it in */ - tmp = INREG(MGAREG_VCOUNT) + 48; - /* FIXME always change it in vertical retrace use CrtcV ?*/ - if(tmp > pScrn->currentMode->CrtcVTotal) - tmp -= 49; /* too bad */ - else - tmp = pScrn->currentMode->CrtcVTotal -1; - - tmp = pScrn->currentMode->VDisplay +1; - /* enable accelerated 2x horizontal zoom when pixelclock >135MHz */ - - if ((pMga->ChipRev >= 0x80) || (pMga->Chipset == PCI_CHIP_MGAG550)) { - /* G450, G550 */ - maxOverlayClock = 234000; - } else { - maxOverlayClock = 135000; - } - - hzoom = (pScrn->currentMode->Clock > maxOverlayClock) ? 1 : 0; - - switch(id) { - case FOURCC_UYVY: - OUTREG(MGAREG_BESGLOBCTL, 0x000000c0 | (3 * hzoom) | (tmp << 16)); - break; - case FOURCC_YUY2: - default: - OUTREG(MGAREG_BESGLOBCTL, 0x00000080 | (3 * hzoom) | (tmp << 16)); - break; - } - OUTREG(MGAREG_BESA1ORG, offset); if(y1 & 0x00010000) - OUTREG(MGAREG_BESCTL, 0x00040c41); + OUTREG(MGAREG_BESCTL, 0x00050c41); else - OUTREG(MGAREG_BESCTL, 0x00040c01); + OUTREG(MGAREG_BESCTL, 0x00050c01); OUTREG(MGAREG_BESHCOORD, (dstBox->x1 << 16) | (dstBox->x2 - 1)); OUTREG(MGAREG_BESVCOORD, (dstBox->y1 << 16) | (dstBox->y2 - 1)); @@ -640,11 +611,20 @@ OUTREG(MGAREG_BESVISCAL, tmp & 0x001ffffc); intrep = ((drw_w == src_w) || (drw_w < 2)) ? 0 : 1; - tmp = (((src_w - intrep) << 16)/(drw_w - intrep)) << hzoom; + tmp = (((src_w - intrep) << 16)/(drw_w - intrep)); if(tmp >= (32 << 16)) tmp = (32 << 16) - 1; OUTREG(MGAREG_BESHISCAL, tmp & 0x001ffffc); + switch(id) { + case FOURCC_UYVY: + OUTREG(MGAREG_BESGLOBCTL, 0x000000c0 | (VSYNC_POS << 16)); + break; + case FOURCC_YUY2: + default: + OUTREG(MGAREG_BESGLOBCTL, 0x00000080 | (VSYNC_POS << 16)); + break; + } } static void
Seems like the BES regs are double bufferd, therefore commit them
_after_ they are set. New patch:
- Xv and resolution loss on matrox cards Michael Lampe
- Re: Xv and resolution loss on matrox cards Michael Lampe
- Re: Xv and resolution loss on matrox cards David Dawes
- Re: Xv and resolution loss on matrox cards Michael Lampe
- Re: Xv and resolution loss on matrox cards David Dawes