diff options
Diffstat (limited to 'pkgs/development/libraries/mesa/darwin-clock-gettime.patch')
-rw-r--r-- | pkgs/development/libraries/mesa/darwin-clock-gettime.patch | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/pkgs/development/libraries/mesa/darwin-clock-gettime.patch b/pkgs/development/libraries/mesa/darwin-clock-gettime.patch new file mode 100644 index 000000000000..94e90a1c5871 --- /dev/null +++ b/pkgs/development/libraries/mesa/darwin-clock-gettime.patch @@ -0,0 +1,76 @@ +diff --git a/include/c11/threads_posix.h b/include/c11/threads_posix.h +index 45cb6075e6..62937311b9 100644 +--- a/include/c11/threads_posix.h ++++ b/include/c11/threads_posix.h +@@ -36,6 +36,11 @@ + #include <sched.h> + #include <stdint.h> /* for intptr_t */ + ++#ifdef __MACH__ ++#include <mach/clock.h> ++#include <mach/mach.h> ++#endif ++ + /* + Configuration macro: + +@@ -383,12 +388,25 @@ tss_set(tss_t key, void *val) + /*-------------------- 7.25.7 Time functions --------------------*/ + // 7.25.6.1 + #ifndef HAVE_TIMESPEC_GET ++ + static inline int + timespec_get(struct timespec *ts, int base) + { + if (!ts) return 0; + if (base == TIME_UTC) { ++#ifdef __MACH__ ++ if (ts != NULL) { ++ clock_serv_t cclock; ++ mach_timespec_t mts; ++ host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock); ++ clock_get_time(cclock, &mts); ++ mach_port_deallocate(mach_task_self(), cclock); ++ ts->tv_sec = mts.tv_sec; ++ ts->tv_nsec = mts.tv_nsec; ++ } ++#else + clock_gettime(CLOCK_REALTIME, ts); ++#endif + return base; + } + return 0; +diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c +index 1208ebb315..e1378fb1f0 100644 +--- a/src/egl/drivers/dri2/egl_dri2.c ++++ b/src/egl/drivers/dri2/egl_dri2.c +@@ -65,6 +65,11 @@ + #include "util/u_vector.h" + #include "mapi/glapi/glapi.h" + ++#ifdef __MACH__ ++#include <mach/clock.h> ++#include <mach/mach.h> ++#endif ++ + #define NUM_ATTRIBS 12 + + static void +@@ -3092,7 +3097,17 @@ dri2_client_wait_sync(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync, + + /* We override the clock to monotonic when creating the condition + * variable. */ ++#ifdef __MACH__ ++ clock_serv_t cclock; ++ mach_timespec_t mts; ++ host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock); ++ clock_get_time(cclock, &mts); ++ mach_port_deallocate(mach_task_self(), cclock); ++ current.tv_sec = mts.tv_sec; ++ current.tv_nsec = mts.tv_nsec; ++#else + clock_gettime(CLOCK_MONOTONIC, ¤t); ++#endif + + /* calculating when to expire */ + expire.tv_nsec = timeout % 1000000000L; |