xserver: Branch 'server-1.9-branch' - 3 commits

Jeremy Huddleston jeremyhu at kemper.freedesktop.org
Sat Nov 13 15:21:16 PST 2010


 composite/compalloc.c         |    2 +-
 composite/compwindow.c        |    4 ++--
 damageext/damageext.c         |    4 ++--
 exa/exa.c                     |    3 +--
 glx/glxdri.c                  |    4 +---
 hw/xfree86/modes/xf86Rotate.c |    2 +-
 mi/miwideline.c               |    2 +-
 os/io.c                       |   19 ++++++++++++++++---
 8 files changed, 25 insertions(+), 15 deletions(-)

New commits:
commit dfda3c696dd72ecc5cc4fa69d8bb4521ba554cf3
Author: Eric Anholt <eric at anholt.net>
Date:   Thu Oct 28 20:46:22 2010 -0700

    Replace usage of DamageRegionAppend with DamageDamageRegion to fix reportAfter.
    
    In all these cases, any rendering implied by this damage has already
    occurred, and we want to get the damage out to the client.  Some of
    the DamageRegionAppend calls were explicitly telling damage to flush
    the reportAfter damage out, but not all.
    
    Bug #30260. Fixes the compiz wallpaper plugin with client damage
    changed to reportAfter.
    
    Signed-off-by: Eric Anholt <eric at anholt.net>
    Reviewed-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>
    (cherry picked from commit f36153e3ef6b13a87d016caab09cc9be274b0dd5)

diff --git a/composite/compalloc.c b/composite/compalloc.c
index d8ccc11..246e4c5 100644
--- a/composite/compalloc.c
+++ b/composite/compalloc.c
@@ -238,7 +238,7 @@ compFreeClientWindow (WindowPtr pWin, XID id)
 	DamageRegister (&pWin->drawable, cw->damage);
 	cw->damageRegistered = TRUE;
 	pWin->redirectDraw = RedirectDrawAutomatic;
-	DamageRegionAppend(&pWin->drawable, &pWin->borderSize);
+	DamageDamageRegion(&pWin->drawable, &pWin->borderSize);
     }
     if (wasMapped && !pWin->mapped)
     {
diff --git a/composite/compwindow.c b/composite/compwindow.c
index 160b764..4dab135 100644
--- a/composite/compwindow.c
+++ b/composite/compwindow.c
@@ -519,7 +519,7 @@ compCopyWindow (WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
 	RegionTranslate(prgnSrc,
 			  pWin->drawable.x - ptOldOrg.x,
 			  pWin->drawable.y - ptOldOrg.y);
-	DamageRegionAppend(&pWin->drawable, prgnSrc);
+	DamageDamageRegion(&pWin->drawable, prgnSrc);
     }
     cs->CopyWindow = pScreen->CopyWindow;
     pScreen->CopyWindow = compCopyWindow;
@@ -598,7 +598,7 @@ compSetRedirectBorderClip (WindowPtr pWin, RegionPtr pRegion)
     /*
      * Report that as damaged so it will be redrawn
      */
-    DamageRegionAppend(&pWin->drawable, &damage);
+    DamageDamageRegion(&pWin->drawable, &damage);
     RegionUninit(&damage);
     /*
      * Save the new border clip region
diff --git a/damageext/damageext.c b/damageext/damageext.c
index f5265dd..4aa0ff3 100644
--- a/damageext/damageext.c
+++ b/damageext/damageext.c
@@ -222,7 +222,7 @@ ProcDamageCreate (ClientPtr client)
     if (pDrawable->type == DRAWABLE_WINDOW)
     {
 	pRegion = &((WindowPtr) pDrawable)->borderClip;
-	DamageRegionAppend(pDrawable, pRegion);
+	DamageDamageRegion(pDrawable, pRegion);
     }
 
     return Success;
@@ -292,7 +292,7 @@ ProcDamageAdd (ClientPtr client)
      * screen coordinates like damage expects.
      */
     RegionTranslate(pRegion, pDrawable->x, pDrawable->y);
-    DamageRegionAppend(pDrawable, pRegion);
+    DamageDamageRegion(pDrawable, pRegion);
     RegionTranslate(pRegion, -pDrawable->x, -pDrawable->y);
 
     return Success;
diff --git a/exa/exa.c b/exa/exa.c
index fc15c24..8adf847 100644
--- a/exa/exa.c
+++ b/exa/exa.c
@@ -159,8 +159,7 @@ exaPixmapDirty (PixmapPtr pPix, int x1, int y1, int x2, int y2)
 	return;
 
     RegionInit(&region, &box, 1);
-    DamageRegionAppend(&pPix->drawable, &region);
-    DamageRegionProcessPending(&pPix->drawable);
+    DamageDamageRegion(&pPix->drawable, &region);
     RegionUninit(&region);
 }
 
