Mesa (master): egl: Add support for querying render buffer.

Brian Paul brianp at kemper.freedesktop.org
Tue Sep 29 14:19:02 UTC 2009


Module: Mesa
Branch: master
Commit: d845f2754bb8c0677323a5922cb90f9ea42bdb1f
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=d845f2754bb8c0677323a5922cb90f9ea42bdb1f

Author: Chia-I Wu <olvaffe at gmail.com>
Date:   Sun Sep 27 17:00:51 2009 +0800

egl: Add support for querying render buffer.

Signed-off-by: Chia-I Wu <olvaffe at gmail.com>

---

 src/egl/main/eglcontext.c |   40 +++++++++++++++++++++++++++++++++-------
 src/egl/main/eglcontext.h |    3 +++
 2 files changed, 36 insertions(+), 7 deletions(-)

diff --git a/src/egl/main/eglcontext.c b/src/egl/main/eglcontext.c
index b094f49..ee4b1b5 100644
--- a/src/egl/main/eglcontext.c
+++ b/src/egl/main/eglcontext.c
@@ -45,6 +45,7 @@ _eglInitContext(_EGLDriver *drv, _EGLContext *ctx,
    ctx->DrawSurface = EGL_NO_SURFACE;
    ctx->ReadSurface = EGL_NO_SURFACE;
    ctx->ClientAPI = api;
+   ctx->WindowRenderBuffer = EGL_NONE;
 
    return EGL_TRUE;
 }
@@ -87,6 +88,24 @@ _eglDestroyContext(_EGLDriver *drv, _EGLDisplay *dpy, _EGLContext *ctx)
 }
 
 
+#ifdef EGL_VERSION_1_2
+static EGLint
+_eglQueryContextRenderBuffer(_EGLContext *ctx)
+{
+   _EGLSurface *surf = ctx->DrawSurface;
+   EGLint rb;
+
+   if (!surf)
+      return EGL_NONE;
+   if (surf->Type == EGL_WINDOW_BIT && ctx->WindowRenderBuffer != EGL_NONE)
+      rb = ctx->WindowRenderBuffer;
+   else
+      rb = surf->RenderBuffer;
+   return rb;
+}
+#endif /* EGL_VERSION_1_2 */
+
+
 EGLBoolean
 _eglQueryContext(_EGLDriver *drv, _EGLDisplay *dpy, _EGLContext *c,
                  EGLint attribute, EGLint *value)
@@ -94,22 +113,29 @@ _eglQueryContext(_EGLDriver *drv, _EGLDisplay *dpy, _EGLContext *c,
    (void) drv;
    (void) dpy;
 
+   if (!value)
+      return _eglError(EGL_BAD_PARAMETER, "eglQueryContext");
+
    switch (attribute) {
    case EGL_CONFIG_ID:
       *value = GET_CONFIG_ATTRIB(c->Config, EGL_CONFIG_ID);
-      return EGL_TRUE;
+      break;
+   case EGL_CONTEXT_CLIENT_VERSION:
+      *value = c->ClientVersion;
+      break;
 #ifdef EGL_VERSION_1_2
    case EGL_CONTEXT_CLIENT_TYPE:
       *value = c->ClientAPI;
-      return EGL_TRUE;
+      break;
+   case EGL_RENDER_BUFFER:
+      *value = _eglQueryContextRenderBuffer(c);
+      break;
 #endif /* EGL_VERSION_1_2 */
-   case EGL_CONTEXT_CLIENT_VERSION:
-      *value = c->ClientVersion;
-      return EGL_TRUE;
    default:
-      _eglError(EGL_BAD_ATTRIBUTE, "eglQueryContext");
-      return EGL_FALSE;
+      return _eglError(EGL_BAD_ATTRIBUTE, "eglQueryContext");
    }
+
+   return EGL_TRUE;
 }
 
 
diff --git a/src/egl/main/eglcontext.h b/src/egl/main/eglcontext.h
index 647f244..45c7b47 100644
--- a/src/egl/main/eglcontext.h
+++ b/src/egl/main/eglcontext.h
@@ -24,6 +24,9 @@ struct _egl_context
 
    EGLint ClientAPI; /**< EGL_OPENGL_ES_API, EGL_OPENGL_API, EGL_OPENVG_API */
    EGLint ClientVersion; /**< 1 = OpenGLES 1.x, 2 = OpenGLES 2.x */
+
+   /* The real render buffer when a window surface is bound */
+   EGLint WindowRenderBuffer;
 };
 
 




More information about the mesa-commit mailing list