summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChia-I Wu <olvaffe@gmail.com>2010-01-15 17:45:52 +0800
committerChia-I Wu <olvaffe@gmail.com>2010-01-15 18:12:20 +0800
commitb2c7b08299fc4701648207bc9d90676e147475b9 (patch)
tree3c943898f83a09c82b5754877b800ec9ab26a7ef
parent51b00574a2ef81629548b079ef70c016bdd4251d (diff)
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.
-rw-r--r--src/gallium/state_trackers/egl_g3d/common/egl_g3d.c17
-rw-r--r--src/gallium/state_trackers/egl_g3d/common/native.h3
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 7da9300c20..d0c9755d5e 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 1c3b016b98..76f0e0c78a 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;