I swear this has come up before, but I have no idea why this isn't
implemented.  This basically makes the raw mode unusable since you can
never subtract damage, your only recourse is to destroy the old damage
and make a new one as the old one saturates in area.  I can't see a good
reason to leave it broken.

Bugzilla: https://bugs.freedesktop.org/15347
Signed-off-by: Adam Jackson <[email protected]>
---
 damageext/damageext.c | 28 +++++++++++++---------------
 1 file changed, 13 insertions(+), 15 deletions(-)

diff --git a/damageext/damageext.c b/damageext/damageext.c
index 886f56d..3b1d7ab 100644
--- a/damageext/damageext.c
+++ b/damageext/damageext.c
@@ -405,6 +405,7 @@ ProcDamageSubtract(ClientPtr client)
 {
     REQUEST(xDamageSubtractReq);
     DamageExtPtr pDamageExt;
+    DamagePtr pDamage;
     RegionPtr pRepair;
     RegionPtr pParts;
 
@@ -413,21 +414,18 @@ ProcDamageSubtract(ClientPtr client)
     VERIFY_REGION_OR_NONE(pRepair, stuff->repair, client, DixWriteAccess);
     VERIFY_REGION_OR_NONE(pParts, stuff->parts, client, DixWriteAccess);
 
-    if (pDamageExt->level != DamageReportRawRegion) {
-        DamagePtr pDamage = pDamageExt->pDamage;
-
-        if (pRepair) {
-            if (pParts)
-                RegionIntersect(pParts, DamageRegion(pDamage), pRepair);
-            if (DamageExtSubtract(pDamageExt, pRepair))
-                DamageExtReport(pDamage, DamageRegion(pDamage),
-                                (void *) pDamageExt);
-        }
-        else {
-            if (pParts)
-                RegionCopy(pParts, DamageRegion(pDamage));
-            DamageEmpty(pDamage);
-        }
+    pDamage = pDamageExt->pDamage;
+    if (pRepair) {
+        if (pParts)
+            RegionIntersect(pParts, DamageRegion(pDamage), pRepair);
+        if (DamageExtSubtract(pDamageExt, pRepair))
+            DamageExtReport(pDamage, DamageRegion(pDamage),
+                            (void *) pDamageExt);
+    }
+    else {
+        if (pParts)
+            RegionCopy(pParts, DamageRegion(pDamage));
+        DamageEmpty(pDamage);
     }
 
     return Success;
-- 
2.4.3

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to