diff options
author | Chad Versace <chadversary@chromium.org> | 2018-04-30 22:32:25 -0700 |
---|---|---|
committer | Chad Versace <chadversary@chromium.org> | 2018-05-01 03:15:58 -0700 |
commit | bf85c6b1603c16b15c9dc83919c8bba4e9f92ad2 (patch) | |
tree | 658304eaaef07b2dad636843feffc110d910e0db /src/egl/main/eglsurface.h | |
parent | 272fd36b242a6428cccd3a236f328b6a85386567 (diff) |
CHROMIUM: egl/main: Add bits for EGL_KHR_mutable_render_buffer
A follow-up patch enables EGL_KHR_mutable_render_buffer for Android.
This patch is separate from the Android patch because I think it's
easier to review the platform-independent bits separately.
BUG=b:77899911
TEST=No android-cts-7.1 regressions on Eve.
Change-Id: I07470f2862796611b141f69f47f935b97b0e04a1
Diffstat (limited to 'src/egl/main/eglsurface.h')
-rw-r--r-- | src/egl/main/eglsurface.h | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/src/egl/main/eglsurface.h b/src/egl/main/eglsurface.h index 06e3b5b1b81..5d69bf487cf 100644 --- a/src/egl/main/eglsurface.h +++ b/src/egl/main/eglsurface.h @@ -78,7 +78,20 @@ struct _egl_surface * surfaces, the EGL spec hard-codes the EGL_RENDER_BUFFER value and the * user must not provide it in the attribute list. * - * Refer to eglQuerySurface() in the EGL spec. + * Normally, the attribute is immutable and after surface creation. + * However, EGL_KHR_mutable_render_buffer allows the user to change it in + * window surfaces via eglSurfaceAttrib, in which case + * eglQuerySurface(EGL_RENDER_BUFFER) will immediately afterwards return + * the requested value but the actual render buffer used by the context + * does not change until completion of the next eglSwapBuffers call. + * + * From the EGL_KHR_mutable_render_buffer spec (v12): + * + * Querying EGL_RENDER_BUFFER returns the buffer which client API + * rendering is requested to use. For a window surface, this is the + * attribute value specified when the surface was created or last set + * via eglSurfaceAttrib. + * * eglQueryContext(EGL_RENDER_BUFFER) ignores this. */ EGLenum RequestedRenderBuffer; @@ -91,6 +104,19 @@ struct _egl_surface * * Refer to eglQueryContext(EGL_RENDER_BUFFER) in the EGL spec. * eglQuerySurface(EGL_RENDER_BUFFER) ignores this. + * + * If a window surface is bound as the draw surface and has a pending, + * user-requested change to EGL_RENDER_BUFFER, then the next eglSwapBuffers + * will flush the pending change. (The flush of EGL_RENDER_BUFFER state may + * occur without the implicit glFlush induced by eglSwapBuffers). The spec + * requires that the flush occur at that time and nowhere else. During the + * state-flush, we copy RequestedRenderBuffer to ActiveRenderBuffer. + * + * From the EGL_KHR_mutable_render_buffer spec (v12): + * + * If [...] there is a pending change to the EGL_RENDER_BUFFER + * attribute, eglSwapBuffers performs an implicit flush operation on the + * context and effects the attribute change. */ EGLenum ActiveRenderBuffer; @@ -150,6 +176,11 @@ _eglReleaseTexImage(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf, EGLin extern EGLBoolean _eglSwapInterval(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf, EGLint interval); +extern EGLBoolean +_eglSurfaceHasMutableRenderBuffer(_EGLSurface *surf); + +extern EGLBoolean +_eglSurfaceInSharedBufferMode(_EGLSurface *surf); /** * Increment reference count for the surface. |