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
This commit is contained in:
parent
8893d5bba1
commit
331841b96b
@ -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
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user