Mesa (master): st/egl_g3d: Hook to update_buffer of the pipe screen.

Chia-I Wu olv at kemper.freedesktop.org
Fri Jan 15 02:20:55 PST 2010


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

Author: Chia-I Wu <olvaffe at gmail.com>
Date:   Fri Jan 15 17:45:52 2010 +0800

st/egl_g3d: Hook to update_buffer of the pipe screen.

It is a notification from the client APIs that the surface size might
have changed.

---

 .../state_trackers/egl_g3d/common/egl_g3d.c        |   17 +++++++++++++++++
 src/gallium/state_trackers/egl_g3d/common/native.h |    3 ++-
 2 files changed, 19 insertions(+), 1 deletions(-)

diff --git a/src/gallium/state_trackers/egl_g3d/common/egl_g3d.c b/src/gallium/state_trackers/egl_g3d/common/egl_g3d.c
index 7da9300..d0c9755 100644
--- a/src/gallium/state_trackers/egl_g3d/common/egl_g3d.c
+++ b/src/gallium/state_trackers/egl_g3d/common/egl_g3d.c
@@ -469,6 +469,22 @@ egl_g3d_flush_frontbuffer(struct pipe_screen *screen,
    }
 }
 
+/**
+ * Re-validate the context.
+ */
+static void
+egl_g3d_update_buffer(struct pipe_screen *screen, void *context_private)
+{
+   struct egl_g3d_context *gctx = egl_g3d_context(context_private);
+
+   /**
+    * It is likely that the surface has changed when this function is called.
+    * Set force_validate to skip an unnecessary check.
+    */
+   gctx->force_validate = EGL_TRUE;
+   egl_g3d_validate_context(gctx->base.Display, &gctx->base);
+}
+
 static EGLBoolean
 egl_g3d_terminate(_EGLDriver *drv, _EGLDisplay *dpy)
 {
@@ -517,6 +533,7 @@ egl_g3d_initialize(_EGLDriver *drv, _EGLDisplay *dpy,
    }
 
    gdpy->native->screen->flush_frontbuffer = egl_g3d_flush_frontbuffer;
+   gdpy->native->screen->update_buffer = egl_g3d_update_buffer;
 
    dpy->ClientAPIsMask = gdrv->api_mask;
 
diff --git a/src/gallium/state_trackers/egl_g3d/common/native.h b/src/gallium/state_trackers/egl_g3d/common/native.h
index 1c3b016..76f0e0c 100644
--- a/src/gallium/state_trackers/egl_g3d/common/native.h
+++ b/src/gallium/state_trackers/egl_g3d/common/native.h
@@ -117,7 +117,8 @@ struct native_display {
    /**
     * The pipe screen of the native display.
     *
-    * Note that the "flush_frontbuffer" callback will be overridden.
+    * Note that the "flush_frontbuffer" and "update_buffer" callbacks will be
+    * overridden.
     */
    struct pipe_screen *screen;
 



More information about the mesa-commit mailing list