From: Ben Skeggs <[email protected]>

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 <[email protected]>
---
 exa/exa_render.c |   34 ++++++++++++++++++++--------------
 1 files changed, 20 insertions(+), 14 deletions(-)

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) {
-- 
1.6.5.rc2

_______________________________________________
xorg-devel mailing list
[email protected]
http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to