diff --git a/glx/glxdri.c b/glx/glxdri.c
index 41482c9..6458ef9 100644
--- a/glx/glxdri.c
+++ b/glx/glxdri.c
@@ -834,9 +834,7 @@ static void __glXReportDamage(__DRIdrawable *driDraw,
 
     RegionInit(&region, (BoxPtr) rects, num_rects);
     RegionTranslate(&region, pDraw->x, pDraw->y);
-    DamageRegionAppend(pDraw, &region);
-    /* This is wrong, this needs a seperate function. */
-    DamageRegionProcessPending(pDraw);
+    DamageDamageRegion(pDraw, &region);
     RegionUninit(&region);
 
     __glXleaveServer(GL_FALSE);
diff --git a/hw/xfree86/modes/xf86Rotate.c b/hw/xfree86/modes/xf86Rotate.c
index fdc38c5..57c3499 100644
--- a/hw/xfree86/modes/xf86Rotate.c
+++ b/hw/xfree86/modes/xf86Rotate.c
@@ -168,7 +168,7 @@ xf86CrtcDamageShadow (xf86CrtcPtr crtc)
     if (damage_box.x2 > pScreen->width) damage_box.x2 = pScreen->width;
     if (damage_box.y2 > pScreen->height) damage_box.y2 = pScreen->height;
     RegionInit(&damage_region, &damage_box, 1);
-    DamageRegionAppend (&(*pScreen->GetScreenPixmap)(pScreen)->drawable,
+    DamageDamageRegion (&(*pScreen->GetScreenPixmap)(pScreen)->drawable,
 			&damage_region);
     RegionUninit(&damage_region);
     crtc->shadowClear = TRUE;
commit 2e08f1d4b7c0c43c90042a71825992f40388c1fb
Author: Aaron Plattner <aplattner at nvidia.com>
Date:   Mon Oct 25 22:01:32 2010 -0700

    os: Fix BigReq ignoring when another request is pending
    
    Commit cf88363db0ebb42df7cc286b85d30d7898aea840 fixed the handling of
    BigReq requests that are way too large and handles the case where the
    read() syscall returns a short read.  However, it neglected to handle
    the case where it returns a long read, which happens when the client
    has another request in the queue after the bogus large one.
    
    Handle the long read case by subtracting the smaller of 'needed' and
    'gotnow' from oci->ignoreBytes.  If needed < gotnow, simply subtract
    the two, leaving gotnow equal to the number of extra bytes read.
    Since the code immediately following the (oci->ignoreBytes > 0) block
    tries to handle the next request, advance oci->bufptr immediately
    instead of setting oci->lenLastReq and letting the next call to
    ReadRequestFromClient do it.
    
    Fixes the XTS pChangeKeyboardMapping-3 test.
    
             CASES TESTS  PASS UNSUP UNTST NOTIU  WARN   FIP  FAIL UNRES  UNIN ABORT
    -Xproto    122   389   367     2    19     0     0     0     1     0     0     0
    +Xproto    122   389   368     2    19     0     0     0     0     0     0     0
    
    Signed-off-by: Aaron Plattner <aplattner at nvidia.com>
    Reviewed-by: Adam Jackson <ajax at redhat.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>
    (cherry picked from commit c80c41767eb101e9dbd8393d8cca7764b4e248a4)

diff --git a/os/io.c b/os/io.c
index fb9f762..4210238 100644
--- a/os/io.c
+++ b/os/io.c
@@ -410,16 +410,29 @@ ReadRequestFromClient(ClientPtr client)
 	else
 	    needed = sizeof(xReq);
     }
-    oci->lenLastReq = needed;
 
     /* If there are bytes to ignore, ignore them now. */
 
     if (oci->ignoreBytes > 0) {
 	assert(needed == oci->ignoreBytes || needed == oci->size);
-	oci->ignoreBytes -= gotnow;
-	needed = gotnow = 0;
+	/*
+	 * The _XSERVTransRead call above may return more or fewer bytes than we
+	 * want to ignore.  Ignore the smaller of the two sizes.
+	 */
+	if (gotnow < needed) {
+	    oci->ignoreBytes -= gotnow;
+	    oci->bufptr += gotnow;
+	    gotnow = 0;
+	} else {
+	    oci->ignoreBytes -= needed;
+	    oci->bufptr += needed;
+	    gotnow -= needed;
+	}
+	needed = 0;
     }
 
+    oci->lenLastReq = needed;
+
     /*
      *  Check to see if client has at least one whole request in the
      *  buffer beyond the request we're returning to the caller.
commit 8452392c4bffd424458a82a381ea2496e6556e7e
Author: Siddhesh Poyarekar <siddhesh.poyarekar at gmail.com>
Date:   Tue Oct 26 09:11:53 2010 +0530

    mi: Integer overflow for dashed lines longer than 46340. #31093
    
    Lines of length greater than 46340 can be drawn with one of the
    coordinates being negative. However for dashed lines, miPolyBuildPoly
    overflows the int type when setting up edges for a section of the
    dashed line. This results in the dashed segments not being drawn at
    all.
    
    Signed-off-by: Siddhesh Poyarekar <siddhesh.poyarekar at gmail.com>
    Reviewed-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>
    (cherry picked from commit be7cf14c365c8ee0d69c4335e01316bcfcba69a4)

diff --git a/mi/miwideline.c b/mi/miwideline.c
index b11b40b..bc5ee74 100644
--- a/mi/miwideline.c
+++ b/mi/miwideline.c
@@ -403,7 +403,7 @@ miPolyBuildPoly (
     i = top;
     j = StepAround (top, -1, count);
 
-    if (slopes[j].dy * slopes[i].dx > slopes[i].dy * slopes[j].dx)
+    if ((int64_t)slopes[j].dy * slopes[i].dx > (int64_t)slopes[i].dy * slopes[j].dx)
     {
 	clockwise = -1;
 	slopeoff = -1;


More information about the xorg-commit mailing list