summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Sapountzis <gsap7@yahoo.gr>2006-07-20 14:56:53 +0300
committerLuc Verhaegen <libv@skynet.be>2006-07-20 21:49:11 +0200
commitba48a10a1ea18c26c3cc7b7e15f2b0f3045bdbf8 (patch)
treee87f26208a8a263a18c279982936da85cd748de1
parent6b09f544879b202d17e7f577d053244a741bf377 (diff)
[PATCH] EXA: reserve offscreen memory for DRI only when it is running.HEADmaster
-rw-r--r--src/atidri.c90
-rw-r--r--src/atimach64exa.c15
2 files changed, 62 insertions, 43 deletions
diff --git a/src/atidri.c b/src/atidri.c
index 94c443f..04578ec 100644
--- a/src/atidri.c
+++ b/src/atidri.c
@@ -1,4 +1,4 @@
-/* $XFree86$ */ /* -*- mode: c; c-basic-offset: 3 -*- */
+/* -*- mode: c; c-basic-offset: 3 -*- */
/*
* Copyright 2000 Gareth Hughes
* All Rights Reserved.
@@ -332,15 +332,12 @@ static void ATIDRISwapContext( ScreenPtr pScreen,
}
}
+#ifdef USE_XAA
static void ATIDRITransitionTo2d(ScreenPtr pScreen)
{
ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
ATIPtr pATI = ATIPTR(pScreenInfo);
-#ifdef USE_XAA
- if (pATI->useEXA)
- goto _transitionTo2D_done;
-
if (pATI->backArea) {
xf86FreeOffscreenArea(pATI->backArea);
pATI->backArea = NULL;
@@ -349,9 +346,6 @@ static void ATIDRITransitionTo2d(ScreenPtr pScreen)
xf86FreeOffscreenArea(pATI->depthTexArea);
pATI->depthTexArea = NULL;
}
-#endif
-
-_transitionTo2D_done:
pATI->have3DWindows = FALSE;
if (pATI->pCursorInfo)
@@ -362,14 +356,9 @@ static void ATIDRITransitionTo3d(ScreenPtr pScreen)
{
ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
ATIPtr pATI = ATIPTR(pScreenInfo);
-#ifdef USE_XAA
FBAreaPtr fbArea;
int width, height;
- /* EXA allocates these areas up front, in memory manager setup */
- if (pATI->useEXA)
- goto _transitionTo3D_done;
-
xf86PurgeUnlockedOffscreenAreas(pScreen);
xf86QueryLargestOffscreenArea(pScreen, &width, &height, 0, 0, 0);
@@ -411,14 +400,52 @@ static void ATIDRITransitionTo3d(ScreenPtr pScreen)
if (fbArea)
xf86FreeOffscreenArea(fbArea);
-#endif
-_transitionTo3D_done:
pATI->have3DWindows = TRUE;
if (pATI->pCursorInfo)
xf86ForceHWCursor(pScreen, TRUE);
}
+#endif /* USE_XAA */
+
+#ifdef USE_EXA
+static void ATIDRITransitionTo2d_EXA(ScreenPtr pScreen)
+{
+ ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
+ ATIPtr pATI = ATIPTR(pScreenInfo);
+ ATIDRIServerInfoPtr pATIDRIServer = pATI->pDRIServerInfo;
+
+ exaEnableDisableFBAccess(pScreen->myNum, FALSE);
+
+ pATI->pExa->offScreenBase = pATIDRIServer->backOffset;
+
+ exaEnableDisableFBAccess(pScreen->myNum, TRUE);
+
+ pATI->have3DWindows = FALSE;
+
+ if (pATI->pCursorInfo)
+ xf86ForceHWCursor(pScreen, FALSE);
+}
+
+static void ATIDRITransitionTo3d_EXA(ScreenPtr pScreen)
+{
+ ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
+ ATIPtr pATI = ATIPTR(pScreenInfo);
+ ATIDRIServerInfoPtr pATIDRIServer = pATI->pDRIServerInfo;
+
+ exaEnableDisableFBAccess(pScreen->myNum, FALSE);
+
+ pATI->pExa->offScreenBase = pATIDRIServer->textureOffset +
+ pATIDRIServer->textureSize;
+
+ exaEnableDisableFBAccess(pScreen->myNum, TRUE);
+
+ pATI->have3DWindows = TRUE;
+
+ if (pATI->pCursorInfo)
+ xf86ForceHWCursor(pScreen, TRUE);
+}
+#endif /* USE_EXA */
/* Initialize the state of the back and depth buffers. */
static void ATIDRIInitBuffers( WindowPtr pWin, RegionPtr prgn, CARD32 indx )
@@ -705,7 +732,6 @@ static Bool ATIDRISetAgpMode( ScreenPtr pScreen )
if (pATI->OptionAGPSize) {
switch (pATI->OptionAGPSize) {
- case 256:
case 128:
case 64:
case 32:
@@ -799,8 +825,7 @@ static Bool ATIDRIAgpInit( ScreenPtr pScreen )
if (pATI->OptionBufferSize > 2) {
xf86DrvMsg( pScreen->myNum, X_WARNING, "[agp] Illegal DMA buffers size: %d MB\n",
pATI->OptionBufferSize );
- xf86DrvMsg(pScreen->myNum, X_WARNING,
- "[agp] Clamping DMA buffers size to 2 MB\n");
+ xf86DrvMsg( pScreen->myNum, X_WARNING, "[agp] Clamping DMA buffers size to 2 MB\n");
pATIDRIServer->bufferSize = 2;
} else {
pATIDRIServer->bufferSize = pATI->OptionBufferSize;
@@ -881,7 +906,7 @@ static Bool ATIDRIAgpInit( ScreenPtr pScreen )
return FALSE;
}
xf86DrvMsg(pScreen->myNum, X_INFO,
- "[agp] AGP texture region handle = 0x%08x\n",
+ "[agp] AGP texture region handle = 0x%08x\n",
pATIDRIServer->agpTexHandle);
if (drmMap(pATI->drmFD, pATIDRIServer->agpTexHandle, pATIDRIServer->agpTexMapSize,
@@ -1056,12 +1081,9 @@ static Bool ATIDRIIrqInit( ScreenPtr pScreen )
if ( pATI->irq <= 0 ) {
pATI->irq = drmGetInterruptFromBusID(pATI->drmFD,
- ((pciConfigPtr)pATI->PCIInfo
- ->thisCard)->busnum,
- ((pciConfigPtr)pATI->PCIInfo
- ->thisCard)->devnum,
- ((pciConfigPtr)pATI->PCIInfo
- ->thisCard)->funcnum);
+ ((pciConfigPtr)pATI->PCIInfo->thisCard)->busnum,
+ ((pciConfigPtr)pATI->PCIInfo->thisCard)->devnum,
+ ((pciConfigPtr)pATI->PCIInfo->thisCard)->funcnum);
if ( pATI->irq <= 0 ) {
xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR,
"[drm] Couldn't find IRQ for bus id %d:%d:%d\n",
@@ -1232,8 +1254,18 @@ Bool ATIDRIScreenInit( ScreenPtr pScreen )
pDRIInfo->SwapContext = ATIDRISwapContext;
pDRIInfo->InitBuffers = ATIDRIInitBuffers;
pDRIInfo->MoveBuffers = ATIDRIMoveBuffers;
- pDRIInfo->TransitionTo2d = ATIDRITransitionTo2d;
- pDRIInfo->TransitionTo3d = ATIDRITransitionTo3d;
+#ifdef USE_XAA
+ if (!pATI->useEXA) {
+ pDRIInfo->TransitionTo2d = ATIDRITransitionTo2d;
+ pDRIInfo->TransitionTo3d = ATIDRITransitionTo3d;
+ }
+#endif /* USE_XAA */
+#ifdef USE_EXA
+ if (pATI->useEXA) {
+ pDRIInfo->TransitionTo2d = ATIDRITransitionTo2d_EXA;
+ pDRIInfo->TransitionTo3d = ATIDRITransitionTo3d_EXA;
+ }
+#endif /* USE_EXA */
pDRIInfo->bufferRequests = DRI_ALL_WINDOWS;
pDRIInfo->createDummyCtx = TRUE;
@@ -1343,9 +1375,7 @@ Bool ATIDRIScreenInit( ScreenPtr pScreen )
if (pATI->OptionBufferSize > 2) {
xf86DrvMsg( pScreen->myNum, X_WARNING, "[pci] Illegal DMA buffers size: %d MB\n",
pATI->OptionBufferSize );
- xf86DrvMsg(pScreen->myNum, X_WARNING,
- "[pci] Clamping DMA buffers size to 2 MB\n");
-
+ xf86DrvMsg( pScreen->myNum, X_WARNING, "[pci] Clamping DMA buffers size to 2 MB\n");
pATIDRIServer->bufferSize = 2;
} else {
pATIDRIServer->bufferSize = pATI->OptionBufferSize;
diff --git a/src/atimach64exa.c b/src/atimach64exa.c
index 0c8d20d..80f6300 100644
--- a/src/atimach64exa.c
+++ b/src/atimach64exa.c
@@ -490,7 +490,6 @@ Mach64SetupMemEXA(ScreenPtr pScreen)
int textureSize = 0;
int pixmapCache = 0;
int next = 0;
- int err = 0x0;
/* front buffer */
pATIDRIServer->frontOffset = 0;
@@ -515,8 +514,6 @@ Mach64SetupMemEXA(ScreenPtr pScreen)
"need at least %d kB video memory\n", next / 1024 );
ATIDRICloseScreen(pScreen);
pATI->directRenderingEnabled = FALSE;
-
- err |= 0x1;
}
/* local textures */
@@ -565,18 +562,10 @@ Mach64SetupMemEXA(ScreenPtr pScreen)
"Not enough memory for local textures, disabling DRI\n");
ATIDRICloseScreen(pScreen);
pATI->directRenderingEnabled = FALSE;
-
- err |= 0x2;
}
- if (!err)
- {
- pATIDRIServer->textureOffset = next;
- pATIDRIServer->textureSize = textureSize;
- next += textureSize;
-
- pExa->offScreenBase = next;
- }
+ pATIDRIServer->textureOffset = next;
+ pATIDRIServer->textureSize = textureSize;
}
#endif /* XF86DRI_DEVEL */