diff options
author | Jamie Gennis <jgennis@google.com> | 2012-09-06 14:52:00 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-09-06 16:11:37 -0700 |
commit | 331841b96b92646c93c87627c03f77b892f711cd (patch) | |
tree | 2fe3a05c800a44e2f6fd7d94d380fe23ee58b7d8 | |
parent | 8893d5bba1191b0dc9db1432868d8dc64de606ad (diff) | |
download | frameworks_native-331841b96b92646c93c87627c03f77b892f711cd.zip frameworks_native-331841b96b92646c93c87627c03f77b892f711cd.tar.gz frameworks_native-331841b96b92646c93c87627c03f77b892f711cd.tar.bz2 |
EGL: add the native_fence_sync extension
This change adds support for the EGL_ANDROID_native_fence_sync extension to the
Android EGL layer. It also fixes a couple minor issues with the extension spec.
Change-Id: Ic8829d21f37b701f33aa9c72c3d25e88e03fa3cd
-rw-r--r-- | opengl/include/EGL/eglext.h | 14 | ||||
-rw-r--r-- | opengl/libs/EGL/eglApi.cpp | 16 | ||||
-rw-r--r-- | opengl/libs/EGL/egl_display.cpp | 1 | ||||
-rw-r--r-- | opengl/libs/EGL/egl_entries.in | 1 | ||||
-rw-r--r-- | opengl/specs/EGL_ANDROID_native_fence_sync.txt | 6 |
5 files changed, 34 insertions, 4 deletions
diff --git a/opengl/include/EGL/eglext.h b/opengl/include/EGL/eglext.h index 2d41aa7..7274854 100644 --- a/opengl/include/EGL/eglext.h +++ b/opengl/include/EGL/eglext.h @@ -270,6 +270,20 @@ typedef EGLBoolean (EGLAPIENTRYP PFEGLHIBERNATEPROCESSIMGPROC)(void); typedef EGLBoolean (EGLAPIENTRYP PFEGLAWAKENPROCESSIMGPROC)(void); #endif +/* EGL_ANDROID_native_fence_sync + */ +#ifndef EGL_ANDROID_native_fence_sync +#define EGL_ANDROID_native_fence_sync 1 +#define EGL_SYNC_NATIVE_FENCE_ANDROID 0x3144 +#define EGL_SYNC_NATIVE_FENCE_FD_ANDROID 0x3145 +#define EGL_NO_NATIVE_FENCE_FD_ANDROID -1 +#define EGL_SYNC_NATIVE_FENCE_SIGNALED_ANDROID 0x3146 +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLint EGLAPIENTRY eglDupNativeFenceFDANDROID(EGLDisplay dpy, EGLSyncKHR sync); +#endif +typedef EGLint (EGLAPIENTRYP PFNEGLDUPNATIVEFENCEFDANDROID) (EGLDisplay dpy, EGLSyncKHR sync); +#endif + #ifdef __cplusplus } #endif diff --git a/opengl/libs/EGL/eglApi.cpp b/opengl/libs/EGL/eglApi.cpp index 1bc4eb7..014ac61 100644 --- a/opengl/libs/EGL/eglApi.cpp +++ b/opengl/libs/EGL/eglApi.cpp @@ -652,6 +652,7 @@ __eglMustCastToProperFunctionPointerType eglGetProcAddress(const char *procname) // These extensions should not be exposed to applications. They're used // internally by the Android EGL layer. if (!strcmp(procname, "eglSetBlobCacheFuncsANDROID") || + !strcmp(procname, "eglDupNativeFenceFDANDROID") || !strcmp(procname, "eglHibernateProcessIMG") || !strcmp(procname, "eglAwakenProcessIMG")) { return NULL; @@ -1190,7 +1191,20 @@ EGLBoolean eglGetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync, // ANDROID extensions // ---------------------------------------------------------------------------- -/* ANDROID extensions entry-point go here */ +EGLint eglDupNativeFenceFDANDROID(EGLDisplay dpy, EGLSyncKHR sync) +{ + clearError(); + + const egl_display_ptr dp = validate_display(dpy); + if (!dp) return EGL_NO_NATIVE_FENCE_FD_ANDROID; + + EGLint result = EGL_NO_NATIVE_FENCE_FD_ANDROID; + egl_connection_t* const cnx = &gEGLImpl; + if (cnx->dso && cnx->egl.eglDupNativeFenceFDANDROID) { + result = cnx->egl.eglDupNativeFenceFDANDROID(dp->disp.dpy, sync); + } + return result; +} // ---------------------------------------------------------------------------- // NVIDIA extensions diff --git a/opengl/libs/EGL/egl_display.cpp b/opengl/libs/EGL/egl_display.cpp index 80072ab..371df43 100644 --- a/opengl/libs/EGL/egl_display.cpp +++ b/opengl/libs/EGL/egl_display.cpp @@ -59,6 +59,7 @@ static char const * const sExtensionString = // extensions not exposed to applications but used by the ANDROID system // "EGL_ANDROID_recordable " // mandatory // "EGL_ANDROID_blob_cache " // strongly recommended +// "EGL_ANDROID_native_fence_sync " // strongly recommended // "EGL_IMG_hibernate_process " // optional extern void initEglTraceLevel(); diff --git a/opengl/libs/EGL/egl_entries.in b/opengl/libs/EGL/egl_entries.in index 9feb716..4cbd55f 100644 --- a/opengl/libs/EGL/egl_entries.in +++ b/opengl/libs/EGL/egl_entries.in @@ -62,6 +62,7 @@ EGL_ENTRY(EGLBoolean, eglGetSyncAttribKHR, EGLDisplay, EGLSyncKHR, EGLint, EGL_ENTRY(EGLBoolean, eglSetSwapRectangleANDROID, EGLDisplay, EGLSurface, EGLint, EGLint, EGLint, EGLint) EGL_ENTRY(EGLClientBuffer, eglGetRenderBufferANDROID, EGLDisplay, EGLSurface) +EGL_ENTRY(EGLint, eglDupNativeFenceFDANDROID, EGLDisplay, EGLSyncKHR) /* NVIDIA extensions */ diff --git a/opengl/specs/EGL_ANDROID_native_fence_sync.txt b/opengl/specs/EGL_ANDROID_native_fence_sync.txt index b05857c..8273be4 100644 --- a/opengl/specs/EGL_ANDROID_native_fence_sync.txt +++ b/opengl/specs/EGL_ANDROID_native_fence_sync.txt @@ -74,7 +74,7 @@ New Tokens Accepted by the <attrib_list> parameter of eglCreateSyncKHR, and returned by eglDupNativeFenceFDANDROID in the event of an error: - EGL_NO_NATIVE_FENCE_ANDROID -1 + EGL_NO_NATIVE_FENCE_FD_ANDROID -1 Returned in <value> when eglGetSyncAttribKHR is called with <attribute> EGL_SYNC_CONDITION_KHR: @@ -90,7 +90,7 @@ Changes to Chapter 3 of the EGL 1.2 Specification (EGL Functions and Errors) object is created. In this case the EGL_SYNC_NATIVE_FENCE_FD_ANDROID attribute may optionally be specified. If this attribute is specified, it must be set to either a file descriptor that refers to a native fence - object or to the value EGL_NO_NATIVE_FENCE_ANDROID. + object or to the value EGL_NO_NATIVE_FENCE_FD_ANDROID. The default values for the EGL native fence sync object attributes are as follows: @@ -202,7 +202,7 @@ Changes to Chapter 3 of the EGL 1.2 Specification (EGL Functions and Errors) The command EGLint eglDupNativeFenceFDANDROID( - EGLdisplay dpy, + EGLDisplay dpy, EGLSyncKHR sync); duplicates the file descriptor stored in the |