From b2c7b08299fc4701648207bc9d90676e147475b9 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Fri, 15 Jan 2010 17:45:52 +0800 Subject: 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. --- src/gallium/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 deletion(-) (limited to 'src/gallium/state_trackers') 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 7da9300c200..d0c9755d5ed 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 1c3b016b98a..76f0e0c78ac 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; -- cgit v1.2.3