[mutter/wip/rstrode/finish-to-boost] cogl: glFinish before swap buffers for speed boost



commit 4035543d4f73b9f2571c1f2dea67de5d0b1352f0
Author: Ray Strode <rstrode redhat com>
Date:   Fri Aug 18 12:50:17 2017 -0400

    cogl: glFinish before swap buffers for speed boost
    
    The intel driver will automatically boost the clockspeed
    of the GPU when the client calls glFinish and there's
    pending drawing.
    
    This commit makes sure to do that call explicitly before
    swap buffers to help prevent animation stutter.

 cogl/cogl/winsys/cogl-winsys-egl.c |   14 ++++++++++++++
 1 files changed, 14 insertions(+), 0 deletions(-)
---
diff --git a/cogl/cogl/winsys/cogl-winsys-egl.c b/cogl/cogl/winsys/cogl-winsys-egl.c
index 8f2bcc7..7dd4a0a 100644
--- a/cogl/cogl/winsys/cogl-winsys-egl.c
+++ b/cogl/cogl/winsys/cogl-winsys-egl.c
@@ -740,6 +740,15 @@ _cogl_winsys_onscreen_bind (CoglOnscreen *onscreen)
   bind_onscreen (onscreen);
 }
 
+static void
+_cogl_winsys_wait_for_gpu (CoglOnscreen *onscreen)
+{
+  CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
+  CoglContext *ctx = framebuffer->context;
+
+  ctx->glFinish ();
+}
+
 #ifndef EGL_BUFFER_AGE_EXT
 #define EGL_BUFFER_AGE_EXT 0x313D
 #endif
@@ -820,6 +829,11 @@ _cogl_winsys_onscreen_swap_buffers_with_damage (CoglOnscreen *onscreen,
                                  COGL_FRAMEBUFFER (onscreen),
                                  COGL_FRAMEBUFFER_STATE_BIND);
 
+  /* Waiting for the GPU here lets the kernel know it should boost
+   * the GPU clock speed
+   */
+  _cogl_winsys_wait_for_gpu (onscreen);
+
   if (n_rectangles && egl_renderer->pf_eglSwapBuffersWithDamage)
     {
       CoglFramebuffer *fb = COGL_FRAMEBUFFER (onscreen);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]