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

Commit 9e2464c4 authored by Mathias Agopian's avatar Mathias Agopian Committed by Android (Google) Code Review
Browse files

Merge "add support for GL_EXT_debug_marker"

parents 63cfc1d2 48d438d0
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -253,6 +253,19 @@ void Loader::init_api(void* dso,
        if (f == NULL) {
            //ALOGD("%s", name);
            f = (__eglMustCastToProperFunctionPointerType)gl_unimplemented;

            /*
             * GL_EXT_debug_label is special, we always report it as
             * supported, it's handled by GLES_trace. If GLES_trace is not
             * enabled, then these are no-ops.
             */
            if (!strcmp(name, "glInsertEventMarkerEXT")) {
                f = (__eglMustCastToProperFunctionPointerType)gl_noop;
            } else if (!strcmp(name, "glPushGroupMarkerEXT")) {
                f = (__eglMustCastToProperFunctionPointerType)gl_noop;
            } else if (!strcmp(name, "glPopGroupMarkerEXT")) {
                f = (__eglMustCastToProperFunctionPointerType)gl_noop;
            }
        }
        *curr++ = f;
        api++;
+23 −0
Original line number Diff line number Diff line
@@ -233,6 +233,26 @@ EGLImageKHR egl_get_image_for_current_context(EGLImageKHR image)

// ----------------------------------------------------------------------------

const GLubyte * egl_get_string_for_current_context(GLenum name) {
    // NOTE: returning NULL here will fall-back to the default
    // implementation.

    EGLContext context = egl_tls_t::getContext();
    if (context == EGL_NO_CONTEXT)
        return NULL;

    egl_context_t const * const c = get_context(context);
    if (c == NULL) // this should never happen, by construction
        return NULL;

    if (name != GL_EXTENSIONS)
        return NULL;

    return (const GLubyte *)c->gl_extensions.string();
}

// ----------------------------------------------------------------------------

// this mutex protects:
//    d->disp[]
//    egl_init_drivers_locked()
@@ -290,6 +310,9 @@ void gl_unimplemented() {
    ALOGE("called unimplemented OpenGL ES API");
}

void gl_noop() {
}

// ----------------------------------------------------------------------------

#if USE_FAST_TLS_KEY
+4 −5
Original line number Diff line number Diff line
@@ -578,8 +578,7 @@ static void loseCurrent(egl_context_t * cur_c)
        SurfaceRef _cur_r(cur_r);
        SurfaceRef _cur_d(cur_d);

        cur_c->read = NULL;
        cur_c->draw = NULL;
        cur_c->onLooseCurrent();

        _cur_c.release();
        _cur_r.release();
@@ -687,8 +686,7 @@ EGLBoolean eglMakeCurrent( EGLDisplay dpy, EGLSurface draw,
            _c.acquire();
            _r.acquire();
            _d.acquire();
            c->read = read;
            c->draw = draw;
            c->onMakeCurrent(draw, read);
        } else {
            setGLHooksThreadSpecific(&gHooksNoContext);
            egl_tls_t::setContext(EGL_NO_CONTEXT);
@@ -924,7 +922,8 @@ __eglMustCastToProperFunctionPointerType eglGetProcAddress(const char *procname)
                    cnx->hooks[GLESv1_INDEX]->ext.extensions[slot] =
                    cnx->hooks[GLESv2_INDEX]->ext.extensions[slot] =
#if EGL_TRACE
                    debugHooks->ext.extensions[slot] = gHooksTrace.ext.extensions[slot] =
                    debugHooks->ext.extensions[slot] =
                    gHooksTrace.ext.extensions[slot] =
#endif
                            cnx->egl.eglGetProcAddress(procname);
                }
+36 −0
Original line number Diff line number Diff line
@@ -61,6 +61,42 @@ bool egl_object_t::get(egl_display_t const* display, egl_object_t* object) {
    return display->getObject(object);
}

// ----------------------------------------------------------------------------

egl_context_t::egl_context_t(EGLDisplay dpy, EGLContext context, EGLConfig config,
        int impl, egl_connection_t const* cnx, int version) :
    egl_object_t(get_display(dpy)), dpy(dpy), context(context),
            config(config), read(0), draw(0), impl(impl), cnx(cnx),
            version(version)
{
}

void egl_context_t::onLooseCurrent() {
    read = NULL;
    draw = NULL;
}

void egl_context_t::onMakeCurrent(EGLSurface draw, EGLSurface read) {
    this->read = read;
    this->draw = draw;

    /*
     * Here we cache the GL_EXTENSIONS string for this context and we
     * add the extensions always handled by the wrapper
     */

    if (gl_extensions.isEmpty()) {
        // call the implementation's glGetString(GL_EXTENSIONS)
        const char* exts = (const char *)gEGLImpl[impl].hooks[version]->gl.glGetString(GL_EXTENSIONS);
        gl_extensions.setTo(exts);
        if (gl_extensions.find("GL_EXT_debug_marker") < 0) {
            String8 temp("GL_EXT_debug_marker ");
            temp.append(gl_extensions);
            gl_extensions.setTo(temp);
        }
    }
}

// ----------------------------------------------------------------------------
}; // namespace android
// ----------------------------------------------------------------------------
+7 −5
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@
#include <GLES/glext.h>

#include <utils/threads.h>
#include <utils/String8.h>

#include <system/window.h>

@@ -158,11 +159,11 @@ public:
    typedef egl_object_t::LocalRef<egl_context_t, EGLContext> Ref;

    egl_context_t(EGLDisplay dpy, EGLContext context, EGLConfig config,
            int impl, egl_connection_t const* cnx, int version) :
        egl_object_t(get_display(dpy)), dpy(dpy), context(context),
                config(config), read(0), draw(0), impl(impl), cnx(cnx),
                version(version) {
    }
            int impl, egl_connection_t const* cnx, int version);

    void onLooseCurrent();
    void onMakeCurrent(EGLSurface draw, EGLSurface read);

    EGLDisplay dpy;
    EGLContext context;
    EGLConfig config;
@@ -171,6 +172,7 @@ public:
    int impl;
    egl_connection_t const* cnx;
    int version;
    String8 gl_extensions;
};

class egl_image_t: public egl_object_t {
Loading