diff options
author | Keith Packard <keithp@keithp.com> | 2010-06-22 12:11:20 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2010-06-22 12:11:20 -0700 |
commit | e2918b67395a48397bf7db545584cc2d4f4e7ccf (patch) | |
tree | 6debd0d80c7d9dbf5a439c374f179547d80d581f /hw | |
parent | 7673451ade46ebacfdfc02a5190149210198fdd8 (diff) |
Revert "mi: Remove unused overlay support"
This reverts commit 9120e58556014e514eef9dfe43cdea4b74dc66ae.
Whoops, please revert this patch -- overlay is in use in nvidia drivers,
and it's too late in release cycle to remove it.
I feel really sorry that I kept this patch in my tree. I will submit
another one, removing only XAA overlay hooks which are not used at all.
Diffstat (limited to 'hw')
-rwxr-xr-x | hw/xfree86/loader/sdksyms.sh | 1 | ||||
-rw-r--r-- | hw/xfree86/xaa/xaaOverlay.c | 29 |
2 files changed, 29 insertions, 1 deletions
diff --git a/hw/xfree86/loader/sdksyms.sh b/hw/xfree86/loader/sdksyms.sh index 424503102..13c5ae5f8 100755 --- a/hw/xfree86/loader/sdksyms.sh +++ b/hw/xfree86/loader/sdksyms.sh @@ -231,6 +231,7 @@ cat > sdksyms.c << EOF #include "miwideline.h" #include "mistruct.h" #include "mifpoly.h" +#include "mioverlay.h" /* randr/Makefile.am */ diff --git a/hw/xfree86/xaa/xaaOverlay.c b/hw/xfree86/xaa/xaaOverlay.c index 58c4a58e3..4b52bf6fd 100644 --- a/hw/xfree86/xaa/xaaOverlay.c +++ b/hw/xfree86/xaa/xaaOverlay.c @@ -16,6 +16,7 @@ #include "xaawrap.h" #include "gcstruct.h" #include "pixmapstr.h" +#include "mioverlay.h" #ifdef PANORAMIX #include "panoramiX.h" @@ -36,6 +37,7 @@ XAACopyWindow8_32( ScreenPtr pScreen = pWin->drawable.pScreen; XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_DRAWABLE((&pWin->drawable)); + Bool doUnderlay = miOverlayCopyUnderlay(pScreen); RegionPtr borderClip = &pWin->borderClip; Bool freeReg = FALSE; @@ -54,6 +56,9 @@ XAACopyWindow8_32( pwinRoot = pScreen->root; + if(doUnderlay) + freeReg = miOverlayCollectUnderlayRegions(pWin, &borderClip); + RegionNull(&rgnDst); dx = ptOldOrg.x - pWin->drawable.x; @@ -76,7 +81,7 @@ XAACopyWindow8_32( ppt++; pbox++; } - infoRec->ScratchGC.planemask = 0xff000000; + infoRec->ScratchGC.planemask = doUnderlay ? 0x00ffffff : 0xff000000; infoRec->ScratchGC.alu = GXcopy; XAADoBitBlt((DrawablePtr)pwinRoot, (DrawablePtr)pwinRoot, @@ -88,6 +93,25 @@ XAACopyWindow8_32( RegionDestroy(borderClip); } +static void +XAASetColorKey8_32( + ScreenPtr pScreen, + int nbox, + BoxPtr pbox +){ + XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen); + ScrnInfoPtr pScrn = infoRec->pScrn; + + /* I'm counting on writes being clipped away while switched away. + If this isn't going to be true then I need to be wrapping instead. */ + if(!infoRec->pScrn->vtSema) return; + + (*infoRec->FillSolidRects)(pScrn, pScrn->colorKey << 24, GXcopy, + 0xff000000, nbox, pbox); + + SET_SYNC_FLAG(infoRec); +} + void XAASetupOverlay8_32Planar(ScreenPtr pScreen) { @@ -96,6 +120,9 @@ XAASetupOverlay8_32Planar(ScreenPtr pScreen) pScreen->CopyWindow = XAACopyWindow8_32; + if(!(infoRec->FillSolidRectsFlags & NO_PLANEMASK)) + miOverlaySetTransFunction(pScreen, XAASetColorKey8_32); + infoRec->FullPlanemask = ~0; for(i = 0; i < 32; i++) /* haven't thought about this much */ infoRec->FullPlanemasks[i] = ~0; |