Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 331841b9 authored by Jamie Gennis's avatar Jamie Gennis Committed by Android (Google) Code Review
Browse files

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
parent 8893d5bb
Loading
Loading
Loading
Loading
+14 −0
Original line number Original line Diff line number Diff line
@@ -270,6 +270,20 @@ typedef EGLBoolean (EGLAPIENTRYP PFEGLHIBERNATEPROCESSIMGPROC)(void);
typedef EGLBoolean (EGLAPIENTRYP PFEGLAWAKENPROCESSIMGPROC)(void);
typedef EGLBoolean (EGLAPIENTRYP PFEGLAWAKENPROCESSIMGPROC)(void);
#endif
#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
#ifdef __cplusplus
}
}
#endif
#endif
+15 −1
Original line number Original line Diff line number Diff line
@@ -652,6 +652,7 @@ __eglMustCastToProperFunctionPointerType eglGetProcAddress(const char *procname)
    // These extensions should not be exposed to applications. They're used
    // These extensions should not be exposed to applications. They're used
    // internally by the Android EGL layer.
    // internally by the Android EGL layer.
    if (!strcmp(procname, "eglSetBlobCacheFuncsANDROID") ||
    if (!strcmp(procname, "eglSetBlobCacheFuncsANDROID") ||
        !strcmp(procname, "eglDupNativeFenceFDANDROID") ||
        !strcmp(procname, "eglHibernateProcessIMG") ||
        !strcmp(procname, "eglHibernateProcessIMG") ||
        !strcmp(procname, "eglAwakenProcessIMG")) {
        !strcmp(procname, "eglAwakenProcessIMG")) {
        return NULL;
        return NULL;
@@ -1190,7 +1191,20 @@ EGLBoolean eglGetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync,
// ANDROID extensions
// 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
// NVIDIA extensions
+1 −0
Original line number Original line Diff line number Diff line
@@ -59,6 +59,7 @@ static char const * const sExtensionString =
// extensions not exposed to applications but used by the ANDROID system
// extensions not exposed to applications but used by the ANDROID system
//      "EGL_ANDROID_recordable "               // mandatory
//      "EGL_ANDROID_recordable "               // mandatory
//      "EGL_ANDROID_blob_cache "               // strongly recommended
//      "EGL_ANDROID_blob_cache "               // strongly recommended
//      "EGL_ANDROID_native_fence_sync "        // strongly recommended
//      "EGL_IMG_hibernate_process "            // optional
//      "EGL_IMG_hibernate_process "            // optional


extern void initEglTraceLevel();
extern void initEglTraceLevel();
+1 −0
Original line number Original line Diff line number Diff line
@@ -62,6 +62,7 @@ EGL_ENTRY(EGLBoolean, eglGetSyncAttribKHR, EGLDisplay, EGLSyncKHR, EGLint,


EGL_ENTRY(EGLBoolean, eglSetSwapRectangleANDROID, EGLDisplay, EGLSurface, EGLint, EGLint, EGLint, EGLint)
EGL_ENTRY(EGLBoolean, eglSetSwapRectangleANDROID, EGLDisplay, EGLSurface, EGLint, EGLint, EGLint, EGLint)
EGL_ENTRY(EGLClientBuffer, eglGetRenderBufferANDROID, EGLDisplay, EGLSurface)
EGL_ENTRY(EGLClientBuffer, eglGetRenderBufferANDROID, EGLDisplay, EGLSurface)
EGL_ENTRY(EGLint, eglDupNativeFenceFDANDROID, EGLDisplay, EGLSyncKHR)


/* NVIDIA extensions */
/* NVIDIA extensions */


+3 −3
Original line number Original line Diff line number Diff line
@@ -74,7 +74,7 @@ New Tokens
    Accepted by the <attrib_list> parameter of eglCreateSyncKHR, and returned
    Accepted by the <attrib_list> parameter of eglCreateSyncKHR, and returned
    by eglDupNativeFenceFDANDROID in the event of an error:
    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>
    Returned in <value> when eglGetSyncAttribKHR is called with <attribute>
    EGL_SYNC_CONDITION_KHR:
    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
    object is created. In this case the EGL_SYNC_NATIVE_FENCE_FD_ANDROID
    attribute may optionally be specified. If this attribute is specified, it
    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
    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
    The default values for the EGL native fence sync object attributes are as
    follows:
    follows:
@@ -202,7 +202,7 @@ Changes to Chapter 3 of the EGL 1.2 Specification (EGL Functions and Errors)
    The command
    The command


        EGLint eglDupNativeFenceFDANDROID(
        EGLint eglDupNativeFenceFDANDROID(
                            EGLdisplay dpy,
                            EGLDisplay dpy,
                            EGLSyncKHR sync);
                            EGLSyncKHR sync);


    duplicates the file descriptor stored in the
    duplicates the file descriptor stored in the