diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/atidri.c | 90 | ||||
-rw-r--r-- | src/atimach64exa.c | 15 |
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 */ |