damage: Simplify DamageUnregister

You can only register one drawable on a given damage, so there's no
reason to require the caller to specify the drawable, the damage is
enough.  The implementation would do something fairly horrible if you
_did_ pass mismatched drawable and damage, so let's avoid the problem
entirely.

v2: Simplify xf86RotateDestroy even more [anholt]

Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
Adam Jackson 2013-08-26 14:03:51 -04:00
parent 28708a045d
commit d08966227e
6 changed files with 9 additions and 13 deletions

View File

@ -205,7 +205,7 @@ compRedirectWindow(ClientPtr pClient, WindowPtr pWin, int update)
anyMarked = compMarkWindows(pWin, &pLayerWin); anyMarked = compMarkWindows(pWin, &pLayerWin);
if (cw->damageRegistered) { if (cw->damageRegistered) {
DamageUnregister(&pWin->drawable, cw->damage); DamageUnregister(cw->damage);
cw->damageRegistered = FALSE; cw->damageRegistered = FALSE;
} }
cw->update = CompositeRedirectManual; cw->update = CompositeRedirectManual;
@ -638,7 +638,7 @@ compSetParentPixmap(WindowPtr pWin)
CompWindowPtr cw = GetCompWindow(pWin); CompWindowPtr cw = GetCompWindow(pWin);
if (cw->damageRegistered) { if (cw->damageRegistered) {
DamageUnregister(&pWin->drawable, cw->damage); DamageUnregister(cw->damage);
cw->damageRegistered = FALSE; cw->damageRegistered = FALSE;
DamageEmpty(cw->damage); DamageEmpty(cw->damage);
} }

View File

@ -272,14 +272,10 @@ xf86RotateDestroy(xf86CrtcPtr crtc)
screenDrawable = &pScreen->root->drawable; screenDrawable = &pScreen->root->drawable;
/* Free damage structure */ /* Free damage structure */
if (xf86_config->rotation_damage_registered) { if (xf86_config->rotation_damage_registered) {
if (screenDrawable)
DamageUnregister(screenDrawable,
xf86_config->rotation_damage);
xf86_config->rotation_damage_registered = FALSE; xf86_config->rotation_damage_registered = FALSE;
DisableLimitedSchedulingLatency(); DisableLimitedSchedulingLatency();
} }
if (screenDrawable) DamageDestroy(xf86_config->rotation_damage);
DamageDestroy(xf86_config->rotation_damage);
xf86_config->rotation_damage = NULL; xf86_config->rotation_damage = NULL;
} }
} }

View File

@ -146,8 +146,7 @@ static void
miSpriteDisableDamage(ScreenPtr pScreen, miSpriteScreenPtr pScreenPriv) miSpriteDisableDamage(ScreenPtr pScreen, miSpriteScreenPtr pScreenPriv)
{ {
if (pScreenPriv->damageRegistered) { if (pScreenPriv->damageRegistered) {
DamageUnregister(&(pScreen->GetScreenPixmap(pScreen)->drawable), DamageUnregister(pScreenPriv->pDamage);
pScreenPriv->pDamage);
pScreenPriv->damageRegistered = 0; pScreenPriv->damageRegistered = 0;
} }
} }

View File

@ -1843,8 +1843,9 @@ DamageDrawInternal(ScreenPtr pScreen, Bool enable)
} }
void void
DamageUnregister(DrawablePtr pDrawable, DamagePtr pDamage) DamageUnregister(DamagePtr pDamage)
{ {
DrawablePtr pDrawable = pDamage->pDrawable;
ScreenPtr pScreen = pDrawable->pScreen; ScreenPtr pScreen = pDrawable->pScreen;
damageScrPriv(pScreen); damageScrPriv(pScreen);
@ -1888,7 +1889,7 @@ DamageDestroy(DamagePtr pDamage)
damageScrPriv(pScreen); damageScrPriv(pScreen);
if (pDamage->pDrawable) if (pDamage->pDrawable)
DamageUnregister(pDamage->pDrawable, pDamage); DamageUnregister(pDamage);
if (pDamage->damageDestroy) if (pDamage->damageDestroy)
(*pDamage->damageDestroy) (pDamage, pDamage->closure); (*pDamage->damageDestroy) (pDamage, pDamage->closure);

View File

@ -80,7 +80,7 @@ extern _X_EXPORT void
DamageRegister(DrawablePtr pDrawable, DamagePtr pDamage); DamageRegister(DrawablePtr pDrawable, DamagePtr pDamage);
extern _X_EXPORT void extern _X_EXPORT void
DamageUnregister(DrawablePtr pDrawable, DamagePtr pDamage); DamageUnregister(DamagePtr pDamage);
extern _X_EXPORT void extern _X_EXPORT void
DamageDestroy(DamagePtr pDamage); DamageDestroy(DamagePtr pDamage);

View File

@ -219,7 +219,7 @@ shadowRemove(ScreenPtr pScreen, PixmapPtr pPixmap)
shadowBuf(pScreen); shadowBuf(pScreen);
if (pBuf->pPixmap) { if (pBuf->pPixmap) {
DamageUnregister(&pBuf->pPixmap->drawable, pBuf->pDamage); DamageUnregister(pBuf->pDamage);
pBuf->update = 0; pBuf->update = 0;
pBuf->window = 0; pBuf->window = 0;
pBuf->randr = 0; pBuf->randr = 0;