xserver: Branch 'master'

Keith Packard keithp at kemper.freedesktop.org
Fri Oct 9 16:09:23 PDT 2009


 exa/exa_render.c |   34 ++++++++++++++++++++--------------
 1 file changed, 20 insertions(+), 14 deletions(-)

New commits:
commit 55305cf8db7787883bc80b7348eb626e609626f8
Author: Ben Skeggs <bskeggs at redhat.com>
Date:   Fri Oct 9 16:08:15 2009 -0700

    EXA: fix exaGetRGBAFromPixel to not loop forever on PICT_a8 picture
    
    Easily reproducible by running "rendercheck -t fill".
    
    It should be safe to just test against rbits for all colour components
    as we should always have values for r/g/bbits for PICT_FORMAT_COLOR
    formats.
    
    Signed-off-by: Ben Skeggs <bskeggs at redhat.com>
    Signed-off-by: Michel Dänzer <daenzer at vmware
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/exa/exa_render.c b/exa/exa_render.c
index 1c18566..70701a2 100644
--- a/exa/exa_render.c
+++ b/exa/exa_render.c
@@ -204,22 +204,28 @@ exaGetRGBAFromPixel(CARD32	pixel,
     bshift = pFormat->direct.blue;
     ashift = pFormat->direct.alpha;
 
-    *red = ((pixel >> rshift ) & ((1 << rbits) - 1)) << (16 - rbits);
-    while (rbits < 16) {
-	*red |= *red >> rbits;
-	rbits <<= 1;
-    }
+    if (rbits) {
+	*red = ((pixel >> rshift ) & ((1 << rbits) - 1)) << (16 - rbits);
+	while (rbits < 16) {
+	    *red |= *red >> rbits;
+	    rbits <<= 1;
+	}
 
-    *green = ((pixel >> gshift ) & ((1 << gbits) - 1)) << (16 - gbits);
-    while (gbits < 16) {
-	*green |= *green >> gbits;
-	gbits <<= 1;
-    }
+	*green = ((pixel >> gshift ) & ((1 << gbits) - 1)) << (16 - gbits);
+	while (gbits < 16) {
+	    *green |= *green >> gbits;
+	    gbits <<= 1;
+	}
 
-    *blue = ((pixel >> bshift ) & ((1 << bbits) - 1)) << (16 - bbits);
-    while (bbits < 16) {
-	*blue |= *blue >> bbits;
-	bbits <<= 1;
+	*blue = ((pixel >> bshift ) & ((1 << bbits) - 1)) << (16 - bbits);
+	while (bbits < 16) {
+	    *blue |= *blue >> bbits;
+	    bbits <<= 1;
+	}
+    } else {
+	*red = 0x0000;
+	*green = 0x0000;
+	*blue = 0x0000;
     }
 
     if (abits) {


More information about the xorg-commit mailing list