summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaleb Keithley <kaleb@freedesktop.org>2003-11-26 22:48:59 +0000
committerKaleb Keithley <kaleb@freedesktop.org>2003-11-26 22:48:59 +0000
commit34c564cf357ec08599437341f1cc5b5822661c33 (patch)
tree9fd0fcc90b4b90e1d8582809bda3b328fc7a9d66
parent284d0bde93e41f74cb5992a877ccfff1538278e0 (diff)
merge latest (4.3.99.16) from XFree86 (vendor) branchXORG-RELEASE-1-BASEXEVIE-MERGEXEVIE-BASEXINERAMA_2XEVIE
-rw-r--r--src/s3v_accel.c14
-rw-r--r--src/s3v_driver.c64
-rw-r--r--src/s3v_xv.c221
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 */
-