From: Chia-I Wu Date: Fri, 15 Jan 2010 09:45:52 +0000 (+0800) Subject: st/egl_g3d: Hook to update_buffer of the pipe screen. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b2c7b08299fc4701648207bc9d90676e147475b9;p=mesa.git 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. --- 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;