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

Commit 1974391b authored by Jesse Hall's avatar Jesse Hall Committed by Android Git Automerger
Browse files

am 83e7c8c4: Implement the EGL_KHR_fence_sync in libagl

* commit '83e7c8c4':
  Implement the EGL_KHR_fence_sync in libagl
parents 7afcf632 83e7c8c4
Loading
Loading
Loading
Loading
+77 −0
Original line number Original line Diff line number Diff line
@@ -796,6 +796,7 @@ static char const * const gVendorString = "Google Inc.";
static char const * const gVersionString    = "1.2 Android Driver 1.2.0";
static char const * const gVersionString    = "1.2 Android Driver 1.2.0";
static char const * const gClientApiString  = "OpenGL_ES";
static char const * const gClientApiString  = "OpenGL_ES";
static char const * const gExtensionsString =
static char const * const gExtensionsString =
        "EGL_KHR_fence_sync "
        "EGL_KHR_image_base "
        "EGL_KHR_image_base "
        // "KHR_image_pixmap "
        // "KHR_image_pixmap "
        "EGL_ANDROID_image_native_buffer "
        "EGL_ANDROID_image_native_buffer "
@@ -850,6 +851,14 @@ static const extention_map_t gExtentionMap[] = {
            (__eglMustCastToProperFunctionPointerType)&eglCreateImageKHR }, 
            (__eglMustCastToProperFunctionPointerType)&eglCreateImageKHR }, 
    { "eglDestroyImageKHR", 
    { "eglDestroyImageKHR", 
            (__eglMustCastToProperFunctionPointerType)&eglDestroyImageKHR }, 
            (__eglMustCastToProperFunctionPointerType)&eglDestroyImageKHR }, 
    { "eglCreateSyncKHR",
            (__eglMustCastToProperFunctionPointerType)&eglCreateSyncKHR },
    { "eglDestroySyncKHR",
            (__eglMustCastToProperFunctionPointerType)&eglDestroySyncKHR },
    { "eglClientWaitSyncKHR",
            (__eglMustCastToProperFunctionPointerType)&eglClientWaitSyncKHR },
    { "eglGetSyncAttribKHR",
            (__eglMustCastToProperFunctionPointerType)&eglGetSyncAttribKHR },
    { "eglSetSwapRectangleANDROID", 
    { "eglSetSwapRectangleANDROID", 
            (__eglMustCastToProperFunctionPointerType)&eglSetSwapRectangleANDROID }, 
            (__eglMustCastToProperFunctionPointerType)&eglSetSwapRectangleANDROID }, 
};
};
@@ -2056,6 +2065,74 @@ EGLBoolean eglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR img)
    return EGL_TRUE;
    return EGL_TRUE;
}
}


// ----------------------------------------------------------------------------
// EGL_KHR_fence_sync
// ----------------------------------------------------------------------------

#define FENCE_SYNC_HANDLE ((EGLSyncKHR)0xFE4CE)

EGLSyncKHR eglCreateSyncKHR(EGLDisplay dpy, EGLenum type,
        const EGLint *attrib_list)
{
    if (egl_display_t::is_valid(dpy) == EGL_FALSE) {
        return setError(EGL_BAD_DISPLAY, EGL_NO_SYNC_KHR);
    }

    if (type != EGL_SYNC_FENCE_KHR ||
            (attrib_list != NULL && attrib_list[0] != EGL_NONE)) {
        return setError(EGL_BAD_ATTRIBUTE, EGL_NO_SYNC_KHR);
    }

    if (eglGetCurrentContext() == EGL_NO_CONTEXT) {
        return setError(EGL_BAD_MATCH, EGL_NO_SYNC_KHR);
    }

    // AGL is synchronous; nothing to do here.

    return FENCE_SYNC_HANDLE;
}

EGLBoolean eglDestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync)
{
    if (sync != FENCE_SYNC_HANDLE) {
        return setError(EGL_BAD_PARAMETER, EGL_FALSE);
    }

    return EGL_TRUE;
}

EGLint eglClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags,
        EGLTimeKHR timeout)
{
    if (sync != FENCE_SYNC_HANDLE) {
        return setError(EGL_BAD_PARAMETER, EGL_FALSE);
    }

    return EGL_CONDITION_SATISFIED_KHR;
}

EGLBoolean eglGetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync,
        EGLint attribute, EGLint *value)
{
    if (sync != FENCE_SYNC_HANDLE) {
        return setError(EGL_BAD_PARAMETER, EGL_FALSE);
    }

    switch (attribute) {
    case EGL_SYNC_TYPE_KHR:
        *value = EGL_SYNC_FENCE_KHR;
        return EGL_TRUE;
    case EGL_SYNC_STATUS_KHR:
        *value = EGL_SIGNALED_KHR;
        return EGL_TRUE;
    case EGL_SYNC_CONDITION_KHR:
        *value = EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR;
        return EGL_TRUE;
    default:
        return setError(EGL_BAD_ATTRIBUTE, EGL_FALSE);
    }
}

// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// ANDROID extensions
// ANDROID extensions
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
+1 −0
Original line number Original line Diff line number Diff line
@@ -47,6 +47,7 @@ static char const * const gExtensionsString =
    //        "GL_OES_point_size_array "              // TODO
    //        "GL_OES_point_size_array "              // TODO
    //        "GL_OES_point_sprite "                  // TODO
    //        "GL_OES_point_sprite "                  // TODO
    "GL_OES_EGL_image "                     // OK
    "GL_OES_EGL_image "                     // OK
    "GL_OES_EGL_sync "                      // OK
#ifdef GL_OES_compressed_ETC1_RGB8_texture
#ifdef GL_OES_compressed_ETC1_RGB8_texture
    "GL_OES_compressed_ETC1_RGB8_texture "  // OK
    "GL_OES_compressed_ETC1_RGB8_texture "  // OK
#endif
#endif