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

Commit f29b86b2 authored by Jean-Baptiste Queru's avatar Jean-Baptiste Queru Committed by Android Git Automerger
Browse files

am 76942a49: Merge "egl: Reintroduce eglGetRenderBufferANDROID"

* commit '76942a49':
  egl: Reintroduce eglGetRenderBufferANDROID
parents ee42072b 76942a49
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -213,6 +213,7 @@ typedef EGLBoolean (EGLAPIENTRYP PFNEGLFENCENVPROC) (EGLSyncNV sync);
typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCNVPROC) (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCNVPROC) (EGLSyncNV sync, EGLenum mode);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBNVPROC) (EGLSyncNV sync, EGLint attribute, EGLint *value);
typedef EGLClientBuffer (EGLAPIENTRYP PFNEGLGETRENDERBUFFERANDROIDPROC) (EGLDisplay dpy, EGLSurface draw);
#endif

#ifndef EGL_KHR_fence_sync
@@ -262,6 +263,15 @@ typedef void (EGLAPIENTRYP PFNEGLSETBLOBCACHEFUNCSANDROIDPROC) (EGLDisplay dpy,
        EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get);
#endif

/* EGL_ANDROID_get_render_buffer
 */
#ifndef EGL_ANDROID_get_render_buffer
#define EGL_ANDROID_get_render_buffer 1
#ifdef EGL_EGLEXT_PROTOTYPES
EGLAPI EGLClientBuffer EGLAPIENTRY eglGetRenderBufferANDROID(EGLDisplay dpy, EGLSurface draw);
#endif
#endif

/* EGL_IMG_hibernate_process
 */
#ifndef EGL_IMG_hibernate_process
+28 −0
Original line number Diff line number Diff line
@@ -165,6 +165,7 @@ struct egl_surface_t
    virtual     EGLint      getSwapBehavior() const;
    virtual     EGLBoolean  swapBuffers();
    virtual     EGLBoolean  setSwapRectangle(EGLint l, EGLint t, EGLint w, EGLint h);
    virtual     EGLClientBuffer getRenderBuffer() const;
protected:
    GGLSurface              depth;
};
@@ -208,6 +209,9 @@ EGLBoolean egl_surface_t::setSwapRectangle(
{
    return EGL_FALSE;
}
EGLClientBuffer egl_surface_t::getRenderBuffer() const {
    return 0;
}

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

@@ -233,6 +237,7 @@ struct egl_window_surface_v2_t : public egl_surface_t
    virtual     EGLint      getRefreshRate() const;
    virtual     EGLint      getSwapBehavior() const;
    virtual     EGLBoolean  setSwapRectangle(EGLint l, EGLint t, EGLint w, EGLint h);
    virtual     EGLClientBuffer  getRenderBuffer() const;
    
private:
    status_t lock(ANativeWindowBuffer* buf, int usage, void** vaddr);
@@ -571,6 +576,11 @@ EGLBoolean egl_window_surface_v2_t::setSwapRectangle(
    return EGL_TRUE;
}

EGLClientBuffer egl_window_surface_v2_t::getRenderBuffer() const
{
    return buffer;
}

EGLBoolean egl_window_surface_v2_t::bindDrawSurface(ogles_context_t* gl)
{
    GGLSurface buffer;
@@ -801,6 +811,7 @@ static char const * const gExtensionsString =
        // "KHR_image_pixmap "
        "EGL_ANDROID_image_native_buffer "
        "EGL_ANDROID_swap_rectangle "
        "EGL_ANDROID_get_render_buffer "
        ;

// ----------------------------------------------------------------------------
@@ -861,6 +872,8 @@ static const extention_map_t gExtentionMap[] = {
            (__eglMustCastToProperFunctionPointerType)&eglGetSyncAttribKHR },
    { "eglSetSwapRectangleANDROID", 
            (__eglMustCastToProperFunctionPointerType)&eglSetSwapRectangleANDROID }, 
    { "eglGetRenderBufferANDROID",
        (__eglMustCastToProperFunctionPointerType)&eglGetRenderBufferANDROID },
};

/*
@@ -2154,3 +2167,18 @@ EGLBoolean eglSetSwapRectangleANDROID(EGLDisplay dpy, EGLSurface draw,

    return EGL_TRUE;
}

EGLClientBuffer eglGetRenderBufferANDROID(EGLDisplay dpy, EGLSurface draw)
{
    if (egl_display_t::is_valid(dpy) == EGL_FALSE)
        return setError(EGL_BAD_DISPLAY, (EGLClientBuffer)0);

    egl_surface_t* d = static_cast<egl_surface_t*>(draw);
    if (!d->isValid())
        return setError(EGL_BAD_SURFACE, (EGLClientBuffer)0);
    if (d->dpy != dpy)
        return setError(EGL_BAD_DISPLAY, (EGLClientBuffer)0);

    // post the surface
    return d->getRenderBuffer();
}
+17 −1
Original line number Diff line number Diff line
@@ -70,6 +70,8 @@ static const extention_map_t sExtentionMap[] = {
            (__eglMustCastToProperFunctionPointerType)&eglCreateImageKHR },
    { "eglDestroyImageKHR",
            (__eglMustCastToProperFunctionPointerType)&eglDestroyImageKHR },
    { "eglGetRenderBufferANDROID",
        (__eglMustCastToProperFunctionPointerType)&eglGetRenderBufferANDROID },
    { "eglGetSystemTimeFrequencyNV",
            (__eglMustCastToProperFunctionPointerType)&eglGetSystemTimeFrequencyNV },
    { "eglGetSystemTimeNV",
@@ -1191,7 +1193,21 @@ EGLBoolean eglGetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync,
// ANDROID extensions
// ----------------------------------------------------------------------------

/* ANDROID extensions entry-point go here */
EGLClientBuffer eglGetRenderBufferANDROID(EGLDisplay dpy, EGLSurface draw)
{
    clearError();

    const egl_display_ptr dp = validate_display(dpy);
    if (!dp) return EGL_FALSE;

    egl_surface_t const * const s = get_surface(draw);

    egl_connection_t* const cnx = &gEGLImpl;
    if (cnx->dso && cnx->egl.eglGetRenderBufferANDROID) {
        return cnx->egl.eglGetRenderBufferANDROID(dp->disp.dpy, s->surface);
    }
    return setError(EGL_BAD_DISPLAY, (EGLClientBuffer*)0);
}

// ----------------------------------------------------------------------------
// NVIDIA extensions