b9a21c3c91c47e090316e28d759194e46628ed49vboxsync/*
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * Copyright © 2003 Keith Packard
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync *
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * Permission to use, copy, modify, distribute, and sell this software and its
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * documentation for any purpose is hereby granted without fee, provided that
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * the above copyright notice appear in all copies and that both that
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * copyright notice and this permission notice appear in supporting
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * documentation, and that the name of Keith Packard not be used in
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * advertising or publicity pertaining to distribution of the software without
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * specific, written prior permission. Keith Packard makes no
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * representations about the suitability of this software for any purpose. It
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * is provided "as is" without express or implied warranty.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync *
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * PERFORMANCE OF THIS SOFTWARE.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#ifdef HAVE_DIX_CONFIG_H
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#include <dix-config.h>
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#endif
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#ifndef _DAMAGE_H_
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#define _DAMAGE_H_
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynctypedef struct _damage *DamagePtr;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynctypedef enum _damageReportLevel {
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync DamageReportRawRegion,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync DamageReportDeltaRegion,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync DamageReportBoundingBox,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync DamageReportNonEmpty,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync DamageReportNone
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync} DamageReportLevel;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynctypedef void (*DamageReportFunc) (DamagePtr pDamage, RegionPtr pRegion, void *closure);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynctypedef void (*DamageDestroyFunc) (DamagePtr pDamage, void *closure);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync/* It's the responsibility of the driver to duplicate both regions. */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync/* At some point DamageRegionRendered() must be called. */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynctypedef void (*DamageMarkerFunc) (DrawablePtr pDrawable, DamagePtr pDamage, RegionPtr pOldDamage, RegionPtr pRegion, void *closure);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynctypedef void (*DamageScreenCreateFunc) (DamagePtr);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynctypedef void (*DamageScreenRegisterFunc) (DrawablePtr, DamagePtr);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynctypedef void (*DamageScreenUnregisterFunc) (DrawablePtr, DamagePtr);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynctypedef void (*DamageScreenDestroyFunc) (DamagePtr);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynctypedef struct _damageScreenFuncs {
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync DamageScreenCreateFunc Create;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync DamageScreenRegisterFunc Register;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync DamageScreenUnregisterFunc Unregister;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync DamageScreenDestroyFunc Destroy;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync} DamageScreenFuncsRec, *DamageScreenFuncsPtr;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT void miDamageCreate (DamagePtr);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT void miDamageRegister (DrawablePtr, DamagePtr);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT void miDamageUnregister (DrawablePtr, DamagePtr);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT void miDamageDestroy (DamagePtr);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT Bool
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncDamageSetup (ScreenPtr pScreen);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT DamagePtr
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncDamageCreate (DamageReportFunc damageReport,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync DamageDestroyFunc damageDestroy,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync DamageReportLevel damageLevel,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync Bool isInternal,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync ScreenPtr pScreen,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync void * closure);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT void
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncDamageDrawInternal (ScreenPtr pScreen, Bool enable);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT void
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncDamageRegister (DrawablePtr pDrawable,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync DamagePtr pDamage);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT void
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncDamageUnregister (DrawablePtr pDrawable,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync DamagePtr pDamage);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT void
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncDamageDestroy (DamagePtr pDamage);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT Bool
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncDamageSubtract (DamagePtr pDamage,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync const RegionPtr pRegion);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT void
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncDamageEmpty (DamagePtr pDamage);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT RegionPtr
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncDamageRegion (DamagePtr pDamage);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT RegionPtr
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncDamagePendingRegion (DamagePtr pDamage);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync/* In case of rendering, call this before the submitting the commands. */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT void
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncDamageRegionAppend (DrawablePtr pDrawable, RegionPtr pRegion);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync/* Call this directly after the rendering operation has been submitted. */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT void
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncDamageRegionProcessPending (DrawablePtr pDrawable);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync/* Call this some time after rendering is done, only relevant when a damageMarker is provided. */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT void
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncDamageRegionRendered (DrawablePtr pDrawable, DamagePtr pDamage, RegionPtr pOldDamage, RegionPtr pRegion);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync/* Avoid using this call, it only exists for API compatibility. */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT void
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncDamageDamageRegion (DrawablePtr pDrawable,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync const RegionPtr pRegion);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT void
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncDamageSetReportAfterOp (DamagePtr pDamage, Bool reportAfter);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT void
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncDamageSetPostRenderingFunctions(DamagePtr pDamage, DamageReportFunc damageReportPostRendering,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync DamageMarkerFunc damageMarker);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT DamageScreenFuncsPtr
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncDamageGetScreenFuncs (ScreenPtr);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#endif /* _DAMAGE_H_ */