Remove the PaintWindow optimization.
This was an attempt to avoid scratch gc creation and validation for paintwin because that was expensive. This is not the case in current servers, and the danger of failure to implement it correctly (as seen in all previous implementations) is high enough to justify removing it. No performance difference detected with x11perf -create -move -resize -circulate on Xvfb. Leave the screen hooks for PaintWindow* in for now to avoid ABI change.
This commit is contained in:
4
fb/fb.h
4
fb/fb.h
@@ -2094,10 +2094,6 @@ fbFillRegionTiled (DrawablePtr pDrawable,
|
||||
RegionPtr pRegion,
|
||||
PixmapPtr pTile);
|
||||
|
||||
void
|
||||
fbPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what);
|
||||
|
||||
|
||||
pixman_image_t *image_from_pict (PicturePtr pict,
|
||||
Bool has_clip);
|
||||
void free_pixman_pict (PicturePtr, pixman_image_t *);
|
||||
|
||||
@@ -278,16 +278,6 @@ fbOverlayWindowExposures (WindowPtr pWin,
|
||||
miWindowExposures(pWin, prgn, other_exposed);
|
||||
}
|
||||
|
||||
void
|
||||
fbOverlayPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what)
|
||||
{
|
||||
if (what == PW_BORDER)
|
||||
fbOverlayUpdateLayerRegion (pWin->drawable.pScreen,
|
||||
fbOverlayWindowLayer (pWin),
|
||||
pRegion);
|
||||
fbPaintWindow (pWin, pRegion, what);
|
||||
}
|
||||
|
||||
Bool
|
||||
fbOverlaySetupScreen(ScreenPtr pScreen,
|
||||
pointer pbits1,
|
||||
@@ -441,7 +431,6 @@ fbOverlayFinishScreenInit(ScreenPtr pScreen,
|
||||
pScreen->CreateWindow = fbOverlayCreateWindow;
|
||||
pScreen->WindowExposures = fbOverlayWindowExposures;
|
||||
pScreen->CopyWindow = fbOverlayCopyWindow;
|
||||
pScreen->PaintWindowBorder = fbOverlayPaintWindow;
|
||||
#ifdef FB_24_32BIT
|
||||
if (bpp == 24 && imagebpp == 32)
|
||||
{
|
||||
|
||||
@@ -93,10 +93,6 @@ fbOverlayWindowExposures (WindowPtr pWin,
|
||||
RegionPtr prgn,
|
||||
RegionPtr other_exposed);
|
||||
|
||||
void
|
||||
fbOverlayPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what);
|
||||
|
||||
|
||||
Bool
|
||||
fbOverlaySetupScreen(ScreenPtr pScreen,
|
||||
pointer pbits1,
|
||||
|
||||
@@ -94,8 +94,6 @@ typedef struct {
|
||||
CreateScreenResourcesProcPtr CreateScreenResources;
|
||||
CreateWindowProcPtr CreateWindow;
|
||||
CopyWindowProcPtr CopyWindow;
|
||||
PaintWindowProcPtr PaintWindowBackground;
|
||||
PaintWindowProcPtr PaintWindowBorder;
|
||||
WindowExposuresProcPtr WindowExposures;
|
||||
CreateGCProcPtr CreateGC;
|
||||
CreateColormapProcPtr CreateColormap;
|
||||
@@ -794,70 +792,6 @@ xxWindowExposures (WindowPtr pWin,
|
||||
wrap(pScrPriv, pWin->drawable.pScreen, WindowExposures, xxWindowExposures);
|
||||
}
|
||||
|
||||
static void
|
||||
xxPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what)
|
||||
{
|
||||
xxScrPriv(pWin->drawable.pScreen);
|
||||
RegionRec rgni;
|
||||
|
||||
DBG("xxPaintWindow\n");
|
||||
|
||||
REGION_NULL (pWin->drawable.pScreen, &rgni);
|
||||
#if 0
|
||||
REGION_UNION (pWin->drawable.pScreen, &rgni, &rgni, &pWin->borderClip);
|
||||
REGION_INTERSECT(pWin->drawable.pScreen, &rgni, &rgni, pRegion);
|
||||
#else
|
||||
REGION_UNION (pWin->drawable.pScreen, &rgni, &rgni, pRegion);
|
||||
#endif
|
||||
switch (what) {
|
||||
case PW_BORDER:
|
||||
REGION_SUBTRACT (pWin->drawable.pScreen, &rgni, &rgni, &pWin->winSize);
|
||||
if (fbGetWindowPixmap(pWin) == pScrPriv->pPixmap) {
|
||||
DBG("PaintWindowBorder\n");
|
||||
REGION_UNION (pWin->drawable.pScreen, &pScrPriv->region,
|
||||
&pScrPriv->region, &rgni);
|
||||
} else {
|
||||
DBG("PaintWindowBorder NoOverlay\n");
|
||||
REGION_SUBTRACT (pWin->drawable.pScreen, &pScrPriv->region,
|
||||
&pScrPriv->region, &rgni);
|
||||
}
|
||||
unwrap (pScrPriv, pWin->drawable.pScreen, PaintWindowBorder);
|
||||
pWin->drawable.pScreen->PaintWindowBorder (pWin, pRegion, what);
|
||||
wrap(pScrPriv, pWin->drawable.pScreen, PaintWindowBorder,
|
||||
xxPaintWindow);
|
||||
break;
|
||||
case PW_BACKGROUND:
|
||||
switch (pWin->backgroundState) {
|
||||
case None:
|
||||
break;
|
||||
default:
|
||||
REGION_INTERSECT (pWin->drawable.pScreen, &rgni,
|
||||
&rgni,&pWin->winSize);
|
||||
if (fbGetWindowPixmap(pWin) == pScrPriv->pPixmap) {
|
||||
DBG("PaintWindowBackground\n");
|
||||
REGION_UNION (pWin->drawable.pScreen, &pScrPriv->region,
|
||||
&pScrPriv->region, &rgni);
|
||||
} else {
|
||||
DBG("PaintWindowBackground NoOverlay\n");
|
||||
REGION_SUBTRACT (pWin->drawable.pScreen, &pScrPriv->region,
|
||||
&pScrPriv->region, &rgni);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
unwrap (pScrPriv, pWin->drawable.pScreen, PaintWindowBackground);
|
||||
pWin->drawable.pScreen->PaintWindowBackground (pWin, pRegion, what);
|
||||
wrap(pScrPriv, pWin->drawable.pScreen, PaintWindowBackground,
|
||||
xxPaintWindow);
|
||||
break;
|
||||
}
|
||||
PRINT_RECTS(rgni);
|
||||
PRINT_RECTS(pScrPriv->region);
|
||||
#if 1
|
||||
REGION_UNINIT(pWin->drawable.pScreen,&rgni);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
xxCopyPseudocolorRegion(ScreenPtr pScreen, RegionPtr pReg,
|
||||
xxCmapPrivPtr pCmapPriv)
|
||||
@@ -1171,8 +1105,6 @@ xxSetup(ScreenPtr pScreen, int myDepth, int baseDepth, char* addr, xxSyncFunc sy
|
||||
wrap (pScrPriv, pScreen, CreateScreenResources, xxCreateScreenResources);
|
||||
wrap (pScrPriv, pScreen, CreateWindow, xxCreateWindow);
|
||||
wrap (pScrPriv, pScreen, CopyWindow, xxCopyWindow);
|
||||
wrap (pScrPriv, pScreen, PaintWindowBorder, xxPaintWindow);
|
||||
wrap (pScrPriv, pScreen, PaintWindowBackground, xxPaintWindow);
|
||||
#if 0 /* can we leave this out even with backing store enabled ? */
|
||||
wrap (pScrPriv, pScreen, WindowExposures, xxWindowExposures);
|
||||
#endif
|
||||
|
||||
@@ -122,8 +122,6 @@ fbSetupScreen(ScreenPtr pScreen,
|
||||
pScreen->ChangeWindowAttributes = fbChangeWindowAttributes;
|
||||
pScreen->RealizeWindow = fbMapWindow;
|
||||
pScreen->UnrealizeWindow = fbUnmapWindow;
|
||||
pScreen->PaintWindowBackground = fbPaintWindow;
|
||||
pScreen->PaintWindowBorder = fbPaintWindow;
|
||||
pScreen->CopyWindow = fbCopyWindow;
|
||||
pScreen->CreatePixmap = fbCreatePixmap;
|
||||
pScreen->DestroyPixmap = fbDestroyPixmap;
|
||||
|
||||
@@ -315,58 +315,3 @@ fbFillRegionTiled (DrawablePtr pDrawable,
|
||||
fbFinishAccess (&pTile->drawable);
|
||||
fbFinishAccess (pDrawable);
|
||||
}
|
||||
|
||||
void
|
||||
fbPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what)
|
||||
{
|
||||
WindowPtr pBgWin;
|
||||
|
||||
switch (what) {
|
||||
case PW_BACKGROUND:
|
||||
switch (pWin->backgroundState) {
|
||||
case None:
|
||||
break;
|
||||
case ParentRelative:
|
||||
do {
|
||||
pWin = pWin->parent;
|
||||
} while (pWin->backgroundState == ParentRelative);
|
||||
(*pWin->drawable.pScreen->PaintWindowBackground)(pWin, pRegion,
|
||||
what);
|
||||
break;
|
||||
case BackgroundPixmap:
|
||||
fbFillRegionTiled (&pWin->drawable,
|
||||
pRegion,
|
||||
pWin->background.pixmap);
|
||||
break;
|
||||
case BackgroundPixel:
|
||||
fbFillRegionSolid (&pWin->drawable,
|
||||
pRegion,
|
||||
0,
|
||||
fbReplicatePixel (pWin->background.pixel,
|
||||
pWin->drawable.bitsPerPixel));
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case PW_BORDER:
|
||||
if (pWin->borderIsPixel)
|
||||
{
|
||||
fbFillRegionSolid (&pWin->drawable,
|
||||
pRegion,
|
||||
0,
|
||||
fbReplicatePixel (pWin->border.pixel,
|
||||
pWin->drawable.bitsPerPixel));
|
||||
}
|
||||
else
|
||||
{
|
||||
for (pBgWin = pWin;
|
||||
pBgWin->backgroundState == ParentRelative;
|
||||
pBgWin = pBgWin->parent);
|
||||
|
||||
fbFillRegionTiled (&pBgWin->drawable,
|
||||
pRegion,
|
||||
pWin->border.pixmap);
|
||||
}
|
||||
break;
|
||||
}
|
||||
fbValidateDrawable (&pWin->drawable);
|
||||
}
|
||||
|
||||
@@ -119,14 +119,12 @@
|
||||
#define fbOverlayGeneration wfbOverlayGeneration
|
||||
#define fbOverlayGetScreenPrivateIndex wfbOverlayGetScreenPrivateIndex
|
||||
#define fbOverlayPaintKey wfbOverlayPaintKey
|
||||
#define fbOverlayPaintWindow wfbOverlayPaintWindow
|
||||
#define fbOverlayScreenPrivateIndex wfbOverlayScreenPrivateIndex
|
||||
#define fbOverlaySetupScreen wfbOverlaySetupScreen
|
||||
#define fbOverlayUpdateLayerRegion wfbOverlayUpdateLayerRegion
|
||||
#define fbOverlayWindowExposures wfbOverlayWindowExposures
|
||||
#define fbOverlayWindowLayer wfbOverlayWindowLayer
|
||||
#define fbPadPixmap wfbPadPixmap
|
||||
#define fbPaintWindow wfbPaintWindow
|
||||
#define fbPictureInit wfbPictureInit
|
||||
#define fbPixmapToRegion wfbPixmapToRegion
|
||||
#define fbPolyArc wfbPolyArc
|
||||
|
||||
Reference in New Issue
Block a user