1706f2543Smrg/* 2706f2543Smrg * Copyright © 2003 Keith Packard 3706f2543Smrg * 4706f2543Smrg * Permission to use, copy, modify, distribute, and sell this software and its 5706f2543Smrg * documentation for any purpose is hereby granted without fee, provided that 6706f2543Smrg * the above copyright notice appear in all copies and that both that 7706f2543Smrg * copyright notice and this permission notice appear in supporting 8706f2543Smrg * documentation, and that the name of Keith Packard not be used in 9706f2543Smrg * advertising or publicity pertaining to distribution of the software without 10706f2543Smrg * specific, written prior permission. Keith Packard makes no 11706f2543Smrg * representations about the suitability of this software for any purpose. It 12706f2543Smrg * is provided "as is" without express or implied warranty. 13706f2543Smrg * 14706f2543Smrg * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 15706f2543Smrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 16706f2543Smrg * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR 17706f2543Smrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 18706f2543Smrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 19706f2543Smrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 20706f2543Smrg * PERFORMANCE OF THIS SOFTWARE. 21706f2543Smrg */ 22706f2543Smrg 23706f2543Smrg#ifdef HAVE_DIX_CONFIG_H 24706f2543Smrg#include <dix-config.h> 25706f2543Smrg#endif 26706f2543Smrg 27706f2543Smrg#ifndef _DAMAGE_H_ 28706f2543Smrg#define _DAMAGE_H_ 29706f2543Smrg 30706f2543Smrgtypedef struct _damage *DamagePtr; 31706f2543Smrg 32706f2543Smrgtypedef enum _damageReportLevel { 33706f2543Smrg DamageReportRawRegion, 34706f2543Smrg DamageReportDeltaRegion, 35706f2543Smrg DamageReportBoundingBox, 36706f2543Smrg DamageReportNonEmpty, 37706f2543Smrg DamageReportNone 38706f2543Smrg} DamageReportLevel; 39706f2543Smrg 40706f2543Smrgtypedef void (*DamageReportFunc) (DamagePtr pDamage, RegionPtr pRegion, void *closure); 41706f2543Smrgtypedef void (*DamageDestroyFunc) (DamagePtr pDamage, void *closure); 42706f2543Smrg/* It's the responsibility of the driver to duplicate both regions. */ 43706f2543Smrg/* At some point DamageRegionRendered() must be called. */ 44706f2543Smrgtypedef void (*DamageMarkerFunc) (DrawablePtr pDrawable, DamagePtr pDamage, RegionPtr pOldDamage, RegionPtr pRegion, void *closure); 45706f2543Smrg 46706f2543Smrgtypedef void (*DamageScreenCreateFunc) (DamagePtr); 47706f2543Smrgtypedef void (*DamageScreenRegisterFunc) (DrawablePtr, DamagePtr); 48706f2543Smrgtypedef void (*DamageScreenUnregisterFunc) (DrawablePtr, DamagePtr); 49706f2543Smrgtypedef void (*DamageScreenDestroyFunc) (DamagePtr); 50706f2543Smrg 51706f2543Smrgtypedef struct _damageScreenFuncs { 52706f2543Smrg DamageScreenCreateFunc Create; 53706f2543Smrg DamageScreenRegisterFunc Register; 54706f2543Smrg DamageScreenUnregisterFunc Unregister; 55706f2543Smrg DamageScreenDestroyFunc Destroy; 56706f2543Smrg} DamageScreenFuncsRec, *DamageScreenFuncsPtr; 57706f2543Smrg 58706f2543Smrgextern _X_EXPORT void miDamageCreate (DamagePtr); 59706f2543Smrgextern _X_EXPORT void miDamageRegister (DrawablePtr, DamagePtr); 60706f2543Smrgextern _X_EXPORT void miDamageUnregister (DrawablePtr, DamagePtr); 61706f2543Smrgextern _X_EXPORT void miDamageDestroy (DamagePtr); 62706f2543Smrg 63706f2543Smrgextern _X_EXPORT Bool 64706f2543SmrgDamageSetup (ScreenPtr pScreen); 65706f2543Smrg 66706f2543Smrgextern _X_EXPORT DamagePtr 67706f2543SmrgDamageCreate (DamageReportFunc damageReport, 68706f2543Smrg DamageDestroyFunc damageDestroy, 69706f2543Smrg DamageReportLevel damageLevel, 70706f2543Smrg Bool isInternal, 71706f2543Smrg ScreenPtr pScreen, 72706f2543Smrg void * closure); 73706f2543Smrg 74706f2543Smrgextern _X_EXPORT void 75706f2543SmrgDamageDrawInternal (ScreenPtr pScreen, Bool enable); 76706f2543Smrg 77706f2543Smrgextern _X_EXPORT void 78706f2543SmrgDamageRegister (DrawablePtr pDrawable, 79706f2543Smrg DamagePtr pDamage); 80706f2543Smrg 81706f2543Smrgextern _X_EXPORT void 82706f2543SmrgDamageUnregister (DrawablePtr pDrawable, 83706f2543Smrg DamagePtr pDamage); 84706f2543Smrg 85706f2543Smrgextern _X_EXPORT void 86706f2543SmrgDamageDestroy (DamagePtr pDamage); 87706f2543Smrg 88706f2543Smrgextern _X_EXPORT Bool 89706f2543SmrgDamageSubtract (DamagePtr pDamage, 90706f2543Smrg const RegionPtr pRegion); 91706f2543Smrg 92706f2543Smrgextern _X_EXPORT void 93706f2543SmrgDamageEmpty (DamagePtr pDamage); 94706f2543Smrg 95706f2543Smrgextern _X_EXPORT RegionPtr 96706f2543SmrgDamageRegion (DamagePtr pDamage); 97706f2543Smrg 98706f2543Smrgextern _X_EXPORT RegionPtr 99706f2543SmrgDamagePendingRegion (DamagePtr pDamage); 100706f2543Smrg 101706f2543Smrg/* In case of rendering, call this before the submitting the commands. */ 102706f2543Smrgextern _X_EXPORT void 103706f2543SmrgDamageRegionAppend (DrawablePtr pDrawable, RegionPtr pRegion); 104706f2543Smrg 105706f2543Smrg/* Call this directly after the rendering operation has been submitted. */ 106706f2543Smrgextern _X_EXPORT void 107706f2543SmrgDamageRegionProcessPending (DrawablePtr pDrawable); 108706f2543Smrg 109706f2543Smrg/* Call this some time after rendering is done, only relevant when a damageMarker is provided. */ 110706f2543Smrgextern _X_EXPORT void 111706f2543SmrgDamageRegionRendered (DrawablePtr pDrawable, DamagePtr pDamage, RegionPtr pOldDamage, RegionPtr pRegion); 112706f2543Smrg 113706f2543Smrg/* Avoid using this call, it only exists for API compatibility. */ 114706f2543Smrgextern _X_EXPORT void 115706f2543SmrgDamageDamageRegion (DrawablePtr pDrawable, 116706f2543Smrg const RegionPtr pRegion); 117706f2543Smrg 118706f2543Smrgextern _X_EXPORT void 119706f2543SmrgDamageSetReportAfterOp (DamagePtr pDamage, Bool reportAfter); 120706f2543Smrg 121706f2543Smrgextern _X_EXPORT void 122706f2543SmrgDamageSetPostRenderingFunctions(DamagePtr pDamage, DamageReportFunc damageReportPostRendering, 123706f2543Smrg DamageMarkerFunc damageMarker); 124706f2543Smrg 125706f2543Smrgextern _X_EXPORT DamageScreenFuncsPtr 126706f2543SmrgDamageGetScreenFuncs (ScreenPtr); 127706f2543Smrg 128706f2543Smrg#endif /* _DAMAGE_H_ */ 129