summaryrefslogtreecommitdiff
path: root/src/sna/sna_trapezoids.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2014-10-01 10:28:10 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2014-10-01 10:28:51 +0100
commitde7185bbf48ca2f617466b98328d0fdae4df1b44 (patch)
treecfc8fb4a226ce1880ebfbdbcf541bdc1d0280f05 /src/sna/sna_trapezoids.c
parentc6d9303303a5ccb3ec6d072c510c09d6576cb398 (diff)
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 <chris@chris-wilson.co.uk>
Diffstat (limited to 'src/sna/sna_trapezoids.c')
-rw-r--r--src/sna/sna_trapezoids.c12
1 files changed, 10 insertions, 2 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)