diff options
author | Axel Davy <axel.davy@ens.fr> | 2013-12-03 17:04:10 +0100 |
---|---|---|
committer | Kristian Høgsberg <krh@bitplanet.net> | 2013-12-04 15:58:29 -0800 |
commit | afcce46fd505da51883000249ef29dd69f1d7791 (patch) | |
tree | a1d8cefd20cda8b53e3d3ff0ae4bbcf7c5fba564 /src | |
parent | 33eb5eabeec0c17e81b6bb11be703701e4025d4e (diff) |
Enable throttling in SwapBuffers
flush_with_flags, when available, allows the driver to throttle.
Using this suppress input lag issues that can be observed in heavy
rendering situations on non-intel cards.
Signed-off-by: Axel Davy <axel.davy@ens.fr>
Cc: "10.0" mesa-stable@lists.freedesktop.org
Diffstat (limited to 'src')
-rw-r--r-- | src/egl/drivers/dri2/platform_wayland.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index 8f462c02c76..b1ac4b779b1 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -557,6 +557,8 @@ dri2_swap_buffers_with_damage(_EGLDriver *drv, { struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); struct dri2_egl_surface *dri2_surf = dri2_egl_surface(draw); + struct dri2_egl_context *dri2_ctx; + _EGLContext *ctx; int i, ret = 0; while (dri2_surf->frame_callback && ret != -1) @@ -610,7 +612,17 @@ dri2_swap_buffers_with_damage(_EGLDriver *drv, } } - (*dri2_dpy->flush->flush)(dri2_surf->dri_drawable); + if (dri2_dpy->flush->base.version >= 4) { + ctx = _eglGetCurrentContext(); + dri2_ctx = dri2_egl_context(ctx); + (*dri2_dpy->flush->flush_with_flags)(dri2_ctx->dri_context, + dri2_surf->dri_drawable, + __DRI2_FLUSH_DRAWABLE, + __DRI2_THROTTLE_SWAPBUFFER); + } else { + (*dri2_dpy->flush->flush)(dri2_surf->dri_drawable); + } + (*dri2_dpy->flush->invalidate)(dri2_surf->dri_drawable); wl_surface_commit(dri2_surf->wl_win->surface); |