diff options
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/state_trackers/egl_g3d/common/egl_g3d.c | 17 | ||||
-rw-r--r-- | 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 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; |