Module: Mesa Branch: master Commit: 7fb7287ce72066db7dffd918226bf15c3131a871 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7fb7287ce72066db7dffd918226bf15c3131a871
Author: Frank Richter <frank.rich...@dynardo.de> Date: Tue Aug 15 15:46:35 2017 +0200 gallium/os: fix os_time_get_nano() to roll over less Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=102241 Cc: mesa-sta...@lists.freedesktop.org Reviewed-by: Brian Paul <bri...@vmware.com> Reviewed-by: Jose Fonseca <jfons...@vmware.com> --- src/gallium/auxiliary/os/os_time.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/gallium/auxiliary/os/os_time.c b/src/gallium/auxiliary/os/os_time.c index e169139034..e4a1cae641 100644 --- a/src/gallium/auxiliary/os/os_time.c +++ b/src/gallium/auxiliary/os/os_time.c @@ -69,10 +69,17 @@ os_time_get_nano(void) static LARGE_INTEGER frequency; LARGE_INTEGER counter; + int64_t secs, nanosecs; if(!frequency.QuadPart) QueryPerformanceFrequency(&frequency); QueryPerformanceCounter(&counter); - return counter.QuadPart*INT64_C(1000000000)/frequency.QuadPart; + /* Compute seconds and nanoseconds parts separately to + * reduce severity of precision loss. + */ + secs = counter.QuadPart / frequency.QuadPart; + nanosecs = (counter.QuadPart % frequency.QuadPart) * INT64_C(1000000000) + / frequency.QuadPart; + return secs*INT64_C(1000000000) + nanosecs; #else _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit