Damage: Add wrappable hooks for damage create, destroy, register, & unregister.
Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
This commit is contained in:
parent
fb46474feb
commit
c80ed4945e
|
@ -1855,6 +1855,25 @@ damageCloseScreen (int i, ScreenPtr pScreen)
|
||||||
return (*pScreen->CloseScreen) (i, pScreen);
|
return (*pScreen->CloseScreen) (i, pScreen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default implementations of the damage management functions.
|
||||||
|
*/
|
||||||
|
void miDamageCreate (DamagePtr pDamage)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void miDamageRegister (DrawablePtr pDrawable, DamagePtr pDamage)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void miDamageUnregister (DrawablePtr pDrawable, DamagePtr pDamage)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void miDamageDestroy (DamagePtr pDamage)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Public functions for consumption outside this file.
|
* Public functions for consumption outside this file.
|
||||||
*/
|
*/
|
||||||
|
@ -1866,6 +1885,9 @@ DamageSetup (ScreenPtr pScreen)
|
||||||
#ifdef RENDER
|
#ifdef RENDER
|
||||||
PictureScreenPtr ps = GetPictureScreenIfSet(pScreen);
|
PictureScreenPtr ps = GetPictureScreenIfSet(pScreen);
|
||||||
#endif
|
#endif
|
||||||
|
const DamageScreenFuncsRec miFuncs = {
|
||||||
|
miDamageCreate, miDamageRegister, miDamageUnregister, miDamageDestroy
|
||||||
|
};
|
||||||
|
|
||||||
if (dixLookupPrivate(&pScreen->devPrivates, damageScrPrivateKey))
|
if (dixLookupPrivate(&pScreen->devPrivates, damageScrPrivateKey))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -1894,6 +1916,8 @@ DamageSetup (ScreenPtr pScreen)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
pScrPriv->funcs = miFuncs;
|
||||||
|
|
||||||
dixSetPrivate(&pScreen->devPrivates, damageScrPrivateKey, pScrPriv);
|
dixSetPrivate(&pScreen->devPrivates, damageScrPrivateKey, pScrPriv);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -1906,6 +1930,7 @@ DamageCreate (DamageReportFunc damageReport,
|
||||||
ScreenPtr pScreen,
|
ScreenPtr pScreen,
|
||||||
void *closure)
|
void *closure)
|
||||||
{
|
{
|
||||||
|
damageScrPriv(pScreen);
|
||||||
DamagePtr pDamage;
|
DamagePtr pDamage;
|
||||||
|
|
||||||
pDamage = xalloc (sizeof (DamageRec));
|
pDamage = xalloc (sizeof (DamageRec));
|
||||||
|
@ -1927,6 +1952,10 @@ DamageCreate (DamageReportFunc damageReport,
|
||||||
pDamage->damageReportPostRendering = NULL;
|
pDamage->damageReportPostRendering = NULL;
|
||||||
pDamage->damageDestroy = damageDestroy;
|
pDamage->damageDestroy = damageDestroy;
|
||||||
pDamage->damageMarker = NULL;
|
pDamage->damageMarker = NULL;
|
||||||
|
pDamage->pScreen = pScreen;
|
||||||
|
|
||||||
|
(*pScrPriv->funcs.Create) (pDamage);
|
||||||
|
|
||||||
return pDamage;
|
return pDamage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1934,6 +1963,17 @@ void
|
||||||
DamageRegister (DrawablePtr pDrawable,
|
DamageRegister (DrawablePtr pDrawable,
|
||||||
DamagePtr pDamage)
|
DamagePtr pDamage)
|
||||||
{
|
{
|
||||||
|
ScreenPtr pScreen = pDrawable->pScreen;
|
||||||
|
damageScrPriv(pScreen);
|
||||||
|
|
||||||
|
#if DAMAGE_VALIDATE_ENABLE
|
||||||
|
if (pDrawable->pScreen != pDamage->pScreen)
|
||||||
|
{
|
||||||
|
ErrorF ("DamageRegister called with mismatched screens\n");
|
||||||
|
abort ();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (pDrawable->type == DRAWABLE_WINDOW)
|
if (pDrawable->type == DRAWABLE_WINDOW)
|
||||||
{
|
{
|
||||||
WindowPtr pWindow = (WindowPtr) pDrawable;
|
WindowPtr pWindow = (WindowPtr) pDrawable;
|
||||||
|
@ -1956,6 +1996,7 @@ DamageRegister (DrawablePtr pDrawable,
|
||||||
pDamage->isWindow = FALSE;
|
pDamage->isWindow = FALSE;
|
||||||
pDamage->pDrawable = pDrawable;
|
pDamage->pDrawable = pDrawable;
|
||||||
damageInsertDamage (getDrawableDamageRef (pDrawable), pDamage);
|
damageInsertDamage (getDrawableDamageRef (pDrawable), pDamage);
|
||||||
|
(*pScrPriv->funcs.Register) (pDrawable, pDamage);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1970,6 +2011,11 @@ void
|
||||||
DamageUnregister (DrawablePtr pDrawable,
|
DamageUnregister (DrawablePtr pDrawable,
|
||||||
DamagePtr pDamage)
|
DamagePtr pDamage)
|
||||||
{
|
{
|
||||||
|
ScreenPtr pScreen = pDrawable->pScreen;
|
||||||
|
damageScrPriv(pScreen);
|
||||||
|
|
||||||
|
(*pScrPriv->funcs.Unregister) (pDrawable, pDamage);
|
||||||
|
|
||||||
if (pDrawable->type == DRAWABLE_WINDOW)
|
if (pDrawable->type == DRAWABLE_WINDOW)
|
||||||
{
|
{
|
||||||
WindowPtr pWindow = (WindowPtr) pDrawable;
|
WindowPtr pWindow = (WindowPtr) pDrawable;
|
||||||
|
@ -2004,10 +2050,14 @@ DamageUnregister (DrawablePtr pDrawable,
|
||||||
void
|
void
|
||||||
DamageDestroy (DamagePtr pDamage)
|
DamageDestroy (DamagePtr pDamage)
|
||||||
{
|
{
|
||||||
|
ScreenPtr pScreen = pDamage->pScreen;
|
||||||
|
damageScrPriv(pScreen);
|
||||||
|
|
||||||
if (pDamage->damageDestroy)
|
if (pDamage->damageDestroy)
|
||||||
(*pDamage->damageDestroy) (pDamage, pDamage->closure);
|
(*pDamage->damageDestroy) (pDamage, pDamage->closure);
|
||||||
REGION_UNINIT (pDamage->pDrawable->pScreen, &pDamage->damage);
|
(*pScrPriv->funcs.Destroy) (pDamage);
|
||||||
REGION_UNINIT (pDamage->pDrawable->pScreen, &pDamage->pendingDamage);
|
REGION_UNINIT (pScreen, &pDamage->damage);
|
||||||
|
REGION_UNINIT (pScreen, &pDamage->pendingDamage);
|
||||||
xfree (pDamage);
|
xfree (pDamage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2111,3 +2161,10 @@ DamageSetPostRenderingFunctions(DamagePtr pDamage, DamageReportFunc damageReport
|
||||||
pDamage->damageReportPostRendering = damageReportPostRendering;
|
pDamage->damageReportPostRendering = damageReportPostRendering;
|
||||||
pDamage->damageMarker = damageMarker;
|
pDamage->damageMarker = damageMarker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DamageScreenFuncsPtr
|
||||||
|
DamageGetScreenFuncs (ScreenPtr pScreen)
|
||||||
|
{
|
||||||
|
damageScrPriv(pScreen);
|
||||||
|
return &pScrPriv->funcs;
|
||||||
|
}
|
||||||
|
|
|
@ -43,6 +43,23 @@ typedef void (*DamageDestroyFunc) (DamagePtr pDamage, void *closure);
|
||||||
/* At some point DamageRegionRendered() must be called. */
|
/* At some point DamageRegionRendered() must be called. */
|
||||||
typedef void (*DamageMarkerFunc) (DrawablePtr pDrawable, DamagePtr pDamage, RegionPtr pOldDamage, RegionPtr pRegion, void *closure);
|
typedef void (*DamageMarkerFunc) (DrawablePtr pDrawable, DamagePtr pDamage, RegionPtr pOldDamage, RegionPtr pRegion, void *closure);
|
||||||
|
|
||||||
|
typedef void (*DamageScreenCreateFunc) (DamagePtr);
|
||||||
|
typedef void (*DamageScreenRegisterFunc) (DrawablePtr, DamagePtr);
|
||||||
|
typedef void (*DamageScreenUnregisterFunc) (DrawablePtr, DamagePtr);
|
||||||
|
typedef void (*DamageScreenDestroyFunc) (DamagePtr);
|
||||||
|
|
||||||
|
typedef struct _damageScreenFuncs {
|
||||||
|
DamageScreenCreateFunc Create;
|
||||||
|
DamageScreenRegisterFunc Register;
|
||||||
|
DamageScreenUnregisterFunc Unregister;
|
||||||
|
DamageScreenDestroyFunc Destroy;
|
||||||
|
} DamageScreenFuncsRec, *DamageScreenFuncsPtr;
|
||||||
|
|
||||||
|
extern _X_EXPORT void miDamageCreate (DamagePtr);
|
||||||
|
extern _X_EXPORT void miDamageRegister (DrawablePtr, DamagePtr);
|
||||||
|
extern _X_EXPORT void miDamageUnregister (DrawablePtr, DamagePtr);
|
||||||
|
extern _X_EXPORT void miDamageDestroy (DamagePtr);
|
||||||
|
|
||||||
extern _X_EXPORT Bool
|
extern _X_EXPORT Bool
|
||||||
DamageSetup (ScreenPtr pScreen);
|
DamageSetup (ScreenPtr pScreen);
|
||||||
|
|
||||||
|
@ -105,4 +122,7 @@ extern _X_EXPORT void
|
||||||
DamageSetPostRenderingFunctions(DamagePtr pDamage, DamageReportFunc damageReportPostRendering,
|
DamageSetPostRenderingFunctions(DamagePtr pDamage, DamageReportFunc damageReportPostRendering,
|
||||||
DamageMarkerFunc damageMarker);
|
DamageMarkerFunc damageMarker);
|
||||||
|
|
||||||
|
extern _X_EXPORT DamageScreenFuncsPtr
|
||||||
|
DamageGetScreenFuncs (ScreenPtr);
|
||||||
|
|
||||||
#endif /* _DAMAGE_H_ */
|
#endif /* _DAMAGE_H_ */
|
||||||
|
|
|
@ -53,6 +53,7 @@ typedef struct _damage {
|
||||||
Bool reportAfter;
|
Bool reportAfter;
|
||||||
RegionRec pendingDamage; /* will be flushed post submission at the latest */
|
RegionRec pendingDamage; /* will be flushed post submission at the latest */
|
||||||
RegionRec backupDamage; /* for use with damageMarker */
|
RegionRec backupDamage; /* for use with damageMarker */
|
||||||
|
ScreenPtr pScreen;
|
||||||
} DamageRec;
|
} DamageRec;
|
||||||
|
|
||||||
typedef struct _damageScrPriv {
|
typedef struct _damageScrPriv {
|
||||||
|
@ -75,6 +76,9 @@ typedef struct _damageScrPriv {
|
||||||
GlyphsProcPtr Glyphs;
|
GlyphsProcPtr Glyphs;
|
||||||
AddTrapsProcPtr AddTraps;
|
AddTrapsProcPtr AddTraps;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Table of wrappable function pointers */
|
||||||
|
DamageScreenFuncsRec funcs;
|
||||||
} DamageScrPrivRec, *DamageScrPrivPtr;
|
} DamageScrPrivRec, *DamageScrPrivPtr;
|
||||||
|
|
||||||
typedef struct _damageGCPriv {
|
typedef struct _damageGCPriv {
|
||||||
|
|
Loading…
Reference in New Issue