From de7185bbf48ca2f617466b98328d0fdae4df1b44 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Wed, 1 Oct 2014 10:28:10 +0100 Subject: [PATCH] sna/trapezoids: Fix comparison on right edge of trapezoids We need to compare the fixed ceiling rather the floor for accuracy. Signed-off-by: Chris Wilson --- src/sna/sna_trapezoids.c | 12 ++++++++++-- src/sna/sna_trapezoids.h | 6 ++++++ src/sna/sna_trapezoids_imprecise.c | 6 ------ src/sna/sna_trapezoids_mono.c | 6 ------ src/sna/sna_trapezoids_precise.c | 6 ------ 5 files changed, 16 insertions(+), 20 deletions(-) diff --git a/src/sna/sna_trapezoids.c b/src/sna/sna_trapezoids.c index 2c1fa655..d9390db4 100644 --- a/src/sna/sna_trapezoids.c +++ b/src/sna/sna_trapezoids.c @@ -75,8 +75,16 @@ bool trapezoids_bounds(int n, const xTrapezoid *t, BoxPtr box) do { xFixed fx1, fx2, v; - if (!xTrapezoidValid(t)) + if (!xTrapezoidValid(t)) { + __DBG(("%s: skipping invalid trapezoid: top=%d, bottom=%d, left=(%d, %d), (%d, %d), right=(%d, %d), (%d, %d)\n", + __FUNCTION__, + t->top, t->bottom, + t->left.p1.x, t->left.p1.y, + t->left.p2.x, t->left.p2.y, + t->right.p1.x, t->right.p1.y, + t->right.p2.x, t->right.p2.y)); continue; + } if (t->top < y1) y1 = t->top; @@ -104,7 +112,7 @@ bool trapezoids_bounds(int n, const xTrapezoid *t, BoxPtr box) } if (((x2 - t->right.p1.x) | (x2 - t->right.p2.x)) < 0) { - if (pixman_fixed_floor(t->right.p1.x) == pixman_fixed_floor(t->right.p2.x)) { + if (pixman_fixed_ceil(t->right.p1.x) == pixman_fixed_ceil(t->right.p2.x)) { x2 = pixman_fixed_ceil(t->right.p1.x); } else { if (t->right.p1.y == t->top) diff --git a/src/sna/sna_trapezoids.h b/src/sna/sna_trapezoids.h index e8f7f3f4..3cddcfeb 100644 --- a/src/sna/sna_trapezoids.h +++ b/src/sna/sna_trapezoids.h @@ -13,6 +13,12 @@ #define NO_IMPRECISE 0 #define NO_PRECISE 0 +#if 0 +#define __DBG DBG +#else +#define __DBG(x) +#endif + bool composite_aligned_boxes(struct sna *sna, CARD8 op, diff --git a/src/sna/sna_trapezoids_imprecise.c b/src/sna/sna_trapezoids_imprecise.c index 82306651..ea2cb94a 100644 --- a/src/sna/sna_trapezoids_imprecise.c +++ b/src/sna/sna_trapezoids_imprecise.c @@ -42,12 +42,6 @@ #undef SAMPLES_X #undef SAMPLES_Y -#if 0 -#define __DBG DBG -#else -#define __DBG(x) -#endif - /* TODO: Emit unantialiased and MSAA triangles. */ #ifndef MAX diff --git a/src/sna/sna_trapezoids_mono.c b/src/sna/sna_trapezoids_mono.c index d53e5359..7f348292 100644 --- a/src/sna/sna_trapezoids_mono.c +++ b/src/sna/sna_trapezoids_mono.c @@ -39,12 +39,6 @@ #include -#if 0 -#define __DBG(x) LogF x -#else -#define __DBG(x) -#endif - struct quorem { int32_t quo; int32_t rem; diff --git a/src/sna/sna_trapezoids_precise.c b/src/sna/sna_trapezoids_precise.c index 85efb2a4..c595bfdd 100644 --- a/src/sna/sna_trapezoids_precise.c +++ b/src/sna/sna_trapezoids_precise.c @@ -42,12 +42,6 @@ #undef FAST_SAMPLES_X #undef FAST_SAMPLES_Y -#if 0 -#define __DBG DBG -#else -#define __DBG(x) -#endif - /* TODO: Emit unantialiased and MSAA triangles. */ #ifndef MAX