egl: Reintroduce eglGetRenderBufferANDROID
eglGetRenderBufferANDROID was removed as it had no users. This commit reintroduces this extensions as it's used by Qualcomm graphics HAL. Change-Id: I493306830a0d4f8722a42bcc84fb49236afdabeb
This commit is contained in:
parent
d7007cd4bb
commit
f9752cc4cf
@ -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
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -70,6 +70,8 @@ static const extention_map_t sExtentionMap[] = {
|
||||
(__eglMustCastToProperFunctionPointerType)&eglCreateImageKHR },
|
||||
{ "eglDestroyImageKHR",
|
||||
(__eglMustCastToProperFunctionPointerType)&eglDestroyImageKHR },
|
||||
{ "eglGetRenderBufferANDROID",
|
||||
(__eglMustCastToProperFunctionPointerType)&eglGetRenderBufferANDROID },
|
||||
{ "eglGetSystemTimeFrequencyNV",
|
||||
(__eglMustCastToProperFunctionPointerType)&eglGetSystemTimeFrequencyNV },
|
||||
{ "eglGetSystemTimeNV",
|
||||
@ -1190,7 +1192,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
|
||||
|
Loading…
Reference in New Issue
Block a user