Move libcw setup to the only renderer requiring it (XAA).

Additionally, protect libcw setup behind checks for Render, to avoid
segfaulting if Render isn't available (xnest).

The previous setup was an ABI-preserving dance, which is better nuked now.
Now, anything that needs libcw must explicitly initialize it, and
miDisableCompositeWrapper (previously only called by EXA and presumably binary
drivers) is gone.
This commit is contained in:
Eric Anholt 2007-03-27 17:31:28 -07:00
parent e76b634951
commit 6ed08949af
8 changed files with 19 additions and 39 deletions

View File

@ -853,10 +853,6 @@ AC_DEFINE(DAMAGE,1,[Support Damage extension])
DAMAGE_LIB='$(top_builddir)/damageext/libdamageext.la'
DAMAGE_INC='-I$(top_srcdir)/damageext'
MIEXT_DAMAGE_LIB='$(top_builddir)/miext/damage/libdamage.la'
dnl damage (may) need the composite wrapper when composite is enabled
if test "$COMPOSITE" = yes; then
MIEXT_DAMAGE_LIB="$MIEXT_DAMAGE_LIB "'$(top_builddir)/miext/cw/libcw.la'
fi
MIEXT_DAMAGE_INC='-I$(top_srcdir)/miext/damage'
AC_DEFINE(XINPUT, 1, [Support X Input extension])

View File

@ -668,10 +668,6 @@ exaDriverInit (ScreenPtr pScreen,
}
#endif
#ifdef COMPOSITE
miDisableCompositeWrapper(pScreen);
#endif
#ifdef MITSHM
/* Re-register with the MI funcs, which don't allow shared pixmaps.
* Shared pixmaps are almost always a performance loss for us, but this

View File

@ -208,9 +208,6 @@ _X_HIDDEN void *miLookupTab[] = {
#ifdef RENDER
SYMFUNC(miGlyphExtents)
#endif
#ifdef COMPOSITE
SYMFUNC(miDisableCompositeWrapper)
#endif
#ifdef DAMAGE
SYMFUNC(DamageDamageRegion)
#endif

View File

@ -9,6 +9,7 @@ MSB_3_FIXED = mf3-xaaBitmap.c mf3-xaaStipple.c
POLYSEG = s-xaaLine.c s-xaaDashLine.c
libxaa_la_LDFLAGS = -avoid-version
libxaa_la_LIBADD = $(top_builddir)/miext/cw/libcw.la
module_LTLIBRARIES = libxaa.la
libxaa_la_SOURCES = xaaInit.c xaaGC.c xaaInitAccel.c xaaFallback.c \

View File

@ -227,6 +227,14 @@ XAAInit(ScreenPtr pScreen, XAAInfoRecPtr infoRec)
if(infoRec->Flags & MICROSOFT_ZERO_LINE_BIAS)
miSetZeroLineBias(pScreen, OCTANT1 | OCTANT2 | OCTANT3 | OCTANT4);
#ifdef COMPOSITE
/* Initialize the composite wrapper. This needs to happen after the
* wrapping above (so it comes before us), but before all other extensions,
* so it doesn't confuse them. (particularly damage).
*/
miInitializeCompositeWrapper(pScreen);
#endif
return TRUE;
}

View File

@ -50,7 +50,6 @@ int cwWindowIndex;
#ifdef RENDER
int cwPictureIndex;
#endif
static Bool cwDisabled[MAXSCREENS];
static unsigned long cwGeneration = 0;
extern GCOps cwGCOps;
@ -619,9 +618,9 @@ void
miInitializeCompositeWrapper(ScreenPtr pScreen)
{
cwScreenPtr pScreenPriv;
if (cwDisabled[pScreen->myNum])
return;
#ifdef RENDER
Bool has_render = GetPictureScreenIfSet(pScreen) != NULL;
#endif
if (cwGeneration != serverGeneration)
{
@ -631,7 +630,8 @@ miInitializeCompositeWrapper(ScreenPtr pScreen)
cwGCIndex = AllocateGCPrivateIndex();
cwWindowIndex = AllocateWindowPrivateIndex();
#ifdef RENDER
cwPictureIndex = AllocatePicturePrivateIndex();
if (has_render)
cwPictureIndex = AllocatePicturePrivateIndex();
#endif
cwGeneration = serverGeneration;
}
@ -640,8 +640,10 @@ miInitializeCompositeWrapper(ScreenPtr pScreen)
if (!AllocateWindowPrivate(pScreen, cwWindowIndex, 0))
return;
#ifdef RENDER
if (!AllocatePicturePrivate(pScreen, cwPictureIndex, 0))
return;
if (has_render) {
if (!AllocatePicturePrivate(pScreen, cwPictureIndex, 0))
return;
}
#endif
pScreenPriv = (cwScreenPtr)xalloc(sizeof(cwScreenRec));
if (!pScreenPriv)
@ -661,17 +663,11 @@ miInitializeCompositeWrapper(ScreenPtr pScreen)
SCREEN_EPILOGUE(pScreen, GetWindowPixmap, cwGetWindowPixmap);
#ifdef RENDER
if (GetPictureScreen (pScreen))
if (has_render)
cwInitializeRender(pScreen);
#endif
}
_X_EXPORT void
miDisableCompositeWrapper(ScreenPtr pScreen)
{
cwDisabled[pScreen->myNum] = TRUE;
}
static Bool
cwCloseScreen (int i, ScreenPtr pScreen)
{

View File

@ -169,7 +169,3 @@ cwFiniRender (ScreenPtr pScreen);
void
miInitializeCompositeWrapper(ScreenPtr pScreen);
/* Must be called before miInitializeCompositeWrapper */
void
miDisableCompositeWrapper(ScreenPtr pScreen);

View File

@ -1831,16 +1831,6 @@ DamageSetup (ScreenPtr pScreen)
if (!pScrPriv)
return FALSE;
#ifdef COMPOSITE
/* This is a kludge to ensure wrapping order with the composite wrapper.
* If it's done from compinit.c, then DamageSetup may be called before the
* extension init phase, so that cw will be higher in the wrapping chain and
* rewrite drawables before damage gets to it, causing confusion.
*/
if (!noCompositeExtension)
miInitializeCompositeWrapper (pScreen);
#endif
pScrPriv->internalLevel = 0;
pScrPriv->pScreenDamage = 0;