Enable throttling in SwapBuffers
authorAxel Davy <axel.davy@ens.fr>
Tue, 3 Dec 2013 16:04:10 +0000 (17:04 +0100)
committerKristian Høgsberg <krh@bitplanet.net>
Wed, 4 Dec 2013 23:58:29 +0000 (15:58 -0800)
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
src/egl/drivers/dri2/platform_wayland.c

index 8f462c02c76b625c56d28a7f500059951fb824a3..b1ac4b779b193f3391a8fb0302ed0fba62bf705a 100644 (file)
@@ -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);