Skip to content

Commit

Permalink
EGL: add the native_fence_sync extension
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Jamie Gennis authored and Android (Google) Code Review committed Sep 6, 2012
1 parent 8893d5b commit 331841b
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 4 deletions.
14 changes: 14 additions & 0 deletions opengl/include/EGL/eglext.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
16 changes: 15 additions & 1 deletion opengl/libs/EGL/eglApi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions opengl/libs/EGL/egl_display.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
1 change: 1 addition & 0 deletions opengl/libs/EGL/egl_entries.in
Original file line number Diff line number Diff line change
Expand Up @@ -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 */

Expand Down
6 changes: 3 additions & 3 deletions opengl/specs/EGL_ANDROID_native_fence_sync.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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:
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 331841b

Please sign in to comment.