[Pixman] [PATCH] Fix rounding for DIV_UNc()

Søren Sandmann sandmann at cs.au.dk
Fri Jan 6 07:10:10 PST 2012


From: Søren Sandmann Pedersen <ssp at redhat.com>

We need to compute floor (a/b * 255 + 0.5), not floor (a / b * 255),
so add b/2 to the numerator in the DIV_UNc() macro.
---
 pixman/pixman-combine.h.template |    2 +-
 test/blitters-test.c             |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/pixman/pixman-combine.h.template b/pixman/pixman-combine.h.template
index 53afcd2..20f784b 100644
--- a/pixman/pixman-combine.h.template
+++ b/pixman/pixman-combine.h.template
@@ -28,7 +28,7 @@
     ((t) = (a) * (comp2_t)(b) + ONE_HALF, ((((t) >> G_SHIFT ) + (t) ) >> G_SHIFT ))
 
 #define DIV_UNc(a, b)							\
-    (((comp2_t) (a) * MASK) / (b))
+    (((comp2_t) (a) * MASK + ((b) / 2)) / (b))
 
 #define ADD_UNc(x, y, t)				     \
     ((t) = (x) + (y),					     \
diff --git a/test/blitters-test.c b/test/blitters-test.c
index fd62c67..feea308 100644
--- a/test/blitters-test.c
+++ b/test/blitters-test.c
@@ -424,6 +424,6 @@ main (int argc, const char *argv[])
     }
 
     return fuzzer_test_main("blitters", 2000000,
-			    0x3EDA4108,
+			    0xA364B5BF,
 			    test_composite, argc, argv);
 }
-- 
1.7.4



More information about the Pixman mailing list