summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Thum <simon.thum@gmx.de>2009-04-30 12:58:48 +0200
committerPeter Hutterer <peter.hutterer@who-t.net>2009-05-08 14:33:22 +1000
commitee30e1b102d779403eeda97e007b81e85f006a37 (patch)
tree499ebc1ce3abe509ce6fdbbc8c8c3da7c1becb8b
parentd220d6907d1d5138d1528c48b739e77f65616225 (diff)
dix: fix warning in pointer acceleration
newer gcc's warn against how this cast is done (though it eludes me why), and lrintf() is also faster especially on insane processors like the P4 (http://www.mega-nerd.com/FPcast). Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r--dix/ptrveloc.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/dix/ptrveloc.c b/dix/ptrveloc.c
index 1590cfdbf..7c49cf5cb 100644
--- a/dix/ptrveloc.c
+++ b/dix/ptrveloc.c
@@ -988,14 +988,20 @@ acceleratePointerPredictable(
if (dx) {
tmp = mult * fdx + pDev->last.remainder[0];
- *px = (int)roundf(tmp);
+ /* Since it may not be apparent: lrintf() does not offer
+ * strong statements about rounding; however because we
+ * process each axis conditionally, there's no danger
+ * of a toggling remainder. Its lack of guarantees hopefully
+ * makes it faster on the average target. */
+ *px = lrintf(tmp);
pDev->last.remainder[0] = tmp - (float)*px;
}
if (dy) {
tmp = mult * fdy + pDev->last.remainder[1];
- *py = (int)roundf(tmp);
+ *py = lrintf(tmp);
pDev->last.remainder[1] = tmp - (float)*py;
}
+ DebugAccelF("pos (%i | %i) remainders x: %.3f y: %.3f delta x:%.3f y:%.3f\n", *px, *py, pDev->last.remainder[0], pDev->last.remainder[1], fdx, fdy);
}
}
}