diff options
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. |