From 1c3d72a2291827fb15e2ef311a571c860e0dba41 Mon Sep 17 00:00:00 2001 From: Jonas Yang Date: Fri, 26 Aug 2011 20:04:39 +0800 Subject: [PATCH] Add (support for) EGL_NV_system_time extension. Change-Id: I62bf0fcb5ccdc77c042b425a42054fb3122575b6 Signed-off-by: Mathias Agopian --- opengl/include/EGL/eglext.h | 14 ++++++++++ opengl/libs/EGL/eglApi.cpp | 48 ++++++++++++++++++++++++++++++++++ opengl/libs/EGL/egl_entries.in | 5 ++++ 3 files changed, 67 insertions(+) diff --git a/opengl/include/EGL/eglext.h b/opengl/include/EGL/eglext.h index 6a199db15..a08932a3d 100644 --- a/opengl/include/EGL/eglext.h +++ b/opengl/include/EGL/eglext.h @@ -242,6 +242,20 @@ typedef EGLBoolean (EGLAPIENTRYP PFNEGLSETSWAPRECTANGLEANDROIDPROC) (EGLDisplay #define EGL_RECORDABLE_ANDROID 0x3142 /* EGLConfig attribute */ #endif +/* EGL_NV_system_time + */ +#ifndef EGL_NV_system_time +#define EGL_NV_system_time 1 +typedef khronos_int64_t EGLint64NV; +typedef khronos_uint64_t EGLuint64NV; +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeFrequencyNV(void); +EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeNV(void); +#endif +typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC)(void); +typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMENVPROC)(void); +#endif + #ifdef __cplusplus } #endif diff --git a/opengl/libs/EGL/eglApi.cpp b/opengl/libs/EGL/eglApi.cpp index 7e8523031..23f67d54a 100644 --- a/opengl/libs/EGL/eglApi.cpp +++ b/opengl/libs/EGL/eglApi.cpp @@ -62,6 +62,7 @@ static char const * const sExtensionString = "EGL_KHR_fence_sync " "EGL_ANDROID_image_native_buffer " "EGL_ANDROID_swap_rectangle " + "EGL_NV_system_time " ; struct extention_map_t { @@ -80,6 +81,10 @@ static const extention_map_t sExtentionMap[] = { (__eglMustCastToProperFunctionPointerType)&eglDestroyImageKHR }, { "eglSetSwapRectangleANDROID", (__eglMustCastToProperFunctionPointerType)&eglSetSwapRectangleANDROID }, + { "eglGetSystemTimeFrequencyNV", + (__eglMustCastToProperFunctionPointerType)&eglGetSystemTimeFrequencyNV }, + { "eglGetSystemTimeNV", + (__eglMustCastToProperFunctionPointerType)&eglGetSystemTimeNV }, }; // accesses protected by sExtensionMapMutex @@ -1454,3 +1459,46 @@ EGLBoolean eglSetSwapRectangleANDROID(EGLDisplay dpy, EGLSurface draw, } return setError(EGL_BAD_DISPLAY, NULL); } + +// ---------------------------------------------------------------------------- +// NVIDIA extensions +// ---------------------------------------------------------------------------- +EGLuint64NV eglGetSystemTimeFrequencyNV() +{ + clearError(); + + if (egl_init_drivers() == EGL_FALSE) { + return setError(EGL_BAD_PARAMETER, EGL_FALSE); + } + + EGLuint64NV ret = 0; + egl_connection_t* const cnx = &gEGLImpl[IMPL_HARDWARE]; + + if (cnx->dso) { + if (cnx->egl.eglGetSystemTimeFrequencyNV) { + return cnx->egl.eglGetSystemTimeFrequencyNV(); + } + } + + return setError(EGL_BAD_DISPLAY, 0);; +} + +EGLuint64NV eglGetSystemTimeNV() +{ + clearError(); + + if (egl_init_drivers() == EGL_FALSE) { + return setError(EGL_BAD_PARAMETER, EGL_FALSE); + } + + EGLuint64NV ret = 0; + egl_connection_t* const cnx = &gEGLImpl[IMPL_HARDWARE]; + + if (cnx->dso) { + if (cnx->egl.eglGetSystemTimeNV) { + return cnx->egl.eglGetSystemTimeNV(); + } + } + + return setError(EGL_BAD_DISPLAY, 0);; +} diff --git a/opengl/libs/EGL/egl_entries.in b/opengl/libs/EGL/egl_entries.in index 63c3c1905..bdd2a7eec 100644 --- a/opengl/libs/EGL/egl_entries.in +++ b/opengl/libs/EGL/egl_entries.in @@ -62,3 +62,8 @@ EGL_ENTRY(EGLBoolean, eglGetSyncAttribKHR, EGLDisplay, EGLSyncKHR, EGLint, EGL_ENTRY(EGLBoolean, eglSetSwapRectangleANDROID, EGLDisplay, EGLSurface, EGLint, EGLint, EGLint, EGLint) EGL_ENTRY(EGLClientBuffer, eglGetRenderBufferANDROID, EGLDisplay, EGLSurface) + +/* NVIDIA extensions */ + +EGL_ENTRY(EGLuint64NV, eglGetSystemTimeFrequencyNV, void) +EGL_ENTRY(EGLuint64NV, eglGetSystemTimeNV, void)