diff options
author | Kaleb Keithley <kaleb@freedesktop.org> | 2003-11-26 22:48:59 +0000 |
---|---|---|
committer | Kaleb Keithley <kaleb@freedesktop.org> | 2003-11-26 22:48:59 +0000 |
commit | 34c564cf357ec08599437341f1cc5b5822661c33 (patch) | |
tree | 9fd0fcc90b4b90e1d8582809bda3b328fc7a9d66 | |
parent | 284d0bde93e41f74cb5992a877ccfff1538278e0 (diff) |
merge latest (4.3.99.16) from XFree86 (vendor) branchXORG-RELEASE-1-BASEXEVIE-MERGEXEVIE-BASEXINERAMA_2XEVIE
-rw-r--r-- | src/s3v_accel.c | 14 | ||||
-rw-r--r-- | src/s3v_driver.c | 64 | ||||
-rw-r--r-- | src/s3v_xv.c | 221 |
3 files changed, 49 insertions, 250 deletions
diff --git a/src/s3v_accel.c b/src/s3v_accel.c index 1c584f9..e5cb7fe 100644 --- a/src/s3v_accel.c +++ b/src/s3v_accel.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/s3virge/s3v_accel.c,v 1.23 2001/12/13 18:01:50 eich Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/s3virge/s3v_accel.c,v 1.25 2003/11/06 18:38:05 tsi Exp $ */ /* Copyright (C) 1994-1999 The XFree86 Project, Inc. All Rights Reserved. @@ -245,7 +245,7 @@ S3VNopAllCmdSets(ScrnInfoPtr pScrn) if (xf86GetVerbosity() > 1) { ErrorF("\tTrio3D -- S3VNopAllCmdSets: SubsysStats#1 = 0x%08lx\n", - IN_SUBSYS_STAT()); + (unsigned long)IN_SUBSYS_STAT()); } mem_barrier(); @@ -267,7 +267,7 @@ S3VNopAllCmdSets(ScrnInfoPtr pScrn) if (xf86GetVerbosity() > 1) { ErrorF("\tTrio3D -- S3VNopAllCmdSets: SubsysStats#2 = 0x%08lx\n", - IN_SUBSYS_STAT()); + (unsigned long)IN_SUBSYS_STAT()); } } @@ -335,8 +335,8 @@ S3VGEReset(ScrnInfoPtr pScrn, int from_timeout, int line, char *file) VGAOUT8(vgaCRReg, tmp & ~0x02); usleep(10000); - xf86ErrorFVerb(VERBLEV, " S3VGEReset sub_stat=%x \n", - IN_SUBSYS_STAT() + xf86ErrorFVerb(VERBLEV, " S3VGEReset sub_stat=%lx \n", + (unsigned long)IN_SUBSYS_STAT() ); if (!from_timeout) @@ -415,8 +415,8 @@ S3VGEReset(ScrnInfoPtr pScrn, int from_timeout, int line, char *file) if((IN_SUBSYS_STAT() & 0x3f802000 & 0x20002000) != 0x20002000) { if(xf86GetVerbosity() > 1) - ErrorF("restarting S3 graphics engine reset %2d ..." - "%lx\n",r,IN_SUBSYS_STAT()); + ErrorF("restarting S3 graphics engine reset %2d ...%lx\n", + r, (unsigned long)IN_SUBSYS_STAT()); } else break; diff --git a/src/s3v_driver.c b/src/s3v_driver.c index 4fac8a3..6eddce0 100644 --- a/src/s3v_driver.c +++ b/src/s3v_driver.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/s3virge/s3v_driver.c,v 1.86 2003/02/04 02:20:50 dawes Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/s3virge/s3v_driver.c,v 1.93 2003/11/06 18:38:05 tsi Exp $ */ /* Copyright (C) 1994-1999 The XFree86 Project, Inc. All Rights Reserved. @@ -56,6 +56,10 @@ in this Software without prior written authorization from the XFree86 Project. #define DPMS_SERVER #include "extensions/dpms.h" +#ifndef USE_INT10 +#define USE_INT10 0 +#endif + /* * Internals */ @@ -283,7 +287,6 @@ static const char *xaaSymbols[] = { "XAACopyROP_PM", "XAADestroyInfoRec", "XAACreateInfoRec", - "XAAFillSolidRects", "XAAHelpPatternROP", "XAAHelpSolidROP", "XAAInit", @@ -331,12 +334,15 @@ static const char *fbSymbols[] = { NULL }; +#if USE_INT10 static const char *int10Symbols[] = { "xf86InitInt10", "xf86FreeInt10", NULL }; +#endif +#ifdef XFree86LOADER static const char *cfbSymbols[] = { "cfbScreenInit", "cfb16ScreenInit", @@ -350,8 +356,6 @@ static const char *cfbSymbols[] = { NULL }; -#ifdef XFree86LOADER - static MODULESETUPPROTO(s3virgeSetup); static XF86ModuleVersionInfo S3VVersRec = @@ -396,7 +400,10 @@ s3virgeSetup(pointer module, pointer opts, int *errmaj, int *errmin) */ LoaderRefSymLists(vgahwSymbols, cfbSymbols, xaaSymbols, ramdacSymbols, ddcSymbols, i2cSymbols, - int10Symbols, vbeSymbols, shadowSymbols, +#if USE_INT10 + int10Symbols, +#endif + vbeSymbols, shadowSymbols, fbSymbols, NULL); /* @@ -619,10 +626,9 @@ S3VPreInit(ScrnInfoPtr pScrn, int flags) /* * The first thing we should figure out is the depth, bpp, etc. - * Our default depth is 8, so pass it to the helper function. * We support both 24bpp and 32bpp layouts, so indicate that. */ - if (!xf86SetDepthBpp(pScrn, 8, 8, 8, Support24bppFb | Support32bppFb | + if (!xf86SetDepthBpp(pScrn, 0, 0, 0, Support24bppFb | Support32bppFb | SupportConvert32to24 | PreferConvert32to24)) { return FALSE; } else { @@ -907,7 +913,7 @@ S3VPreInit(ScrnInfoPtr pScrn, int flags) return FALSE; } -#if 0 +#if USE_INT10 if (xf86LoadSubModule(pScrn, "int10")) { xf86Int10InfoPtr pInt; xf86LoaderReqSymLists(int10Symbols, NULL); @@ -1011,7 +1017,7 @@ S3VPreInit(ScrnInfoPtr pScrn, int flags) vgaCRReg = vgaIOBase + 5; xf86ErrorFVerb(VERBLEV, - " S3VPreInit vgaCRIndex=%x, vgaIOBase=%x, MMIOBase=%x\n", + " S3VPreInit vgaCRIndex=%x, vgaIOBase=%x, MMIOBase=%p\n", vgaCRIndex, vgaIOBase, hwp->MMIOBase ); @@ -1342,8 +1348,9 @@ S3VPreInit(ScrnInfoPtr pScrn, int flags) , lcdclk / 1000.0); } + S3VDisableMmio(pScrn); S3VUnmapMem(pScrn); - + /* And finally set various possible option flags */ ps3v->bankedMono = FALSE; @@ -1609,6 +1616,8 @@ S3VEnterVT(int scrnIndex, int flags) #ifdef unmap_always S3VMapMem(pScrn); #endif + S3VEnableMmio(pScrn); + S3VSave(pScrn); return S3VModeInit(pScrn, pScrn->currentMode); } @@ -1638,6 +1647,7 @@ S3VLeaveVT(int scrnIndex, int flags) S3VWriteMode(pScrn, vgaSavePtr, S3VSavePtr); /* Restore standard register access */ /* and unmap memory. */ + S3VDisableMmio(pScrn); #ifdef unmap_always S3VUnmapMem(pScrn); #endif @@ -1781,8 +1791,8 @@ S3VSave (ScrnInfoPtr pScrn) VGAOUT8(vgaCRIndex, 0x93); save->CR93 = VGAIN8(vgaCRReg); } - if (ps3v->Chipset == S3_ViRGE_DXGX || S3_ViRGE_GX2_SERIES(ps3v->Chipset) || - S3_ViRGE_MX_SERIES(ps3v->Chipset)) { + if (ps3v->Chipset == S3_ViRGE_DXGX || S3_ViRGE_GX2_SERIES(ps3v->Chipset) || + S3_ViRGE_MX_SERIES(ps3v->Chipset) || S3_TRIO_3D_SERIES(ps3v->Chipset)) { VGAOUT8(vgaCRIndex, 0x90); save->CR90 = VGAIN8(vgaCRReg); VGAOUT8(vgaCRIndex, 0x91); @@ -1897,11 +1907,11 @@ S3VSave (ScrnInfoPtr pScrn) { xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, VERBLEV, - "MMPR regs: %08x %08x %08x %08x\n", - INREG(FIFO_CONTROL_REG), - INREG(MIU_CONTROL_REG), - INREG(STREAMS_TIMEOUT_REG), - INREG(MISC_TIMEOUT_REG)); + "MMPR regs: %08lx %08lx %08lx %08lx\n", + (unsigned long)INREG(FIFO_CONTROL_REG), + (unsigned long)INREG(MIU_CONTROL_REG), + (unsigned long)INREG(STREAMS_TIMEOUT_REG), + (unsigned long)INREG(MISC_TIMEOUT_REG)); } PVERB5("\n\nViRGE driver: saved current video mode. Register dump:\n\n"); @@ -2109,7 +2119,7 @@ S3VWriteMode (ScrnInfoPtr pScrn, vgaRegPtr vgaSavePtr, S3VRegPtr restore) VGAOUT8(vgaCRReg, restore->CR93); } if (ps3v->Chipset == S3_ViRGE_DXGX || S3_ViRGE_GX2_SERIES(ps3v->Chipset) || - S3_ViRGE_MX_SERIES(ps3v->Chipset)) { + S3_ViRGE_MX_SERIES(ps3v->Chipset) || S3_TRIO_3D_SERIES(ps3v->Chipset)) { VGAOUT8(vgaCRIndex, 0x90); VGAOUT8(vgaCRReg, restore->CR90); VGAOUT8(vgaCRIndex, 0x91); @@ -2268,7 +2278,6 @@ S3VWriteMode (ScrnInfoPtr pScrn, vgaRegPtr vgaSavePtr, S3VRegPtr restore) else VGAOUT8(vgaCRReg, cr3a); - if (xf86GetVerbosity() > 1) { xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, VERBLEV, "ViRGE driver: done restoring mode, dumping CR registers:\n"); @@ -2469,8 +2478,6 @@ S3VUnmapMem(ScrnInfoPtr pScrn) ps3v->PrimaryVidMapped = FALSE; } - S3VDisableMmio(pScrn); - xf86UnMapVidMem(pScrn->scrnIndex, (pointer)ps3v->MapBase, S3_NEWMMIO_REGSIZE); if (ps3v->FBBase) @@ -2661,19 +2668,7 @@ S3VScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) if(xf86DPMSInit(pScreen, S3VDisplayPowerManagementSet, 0) == FALSE) xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "DPMS initialization failed!\n"); -#ifndef XvExtension - { - XF86VideoAdaptorPtr *ptr; - int n; - - n = xf86XVListGenericAdaptors(pScrn,&ptr); - if (n) { - xf86XVScreenInit(pScreen, ptr, n); - } - } -#else - S3VInitVideo(pScreen); -#endif + S3VInitVideo(pScreen); /* Report any unused options (only for the first generation) */ if (serverGeneration == 1) { @@ -3531,6 +3526,7 @@ S3VCloseScreen(int scrnIndex, ScreenPtr pScreen) if (pScrn->vtSema) { S3VWriteMode(pScrn, vgaSavePtr, S3VSavePtr); vgaHWLock(hwp); + S3VDisableMmio(pScrn); S3VUnmapMem(pScrn); } diff --git a/src/s3v_xv.c b/src/s3v_xv.c index 0e2995b..5cf2bb3 100644 --- a/src/s3v_xv.c +++ b/src/s3v_xv.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/s3virge/s3v_xv.c,v 1.7 2003/02/04 02:20:50 dawes Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/s3virge/s3v_xv.c,v 1.11 2003/11/10 18:22:25 tsi Exp $ */ /* Copyright (C) 2000 The XFree86 Project, Inc. All Rights Reserved. @@ -52,12 +52,6 @@ in this Software without prior written authorization from the XFree86 Project. #define S3V_MAX_PORTS 1 - -#ifndef XvExtension -void S3VInitVideo(ScreenPtr pScreen) {} -int S3VQueryXvCapable(ScrnInfoPtr) {return FALSE;} -#else - #if 0 static void S3VInitOffscreenImages(ScreenPtr); #endif @@ -337,58 +331,6 @@ S3VQueryBestSize( -static void -S3VCopyData( - unsigned char *src, - unsigned char *dst, - int srcPitch, - int dstPitch, - int h, - int w -){ - w <<= 1; - while(h--) { - memcpy(dst, src, w); - src += srcPitch; - dst += dstPitch; - } -} - - -static void -S3VCopyMungedData( - unsigned char *src1, - unsigned char *src2, - unsigned char *src3, - unsigned char *dst1, - int srcPitch, - int srcPitch2, - int dstPitch, - int h, - int w -){ - CARD32 *dst = (CARD32*)dst1; - int i, j; - - dstPitch >>= 2; - w >>= 1; - - for(j = 0; j < h; j++) { - for(i = 0; i < w; i++) { - dst[i] = src1[i << 1] | (src1[(i << 1) + 1] << 16) | - (src3[i] << 8) | (src2[i] << 24); - } - dst += dstPitch; - src1 += srcPitch; - if(j & 1) { - src2 += srcPitch2; - src3 += srcPitch2; - } - } -} - - - static void S3VResetVideoOverlay(ScrnInfoPtr pScrn) { @@ -516,7 +458,7 @@ S3VSetupImageVideoOverlay(ScreenPtr pScreen) adapt->QueryImageAttributes = S3VQueryImageAttributes; /* gotta uninit this someplace */ - REGION_INIT(pScreen, &(ps3v->portPrivate->clip), NullBox, 0); + REGION_NULL(pScreen, &(ps3v->portPrivate->clip)); S3VResetVideoOverlay(pScrn); @@ -524,141 +466,12 @@ S3VSetupImageVideoOverlay(ScreenPtr pScreen) } -static Bool -RegionsEqual(RegionPtr A, RegionPtr B) -{ - int *dataA, *dataB; - int num; - - num = REGION_NUM_RECTS(A); - if(num != REGION_NUM_RECTS(B)) - return FALSE; - - if((A->extents.x1 != B->extents.x1) || - (A->extents.x2 != B->extents.x2) || - (A->extents.y1 != B->extents.y1) || - (A->extents.y2 != B->extents.y2)) - return FALSE; - - dataA = (int*)REGION_RECTS(A); - dataB = (int*)REGION_RECTS(B); - - while(num--) { - if((dataA[0] != dataB[0]) || (dataA[1] != dataB[1])) - return FALSE; - dataA += 2; - dataB += 2; - } - - return TRUE; -} - - -/* S3VClipVideo - copied from MGAClipVideo - - - Takes the dst box in standard X BoxRec form (top and left - edges inclusive, bottom and right exclusive). The new dst - box is returned. The source boundaries are given (x1, y1 - inclusive, x2, y2 exclusive) and returned are the new source - boundaries in 16.16 fixed point. -*/ - -#define DummyScreen screenInfo.screens[0] - -static Bool -S3VClipVideo( - BoxPtr dst, - INT32 *x1, - INT32 *x2, - INT32 *y1, - INT32 *y2, - RegionPtr reg, - INT32 width, - INT32 height -){ - INT32 vscale, hscale, delta; - BoxPtr extents = REGION_EXTENTS(DummyScreen, reg); - int diff; - - hscale = ((*x2 - *x1) << 16) / (dst->x2 - dst->x1); - vscale = ((*y2 - *y1) << 16) / (dst->y2 - dst->y1); - - *x1 <<= 16; *x2 <<= 16; - *y1 <<= 16; *y2 <<= 16; - - diff = extents->x1 - dst->x1; - if(diff > 0) { - dst->x1 = extents->x1; - *x1 += diff * hscale; - } - diff = dst->x2 - extents->x2; - if(diff > 0) { - dst->x2 = extents->x2; - *x2 -= diff * hscale; - } - diff = extents->y1 - dst->y1; - if(diff > 0) { - dst->y1 = extents->y1; - *y1 += diff * vscale; - } - diff = dst->y2 - extents->y2; - if(diff > 0) { - dst->y2 = extents->y2; - *y2 -= diff * vscale; - } - - if(*x1 < 0) { - diff = (- *x1 + hscale - 1)/ hscale; - dst->x1 += diff; - *x1 += diff * hscale; - } - delta = *x2 - (width << 16); - if(delta > 0) { - diff = (delta + hscale - 1)/ hscale; - dst->x2 -= diff; - *x2 -= diff * hscale; - } - if(*x1 >= *x2) return FALSE; - - if(*y1 < 0) { - diff = (- *y1 + vscale - 1)/ vscale; - dst->y1 += diff; - *y1 += diff * vscale; - } - delta = *y2 - (height << 16); - if(delta > 0) { - diff = (delta + vscale - 1)/ vscale; - dst->y2 -= diff; - *y2 -= diff * vscale; - } - if(*y1 >= *y2) return FALSE; - - if((dst->x1 != extents->x1) || (dst->x2 != extents->x2) || - (dst->y1 != extents->y1) || (dst->y2 != extents->y2)) - { - RegionRec clipReg; - REGION_INIT(DummyScreen, &clipReg, dst, 1); - REGION_INTERSECT(DummyScreen, reg, reg, &clipReg); - REGION_UNINIT(DummyScreen, &clipReg); - } - return TRUE; -} - - - static void S3VStopVideo(ScrnInfoPtr pScrn, pointer data, Bool shutdown) { S3VPtr ps3v = S3VPTR(pScrn); S3VPortPrivPtr pPriv = ps3v->portPrivate; - vgaHWPtr hwp = VGAHWPTR(pScrn); - /* S3VPtr ps3v = S3VPTR(pScrn);*/ - int vgaCRIndex, vgaCRReg, vgaIOBase; - vgaIOBase = hwp->IOBase; - vgaCRIndex = vgaIOBase + 4; - vgaCRReg = vgaIOBase + 5; - #if 0 MGAPtr pMga = MGAPTR(pScrn); MGAPortPrivPtr pPriv = pMga->portPrivate; @@ -696,8 +509,8 @@ S3VStopVideo(ScrnInfoPtr pScrn, pointer data, Bool shutdown) pPriv->area = NULL; } pPriv->videoStatus = 0; - } else { #if 0 + } else { if(pPriv->videoStatus & CLIENT_VIDEO_ON) { pPriv->videoStatus |= OFF_TIMER; pPriv->offTime = currentTime.milliseconds + OFF_DELAY; @@ -983,8 +796,6 @@ S3VPutImage( int top, left, npixels, nlines; BoxRec dstBox; CARD32 tmp; - static int once = 1; - static int once2 = 1; /* If streams aren't enabled, do nothing */ if(!ps3v->NeedSTREAMS) @@ -1001,7 +812,8 @@ S3VPutImage( dstBox.y1 = drw_y; dstBox.y2 = drw_y + drw_h; - if(!S3VClipVideo(&dstBox, &x1, &x2, &y1, &y2, clipBoxes, width, height)) + if(!xf86XVClipVideoHelper(&dstBox, &x1, &x2, &y1, &y2, + clipBoxes, width, height)) return Success; /*if(!pMga->TexturedVideo) {*/ @@ -1066,18 +878,16 @@ S3VPutImage( offset3 = tmp; } nlines = ((((y2 + 0xffff) >> 16) + 1) & ~1) - top; - S3VCopyMungedData(buf + (top * srcPitch) + (left >> 1), - buf + offset2, buf + offset3, dst_start, - srcPitch, srcPitch2, dstPitch, nlines, npixels); - once2 = 0; + xf86XVCopyYUV12ToPacked(buf + (top * srcPitch) + (left >> 1), + buf + offset2, buf + offset3, dst_start, + srcPitch, srcPitch2, dstPitch, nlines, npixels); break; case FOURCC_UYVY: case FOURCC_YUY2: default: buf += (top * srcPitch) + left; nlines = ((y2 + 0xffff) >> 16) - top; - S3VCopyData(buf, dst_start, srcPitch, dstPitch, nlines, npixels); - once = 0; + xf86XVCopyPacked(buf, dst_start, srcPitch, dstPitch, nlines, npixels); break; } @@ -1093,12 +903,10 @@ S3VPutImage( } else { #endif /* update cliplist */ - if(!RegionsEqual(&pPriv->clip, clipBoxes)) { - REGION_COPY(pScreen, &pPriv->clip, clipBoxes); + if(!REGION_EQUAL(pScrn->pScreen, &pPriv->clip, clipBoxes)) { + REGION_COPY(pScrn->pScreen, &pPriv->clip, clipBoxes); /* draw these */ - XAAFillSolidRects(pScrn, pPriv->colorKey, GXcopy, ~0, - REGION_NUM_RECTS(clipBoxes), - REGION_RECTS(clipBoxes)); + xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, clipBoxes); } offset += left + (top * dstPitch); @@ -1168,8 +976,3 @@ S3VQueryImageAttributes( return size; } - - - -#endif /* !XvExtension */ - |