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

Commit 0378f4d8 authored by Yiwei Zhang's avatar Yiwei Zhang
Browse files

Expose EGL_ANDROID_native_fence_sync to the applications

This change also sorts the global extension lists in alphabetical order.

Bug: 157518032
Test: build, compile, boot
Test: EGL_ANDROID_native_fence_sync in RenderEngine dump
Change-Id: I6614b9532daf7747fcadbe38744d5293cf8198b4
parent 249afbf1
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -27,8 +27,6 @@

#include <private/gui/SyncFeatures.h>

extern "C" EGLAPI const char* eglQueryStringImplementationANDROID(EGLDisplay dpy, EGLint name);

namespace android {

ANDROID_SINGLETON_STATIC_INSTANCE(SyncFeatures);
@@ -40,8 +38,8 @@ SyncFeatures::SyncFeatures() : Singleton<SyncFeatures>(),
    EGLDisplay dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY);
    // This can only be called after EGL has been initialized; otherwise the
    // check below will abort.
    const char* exts = eglQueryStringImplementationANDROID(dpy, EGL_EXTENSIONS);
    LOG_ALWAYS_FATAL_IF(exts == nullptr, "eglQueryStringImplementationANDROID failed");
    const char* exts = eglQueryString(dpy, EGL_EXTENSIONS);
    LOG_ALWAYS_FATAL_IF(exts == nullptr, "eglQueryString failed");
    if (strstr(exts, "EGL_ANDROID_native_fence_sync")) {
        // This makes GLConsumer use the EGL_ANDROID_native_fence_sync
        // extension to create Android native fences to signal when all
+4 −6
Original line number Diff line number Diff line
@@ -51,8 +51,6 @@
#include "ProgramCache.h"
#include "filters/BlurFilter.h"

extern "C" EGLAPI const char* eglQueryStringImplementationANDROID(EGLDisplay dpy, EGLint name);

bool checkGlError(const char* op, int lineNumber) {
    bool errorFound = false;
    GLint error = glGetError();
@@ -208,16 +206,16 @@ std::unique_ptr<GLESRenderEngine> GLESRenderEngine::create(const RenderEngineCre
        LOG_ALWAYS_FATAL("failed to initialize EGL");
    }

    const auto eglVersion = eglQueryStringImplementationANDROID(display, EGL_VERSION);
    const auto eglVersion = eglQueryString(display, EGL_VERSION);
    if (!eglVersion) {
        checkGlError(__FUNCTION__, __LINE__);
        LOG_ALWAYS_FATAL("eglQueryStringImplementationANDROID(EGL_VERSION) failed");
        LOG_ALWAYS_FATAL("eglQueryString(EGL_VERSION) failed");
    }

    const auto eglExtensions = eglQueryStringImplementationANDROID(display, EGL_EXTENSIONS);
    const auto eglExtensions = eglQueryString(display, EGL_EXTENSIONS);
    if (!eglExtensions) {
        checkGlError(__FUNCTION__, __LINE__);
        LOG_ALWAYS_FATAL("eglQueryStringImplementationANDROID(EGL_EXTENSIONS) failed");
        LOG_ALWAYS_FATAL("eglQueryString(EGL_EXTENSIONS) failed");
    }

    GLExtensions& extensions = GLExtensions::getInstance();
+34 −33
Original line number Diff line number Diff line
@@ -82,66 +82,67 @@ extern char const * const gExtensionString;
// clang-format off
// Extensions implemented by the EGL wrapper.
char const * const gBuiltinExtensionString =
        "EGL_KHR_get_all_proc_addresses "
        "EGL_ANDROID_presentation_time "
        "EGL_KHR_swap_buffers_with_damage "
        "EGL_ANDROID_get_native_client_buffer "
        "EGL_ANDROID_front_buffer_auto_refresh "
        "EGL_ANDROID_get_frame_timestamps "
        "EGL_EXT_surface_SMPTE2086_metadata "
        "EGL_ANDROID_get_native_client_buffer "
        "EGL_ANDROID_presentation_time "
        "EGL_EXT_surface_CTA861_3_metadata "
        "EGL_EXT_surface_SMPTE2086_metadata "
        "EGL_KHR_get_all_proc_addresses "
        "EGL_KHR_swap_buffers_with_damage "
        ;

// Allowed list of extensions exposed to applications if implemented in the vendor driver.
char const * const gExtensionString  =
        "EGL_KHR_image "                        // mandatory
        "EGL_KHR_image_base "                   // mandatory
        "EGL_ANDROID_image_native_buffer "      // mandatory
        "EGL_ANDROID_native_fence_sync "        // strongly recommended
        "EGL_ANDROID_recordable "               // mandatory
        "EGL_EXT_buffer_age "                   // strongly recommended with partial_update
        "EGL_EXT_create_context_robustness "
        "EGL_EXT_image_gl_colorspace "
        "EGL_KHR_image_pixmap "
        "EGL_KHR_lock_surface "
        "EGL_EXT_pixel_format_float "
        "EGL_EXT_protected_content "
        "EGL_EXT_yuv_surface "
        "EGL_IMG_context_priority "
        "EGL_KHR_config_attribs "
        "EGL_KHR_create_context "
        "EGL_KHR_create_context_no_error "
        "EGL_KHR_fence_sync "
        "EGL_KHR_gl_colorspace "
        "EGL_KHR_gl_renderbuffer_image "
        "EGL_KHR_gl_texture_2D_image "
        "EGL_KHR_gl_texture_3D_image "
        "EGL_KHR_gl_texture_cubemap_image "
        "EGL_KHR_gl_renderbuffer_image "
        "EGL_KHR_image "                        // mandatory
        "EGL_KHR_image_base "                   // mandatory
        "EGL_KHR_image_pixmap "
        "EGL_KHR_lock_surface "
        "EGL_KHR_mutable_render_buffer "
        "EGL_KHR_no_config_context "
        "EGL_KHR_partial_update "               // strongly recommended
        "EGL_KHR_reusable_sync "
        "EGL_KHR_fence_sync "
        "EGL_KHR_create_context "
        "EGL_KHR_config_attribs "
        "EGL_KHR_surfaceless_context "
        "EGL_KHR_stream "
        "EGL_KHR_stream_fifo "
        "EGL_KHR_stream_producer_eglsurface "
        "EGL_KHR_stream_consumer_gltexture "
        "EGL_KHR_stream_cross_process_fd "
        "EGL_EXT_create_context_robustness "
        "EGL_NV_system_time "
        "EGL_ANDROID_image_native_buffer "      // mandatory
        "EGL_KHR_stream_fifo "
        "EGL_KHR_stream_producer_eglsurface "
        "EGL_KHR_surfaceless_context "
        "EGL_KHR_wait_sync "                    // strongly recommended
        "EGL_ANDROID_recordable "               // mandatory
        "EGL_KHR_partial_update "               // strongly recommended
        "EGL_EXT_pixel_format_float "
        "EGL_EXT_buffer_age "                   // strongly recommended with partial_update
        "EGL_KHR_create_context_no_error "
        "EGL_KHR_mutable_render_buffer "
        "EGL_EXT_yuv_surface "
        "EGL_EXT_protected_content "
        "EGL_IMG_context_priority "
        "EGL_KHR_no_config_context "
        "EGL_NV_system_time "
        ;

char const * const gClientExtensionString =
        "EGL_ANDROID_GLES_layers "
        "EGL_ANGLE_platform_angle "
        "EGL_EXT_client_extensions "
        "EGL_KHR_platform_android "
        "EGL_ANGLE_platform_angle "
        "EGL_ANDROID_GLES_layers";
        ;
// clang-format on

// extensions not exposed to applications but used by the ANDROID system
//      "EGL_ANDROID_blob_cache "               // strongly recommended
//      "EGL_IMG_hibernate_process "            // optional
//      "EGL_ANDROID_native_fence_sync "        // strongly recommended
//      "EGL_ANDROID_framebuffer_target "       // mandatory for HWC 1.1
//      "EGL_IMG_hibernate_process "            // optional

/*
 * EGL Extensions entry-points exposed to 3rd party applications