summaryrefslogtreecommitdiffstats
path: root/src/egl/drivers/dri2
diff options
context:
space:
mode:
authorAxel Davy <[email protected]>2013-12-03 17:04:10 +0100
committerKristian Høgsberg <[email protected]>2013-12-04 15:58:29 -0800
commitafcce46fd505da51883000249ef29dd69f1d7791 (patch)
treea1d8cefd20cda8b53e3d3ff0ae4bbcf7c5fba564 /src/egl/drivers/dri2
parent33eb5eabeec0c17e81b6bb11be703701e4025d4e (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 <[email protected]> Cc: "10.0" [email protected]
Diffstat (limited to 'src/egl/drivers/dri2')
-rw-r--r--src/egl/drivers/dri2/platform_wayland.c14
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);