[Cogl] [PATCH 2/3] Prefer OML_sync_control over SGI_video_sync when waiting for swap
Robert Bragg
robert at sixbynine.org
Tue Dec 4 03:04:59 PST 2012
This looks good to land to me:
Reviewed-by: Robert Bragg <robert at linux.intel.com>
thanks,
- Robert
On Wed, Nov 28, 2012 at 4:47 PM, <otaylor at redhat.com> wrote:
> From: "Owen W. Taylor" <otaylor at fishsoup.net>
>
> When we block waiting for the swap, prefer doing that using
> glXWaitForMsc() from OML_sync_control because that returns a system
> time value for the precise time of the swap.
> ---
> cogl/winsys/cogl-winsys-glx-feature-functions.h | 23 +++++++++++++++++
> cogl/winsys/cogl-winsys-glx.c | 34
> ++++++++++++++++++++-----
> 2 files changed, 50 insertions(+), 7 deletions(-)
>
> diff --git a/cogl/winsys/cogl-winsys-glx-feature-functions.h
> b/cogl/winsys/cogl-winsys-glx-feature-functions.h
> index 71fd827..837b22b 100644
> --- a/cogl/winsys/cogl-winsys-glx-feature-functions.h
> +++ b/cogl/winsys/cogl-winsys-glx-feature-functions.h
> @@ -84,6 +84,29 @@ COGL_WINSYS_FEATURE_FUNCTION (int, glXSwapInterval,
> (int interval))
> COGL_WINSYS_FEATURE_END ()
>
> +COGL_WINSYS_FEATURE_BEGIN (sync_control,
> + "OML\0",
> + "sync_control\0",
> + 0,
> + 0,
> + 0)
> +COGL_WINSYS_FEATURE_FUNCTION (Bool, glXGetSyncValues,
> + (Display* dpy,
> + GLXDrawable drawable,
> + int64_t* ust,
> + int64_t* msc,
> + int64_t* sbc))
> +COGL_WINSYS_FEATURE_FUNCTION (Bool, glXWaitForMsc,
> + (Display* dpy,
> + GLXDrawable drawable,
> + int64_t target_msc,
> + int64_t divisor,
> + int64_t remainder,
> + int64_t* ust,
> + int64_t* msc,
> + int64_t* sbc))
> +COGL_WINSYS_FEATURE_END ()
> +
> COGL_WINSYS_FEATURE_BEGIN (copy_sub_buffer,
> "MESA\0",
> "copy_sub_buffer\0",
> diff --git a/cogl/winsys/cogl-winsys-glx.c b/cogl/winsys/cogl-winsys-glx.c
> index e7f83ab..4714c9a 100644
> --- a/cogl/winsys/cogl-winsys-glx.c
> +++ b/cogl/winsys/cogl-winsys-glx.c
> @@ -525,7 +525,8 @@ update_winsys_features (CoglContext *context, GError
> **error)
> FALSE);
> }
>
> - if (glx_renderer->pf_glXWaitVideoSync)
> + if (glx_renderer->pf_glXWaitVideoSync ||
> + glx_renderer->pf_glXWaitForMsc)
> COGL_FLAGS_SET (context->winsys_features,
> COGL_WINSYS_FEATURE_VBLANK_WAIT,
> TRUE);
> @@ -1224,14 +1225,33 @@ _cogl_winsys_wait_for_vblank (void)
>
> glx_renderer = ctx->display->renderer->winsys;
>
> - if (glx_renderer->pf_glXGetVideoSync)
> + if (glx_renderer->pf_glXWaitForMsc ||
> + glx_renderer->pf_glXGetVideoSync)
> {
> - uint32_t current_count;
>
> - glx_renderer->pf_glXGetVideoSync (¤t_count);
> - glx_renderer->pf_glXWaitVideoSync (2,
> - (current_count + 1) % 2,
> - ¤t_count);
> + if (glx_renderer->pf_glXWaitForMsc)
> + {
> + CoglOnscreenGLX *glx_onscreen = onscreen->winsys;
> + Drawable drawable = glx_onscreen->glxwin;
> + int64_t ust;
> + int64_t msc;
> + int64_t sbc;
> +
> + glx_renderer->pf_glXGetSyncValues (xlib_renderer->xdpy,
> drawable,
> + &ust, &msc, &sbc);
> + glx_renderer->pf_glXWaitForMsc (xlib_renderer->xdpy, drawable,
> + 0, 2, (msc + 1) % 2,
> + &ust, &msc, &sbc);
> + }
> + else
> + {
> + uint32_t current_count;
> +
> + glx_renderer->pf_glXGetVideoSync (¤t_count);
> + glx_renderer->pf_glXWaitVideoSync (2,
> + (current_count + 1) % 2,
> + ¤t_count);
> + }
> }
> }
>
> --
> 1.7.12.1
>
> _______________________________________________
> Cogl mailing list
> Cogl at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/cogl
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/cogl/attachments/20121204/a8f9a31a/attachment.html>
More information about the Cogl
mailing list