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

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

am 12b528f8: am 86306b58: Merge "Defer destroying surfaces until not current" into jb-mr2-dev

* commit '12b528f8':
  Defer destroying surfaces until not current
parents bfef13e9 12b528f8
Loading
Loading
Loading
Loading
+12 −5
Original line number Diff line number Diff line
@@ -147,6 +147,7 @@ struct egl_surface_t
    EGLDisplay          dpy;
    EGLConfig           config;
    EGLContext          ctx;
    bool                zombie;

                egl_surface_t(EGLDisplay dpy, EGLConfig config, int32_t depthFormat);
    virtual     ~egl_surface_t();
@@ -173,7 +174,7 @@ protected:
egl_surface_t::egl_surface_t(EGLDisplay dpy,
        EGLConfig config,
        int32_t depthFormat)
    : magic(MAGIC), dpy(dpy), config(config), ctx(0)
    : magic(MAGIC), dpy(dpy), config(config), ctx(0), zombie(false)
{
    depth.version = sizeof(GGLSurface);
    depth.data = 0;
@@ -1580,12 +1581,13 @@ EGLBoolean eglDestroySurface(EGLDisplay dpy, EGLSurface eglSurface)
        if (surface->dpy != dpy)
            return setError(EGL_BAD_DISPLAY, EGL_FALSE);
        if (surface->ctx) {
            // FIXME: this surface is current check what the spec says
            // defer disconnect/delete until no longer current
            surface->zombie = true;
        } else {
            surface->disconnect();
            surface->ctx = 0;
        }
            delete surface;
        }
    }
    return EGL_TRUE;
}

@@ -1736,6 +1738,9 @@ EGLBoolean eglMakeCurrent( EGLDisplay dpy, EGLSurface draw,
            if (c->draw) {
                egl_surface_t* s = reinterpret_cast<egl_surface_t*>(c->draw);
                s->disconnect();
                s->ctx = EGL_NO_CONTEXT;
                if (s->zombie)
                    delete s;
            }
            if (c->read) {
                // FIXME: unlock/disconnect the read surface too 
@@ -1777,8 +1782,10 @@ EGLBoolean eglMakeCurrent( EGLDisplay dpy, EGLSurface draw,
                egl_surface_t* r = (egl_surface_t*)c->read;
                if (d) {
                    c->draw = 0;
                    d->ctx = EGL_NO_CONTEXT;
                    d->disconnect();
                    d->ctx = EGL_NO_CONTEXT;
                    if (d->zombie)
                        delete d;
                }
                if (r) {
                    c->read = 0;