Merge "egl: Reintroduce eglGetRenderBufferANDROID"
This commit is contained in:
commit
76942a4974
@ -213,6 +213,7 @@ typedef EGLBoolean (EGLAPIENTRYP PFNEGLFENCENVPROC) (EGLSyncNV sync);
|
|||||||
typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCNVPROC) (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout);
|
typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCNVPROC) (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout);
|
||||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCNVPROC) (EGLSyncNV sync, EGLenum mode);
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCNVPROC) (EGLSyncNV sync, EGLenum mode);
|
||||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBNVPROC) (EGLSyncNV sync, EGLint attribute, EGLint *value);
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBNVPROC) (EGLSyncNV sync, EGLint attribute, EGLint *value);
|
||||||
|
typedef EGLClientBuffer (EGLAPIENTRYP PFNEGLGETRENDERBUFFERANDROIDPROC) (EGLDisplay dpy, EGLSurface draw);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef EGL_KHR_fence_sync
|
#ifndef EGL_KHR_fence_sync
|
||||||
@ -262,6 +263,15 @@ typedef void (EGLAPIENTRYP PFNEGLSETBLOBCACHEFUNCSANDROIDPROC) (EGLDisplay dpy,
|
|||||||
EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get);
|
EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get);
|
||||||
#endif
|
#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
|
/* EGL_IMG_hibernate_process
|
||||||
*/
|
*/
|
||||||
#ifndef EGL_IMG_hibernate_process
|
#ifndef EGL_IMG_hibernate_process
|
||||||
|
@ -165,6 +165,7 @@ struct egl_surface_t
|
|||||||
virtual EGLint getSwapBehavior() const;
|
virtual EGLint getSwapBehavior() const;
|
||||||
virtual EGLBoolean swapBuffers();
|
virtual EGLBoolean swapBuffers();
|
||||||
virtual EGLBoolean setSwapRectangle(EGLint l, EGLint t, EGLint w, EGLint h);
|
virtual EGLBoolean setSwapRectangle(EGLint l, EGLint t, EGLint w, EGLint h);
|
||||||
|
virtual EGLClientBuffer getRenderBuffer() const;
|
||||||
protected:
|
protected:
|
||||||
GGLSurface depth;
|
GGLSurface depth;
|
||||||
};
|
};
|
||||||
@ -208,6 +209,9 @@ EGLBoolean egl_surface_t::setSwapRectangle(
|
|||||||
{
|
{
|
||||||
return EGL_FALSE;
|
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 getRefreshRate() const;
|
||||||
virtual EGLint getSwapBehavior() const;
|
virtual EGLint getSwapBehavior() const;
|
||||||
virtual EGLBoolean setSwapRectangle(EGLint l, EGLint t, EGLint w, EGLint h);
|
virtual EGLBoolean setSwapRectangle(EGLint l, EGLint t, EGLint w, EGLint h);
|
||||||
|
virtual EGLClientBuffer getRenderBuffer() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
status_t lock(ANativeWindowBuffer* buf, int usage, void** vaddr);
|
status_t lock(ANativeWindowBuffer* buf, int usage, void** vaddr);
|
||||||
@ -571,6 +576,11 @@ EGLBoolean egl_window_surface_v2_t::setSwapRectangle(
|
|||||||
return EGL_TRUE;
|
return EGL_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EGLClientBuffer egl_window_surface_v2_t::getRenderBuffer() const
|
||||||
|
{
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
EGLBoolean egl_window_surface_v2_t::bindDrawSurface(ogles_context_t* gl)
|
EGLBoolean egl_window_surface_v2_t::bindDrawSurface(ogles_context_t* gl)
|
||||||
{
|
{
|
||||||
GGLSurface buffer;
|
GGLSurface buffer;
|
||||||
@ -801,6 +811,7 @@ static char const * const gExtensionsString =
|
|||||||
// "KHR_image_pixmap "
|
// "KHR_image_pixmap "
|
||||||
"EGL_ANDROID_image_native_buffer "
|
"EGL_ANDROID_image_native_buffer "
|
||||||
"EGL_ANDROID_swap_rectangle "
|
"EGL_ANDROID_swap_rectangle "
|
||||||
|
"EGL_ANDROID_get_render_buffer "
|
||||||
;
|
;
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@ -861,6 +872,8 @@ static const extention_map_t gExtentionMap[] = {
|
|||||||
(__eglMustCastToProperFunctionPointerType)&eglGetSyncAttribKHR },
|
(__eglMustCastToProperFunctionPointerType)&eglGetSyncAttribKHR },
|
||||||
{ "eglSetSwapRectangleANDROID",
|
{ "eglSetSwapRectangleANDROID",
|
||||||
(__eglMustCastToProperFunctionPointerType)&eglSetSwapRectangleANDROID },
|
(__eglMustCastToProperFunctionPointerType)&eglSetSwapRectangleANDROID },
|
||||||
|
{ "eglGetRenderBufferANDROID",
|
||||||
|
(__eglMustCastToProperFunctionPointerType)&eglGetRenderBufferANDROID },
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -2154,3 +2167,18 @@ EGLBoolean eglSetSwapRectangleANDROID(EGLDisplay dpy, EGLSurface draw,
|
|||||||
|
|
||||||
return EGL_TRUE;
|
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 },
|
(__eglMustCastToProperFunctionPointerType)&eglCreateImageKHR },
|
||||||
{ "eglDestroyImageKHR",
|
{ "eglDestroyImageKHR",
|
||||||
(__eglMustCastToProperFunctionPointerType)&eglDestroyImageKHR },
|
(__eglMustCastToProperFunctionPointerType)&eglDestroyImageKHR },
|
||||||
|
{ "eglGetRenderBufferANDROID",
|
||||||
|
(__eglMustCastToProperFunctionPointerType)&eglGetRenderBufferANDROID },
|
||||||
{ "eglGetSystemTimeFrequencyNV",
|
{ "eglGetSystemTimeFrequencyNV",
|
||||||
(__eglMustCastToProperFunctionPointerType)&eglGetSystemTimeFrequencyNV },
|
(__eglMustCastToProperFunctionPointerType)&eglGetSystemTimeFrequencyNV },
|
||||||
{ "eglGetSystemTimeNV",
|
{ "eglGetSystemTimeNV",
|
||||||
@ -1191,7 +1193,21 @@ EGLBoolean eglGetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync,
|
|||||||
// ANDROID extensions
|
// 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
|
// NVIDIA extensions
|
||||||
|
Loading…
Reference in New Issue
Block a user