summaryrefslogtreecommitdiff
path: root/hw/xfree86
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2010-06-22 12:11:20 -0700
committerKeith Packard <keithp@keithp.com>2010-06-22 12:11:20 -0700
commite2918b67395a48397bf7db545584cc2d4f4e7ccf (patch)
tree6debd0d80c7d9dbf5a439c374f179547d80d581f /hw/xfree86
parent7673451ade46ebacfdfc02a5190149210198fdd8 (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/xfree86')
-rwxr-xr-xhw/xfree86/loader/sdksyms.sh1
-rw-r--r--hw/xfree86/xaa/xaaOverlay.c29
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;