diff options
author | marha <marha@users.sourceforge.net> | 2011-04-14 08:39:30 +0000 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2011-04-14 08:39:30 +0000 |
commit | 898081f31f99dc35a1602a607a07d1aaff49ac40 (patch) | |
tree | b2adbc0fd699cc5dc2af141df26130e7874f9369 /xorg-server/miext/damage | |
parent | c1e91b66cbcf91645f65b9d63f115dcb5a441406 (diff) | |
parent | 019fc27ce6dc2a1809107be10d4deb80e0fa436b (diff) | |
download | vcxsrv-898081f31f99dc35a1602a607a07d1aaff49ac40.tar.gz vcxsrv-898081f31f99dc35a1602a607a07d1aaff49ac40.tar.bz2 vcxsrv-898081f31f99dc35a1602a607a07d1aaff49ac40.zip |
svn merge ^/branches/released .
Diffstat (limited to 'xorg-server/miext/damage')
-rw-r--r-- | xorg-server/miext/damage/damage.c | 101 | ||||
-rw-r--r-- | xorg-server/miext/damage/damage.h | 260 |
2 files changed, 183 insertions, 178 deletions
diff --git a/xorg-server/miext/damage/damage.c b/xorg-server/miext/damage/damage.c index d7c244e21..de7b53543 100644 --- a/xorg-server/miext/damage/damage.c +++ b/xorg-server/miext/damage/damage.c @@ -121,54 +121,6 @@ getDrawableDamageRef (DrawablePtr pDrawable) dixLookupPrivateAddr(&(pWindow)->devPrivates, damageWinPrivateKey)
static void
-damageReportDamage (DamagePtr pDamage, RegionPtr pDamageRegion)
-{
- BoxRec tmpBox;
- RegionRec tmpRegion;
- Bool was_empty;
-
- switch (pDamage->damageLevel) {
- case DamageReportRawRegion:
- RegionUnion(&pDamage->damage, &pDamage->damage,
- pDamageRegion);
- (*pDamage->damageReport) (pDamage, pDamageRegion, pDamage->closure);
- break;
- case DamageReportDeltaRegion:
- RegionNull(&tmpRegion);
- RegionSubtract(&tmpRegion, pDamageRegion, &pDamage->damage);
- if (RegionNotEmpty(&tmpRegion)) {
- RegionUnion(&pDamage->damage, &pDamage->damage,
- pDamageRegion);
- (*pDamage->damageReport) (pDamage, &tmpRegion, pDamage->closure);
- }
- RegionUninit(&tmpRegion);
- break;
- case DamageReportBoundingBox:
- tmpBox = *RegionExtents(&pDamage->damage);
- RegionUnion(&pDamage->damage, &pDamage->damage,
- pDamageRegion);
- if (!BOX_SAME (&tmpBox, RegionExtents(&pDamage->damage))) {
- (*pDamage->damageReport) (pDamage, &pDamage->damage,
- pDamage->closure);
- }
- break;
- case DamageReportNonEmpty:
- was_empty = !RegionNotEmpty(&pDamage->damage);
- RegionUnion(&pDamage->damage, &pDamage->damage,
- pDamageRegion);
- if (was_empty && RegionNotEmpty(&pDamage->damage)) {
- (*pDamage->damageReport) (pDamage, &pDamage->damage,
- pDamage->closure);
- }
- break;
- case DamageReportNone:
- RegionUnion(&pDamage->damage, &pDamage->damage,
- pDamageRegion);
- break;
- }
-}
-
-static void
damageReportDamagePostRendering (DamagePtr pDamage, RegionPtr pOldDamage, RegionPtr pDamageRegion)
{
BoxRec tmpBox;
@@ -360,7 +312,7 @@ damageRegionAppend (DrawablePtr pDrawable, RegionPtr pRegion, Bool clip, /* Report damage now, if desired. */
if (!pDamage->reportAfter) {
if (pDamage->damageReport)
- damageReportDamage (pDamage, pDamageRegion);
+ DamageReportDamage (pDamage, pDamageRegion);
else
RegionUnion(&pDamage->damage,
&pDamage->damage, pDamageRegion);
@@ -393,7 +345,7 @@ damageRegionProcessPending (DrawablePtr pDrawable) if (pDamage->reportAfter) {
/* It's possible that there is only interest in postRendering reporting. */
if (pDamage->damageReport)
- damageReportDamage (pDamage, &pDamage->pendingDamage);
+ DamageReportDamage (pDamage, &pDamage->pendingDamage);
else
RegionUnion(&pDamage->damage, &pDamage->damage,
&pDamage->pendingDamage);
@@ -2125,3 +2077,52 @@ DamageGetScreenFuncs (ScreenPtr pScreen) damageScrPriv(pScreen);
return &pScrPriv->funcs;
}
+
+void
+DamageReportDamage (DamagePtr pDamage, RegionPtr pDamageRegion)
+{
+ BoxRec tmpBox;
+ RegionRec tmpRegion;
+ Bool was_empty;
+
+ switch (pDamage->damageLevel) {
+ case DamageReportRawRegion:
+ RegionUnion(&pDamage->damage, &pDamage->damage,
+ pDamageRegion);
+ (*pDamage->damageReport) (pDamage, pDamageRegion, pDamage->closure);
+ break;
+ case DamageReportDeltaRegion:
+ RegionNull(&tmpRegion);
+ RegionSubtract(&tmpRegion, pDamageRegion, &pDamage->damage);
+ if (RegionNotEmpty(&tmpRegion)) {
+ RegionUnion(&pDamage->damage, &pDamage->damage,
+ pDamageRegion);
+ (*pDamage->damageReport) (pDamage, &tmpRegion, pDamage->closure);
+ }
+ RegionUninit(&tmpRegion);
+ break;
+ case DamageReportBoundingBox:
+ tmpBox = *RegionExtents(&pDamage->damage);
+ RegionUnion(&pDamage->damage, &pDamage->damage,
+ pDamageRegion);
+ if (!BOX_SAME (&tmpBox, RegionExtents(&pDamage->damage))) {
+ (*pDamage->damageReport) (pDamage, &pDamage->damage,
+ pDamage->closure);
+ }
+ break;
+ case DamageReportNonEmpty:
+ was_empty = !RegionNotEmpty(&pDamage->damage);
+ RegionUnion(&pDamage->damage, &pDamage->damage,
+ pDamageRegion);
+ if (was_empty && RegionNotEmpty(&pDamage->damage)) {
+ (*pDamage->damageReport) (pDamage, &pDamage->damage,
+ pDamage->closure);
+ }
+ break;
+ case DamageReportNone:
+ RegionUnion(&pDamage->damage, &pDamage->damage,
+ pDamageRegion);
+ break;
+ }
+}
+
diff --git a/xorg-server/miext/damage/damage.h b/xorg-server/miext/damage/damage.h index 067016f38..d2a032986 100644 --- a/xorg-server/miext/damage/damage.h +++ b/xorg-server/miext/damage/damage.h @@ -1,128 +1,132 @@ -/* - * Copyright © 2003 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#ifdef HAVE_DIX_CONFIG_H -#include <dix-config.h> -#endif - -#ifndef _DAMAGE_H_ -#define _DAMAGE_H_ - -typedef struct _damage *DamagePtr; - -typedef enum _damageReportLevel { - DamageReportRawRegion, - DamageReportDeltaRegion, - DamageReportBoundingBox, - DamageReportNonEmpty, - DamageReportNone -} DamageReportLevel; - -typedef void (*DamageReportFunc) (DamagePtr pDamage, RegionPtr pRegion, void *closure); -typedef void (*DamageDestroyFunc) (DamagePtr pDamage, void *closure); -/* It's the responsibility of the driver to duplicate both regions. */ -/* At some point DamageRegionRendered() must be called. */ -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 -DamageSetup (ScreenPtr pScreen); - -extern _X_EXPORT DamagePtr -DamageCreate (DamageReportFunc damageReport, - DamageDestroyFunc damageDestroy, - DamageReportLevel damageLevel, - Bool isInternal, - ScreenPtr pScreen, - void * closure); - -extern _X_EXPORT void -DamageDrawInternal (ScreenPtr pScreen, Bool enable); - -extern _X_EXPORT void -DamageRegister (DrawablePtr pDrawable, - DamagePtr pDamage); - -extern _X_EXPORT void -DamageUnregister (DrawablePtr pDrawable, - DamagePtr pDamage); - -extern _X_EXPORT void -DamageDestroy (DamagePtr pDamage); - -extern _X_EXPORT Bool -DamageSubtract (DamagePtr pDamage, - const RegionPtr pRegion); - -extern _X_EXPORT void -DamageEmpty (DamagePtr pDamage); - -extern _X_EXPORT RegionPtr -DamageRegion (DamagePtr pDamage); - -extern _X_EXPORT RegionPtr -DamagePendingRegion (DamagePtr pDamage); - -/* In case of rendering, call this before the submitting the commands. */ -extern _X_EXPORT void -DamageRegionAppend (DrawablePtr pDrawable, RegionPtr pRegion); - -/* Call this directly after the rendering operation has been submitted. */ -extern _X_EXPORT void -DamageRegionProcessPending (DrawablePtr pDrawable); - -/* Call this some time after rendering is done, only relevant when a damageMarker is provided. */ -extern _X_EXPORT void -DamageRegionRendered (DrawablePtr pDrawable, DamagePtr pDamage, RegionPtr pOldDamage, RegionPtr pRegion); - -/* Avoid using this call, it only exists for API compatibility. */ -extern _X_EXPORT void -DamageDamageRegion (DrawablePtr pDrawable, - const RegionPtr pRegion); - -extern _X_EXPORT void -DamageSetReportAfterOp (DamagePtr pDamage, Bool reportAfter); - -extern _X_EXPORT void -DamageSetPostRenderingFunctions(DamagePtr pDamage, DamageReportFunc damageReportPostRendering, - DamageMarkerFunc damageMarker); - -extern _X_EXPORT DamageScreenFuncsPtr -DamageGetScreenFuncs (ScreenPtr); - -#endif /* _DAMAGE_H_ */ +/*
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Keith Packard not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Keith Packard makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#ifndef _DAMAGE_H_
+#define _DAMAGE_H_
+
+typedef struct _damage *DamagePtr;
+
+typedef enum _damageReportLevel {
+ DamageReportRawRegion,
+ DamageReportDeltaRegion,
+ DamageReportBoundingBox,
+ DamageReportNonEmpty,
+ DamageReportNone
+} DamageReportLevel;
+
+typedef void (*DamageReportFunc) (DamagePtr pDamage, RegionPtr pRegion, void *closure);
+typedef void (*DamageDestroyFunc) (DamagePtr pDamage, void *closure);
+/* It's the responsibility of the driver to duplicate both regions. */
+/* At some point DamageRegionRendered() must be called. */
+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
+DamageSetup (ScreenPtr pScreen);
+
+extern _X_EXPORT DamagePtr
+DamageCreate (DamageReportFunc damageReport,
+ DamageDestroyFunc damageDestroy,
+ DamageReportLevel damageLevel,
+ Bool isInternal,
+ ScreenPtr pScreen,
+ void * closure);
+
+extern _X_EXPORT void
+DamageDrawInternal (ScreenPtr pScreen, Bool enable);
+
+extern _X_EXPORT void
+DamageRegister (DrawablePtr pDrawable,
+ DamagePtr pDamage);
+
+extern _X_EXPORT void
+DamageUnregister (DrawablePtr pDrawable,
+ DamagePtr pDamage);
+
+extern _X_EXPORT void
+DamageDestroy (DamagePtr pDamage);
+
+extern _X_EXPORT Bool
+DamageSubtract (DamagePtr pDamage,
+ const RegionPtr pRegion);
+
+extern _X_EXPORT void
+DamageEmpty (DamagePtr pDamage);
+
+extern _X_EXPORT RegionPtr
+DamageRegion (DamagePtr pDamage);
+
+extern _X_EXPORT RegionPtr
+DamagePendingRegion (DamagePtr pDamage);
+
+/* In case of rendering, call this before the submitting the commands. */
+extern _X_EXPORT void
+DamageRegionAppend (DrawablePtr pDrawable, RegionPtr pRegion);
+
+/* Call this directly after the rendering operation has been submitted. */
+extern _X_EXPORT void
+DamageRegionProcessPending (DrawablePtr pDrawable);
+
+/* Call this some time after rendering is done, only relevant when a damageMarker is provided. */
+extern _X_EXPORT void
+DamageRegionRendered (DrawablePtr pDrawable, DamagePtr pDamage, RegionPtr pOldDamage, RegionPtr pRegion);
+
+/* Call this when you create a new Damage and you wish to send an initial damage message (to it). */
+extern _X_EXPORT void
+DamageReportDamage (DamagePtr pDamage, RegionPtr pDamageRegion);
+
+/* Avoid using this call, it only exists for API compatibility. */
+extern _X_EXPORT void
+DamageDamageRegion (DrawablePtr pDrawable,
+ const RegionPtr pRegion);
+
+extern _X_EXPORT void
+DamageSetReportAfterOp (DamagePtr pDamage, Bool reportAfter);
+
+extern _X_EXPORT void
+DamageSetPostRenderingFunctions(DamagePtr pDamage, DamageReportFunc damageReportPostRendering,
+ DamageMarkerFunc damageMarker);
+
+extern _X_EXPORT DamageScreenFuncsPtr
+DamageGetScreenFuncs (ScreenPtr);
+
+#endif /* _DAMAGE_H_ */
|