[Mesa-dev] [PATCH 3/3] glx/dri3: Request non-vsynced Present for swapinterval zero.

Axel Davy axel.davy at ens.fr
Mon Nov 24 22:52:25 PST 2014


Hi,

This patch removes the tripple buffering behaviour that the GLX 
implementation
has with DRI3. I understand your concern for Medical softwares,
but perhaps this would be better handled with an user option.

Axel Davy

On 25/11/2014 04:00, Mario Kleiner wrote :
> Restores proper immediate tearing swap behaviour for
> OpenGL bufferswap under DRI3/Present.
>
> Cc: "10.3 10.4" <mesa-stable at lists.freedesktop.org>
> Signed-off-by: Mario Kleiner <mario.kleiner.de at gmail.com>
> ---
>   src/glx/dri3_glx.c | 6 +++++-
>   1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/src/glx/dri3_glx.c b/src/glx/dri3_glx.c
> index 5796491..c53be1b 100644
> --- a/src/glx/dri3_glx.c
> +++ b/src/glx/dri3_glx.c
> @@ -1518,6 +1518,7 @@ dri3_swap_buffers(__GLXDRIdrawable *pdraw, int64_t target_msc, int64_t divisor,
>      xcb_connection_t *c = XGetXCBConnection(dpy);
>      struct dri3_buffer *back;
>      int64_t ret = 0;
> +   uint32_t options = XCB_PRESENT_OPTION_NONE;
>   
>      unsigned flags = __DRI2_FLUSH_DRAWABLE;
>      if (flush)
> @@ -1557,6 +1558,9 @@ dri3_swap_buffers(__GLXDRIdrawable *pdraw, int64_t target_msc, int64_t divisor,
>         if (target_msc == 0)
>            target_msc = priv->msc + priv->swap_interval * (priv->send_sbc - priv->recv_sbc);
>   
> +      if (priv->swap_interval == 0)
> +          options |= XCB_PRESENT_OPTION_ASYNC;
> +
>         back->busy = 1;
>         back->last_swap = priv->send_sbc;
>         xcb_present_pixmap(c,
> @@ -1570,7 +1574,7 @@ dri3_swap_buffers(__GLXDRIdrawable *pdraw, int64_t target_msc, int64_t divisor,
>                            None,                                 /* target_crtc */
>                            None,
>                            back->sync_fence,
> -                         XCB_PRESENT_OPTION_NONE,
> +                         options,
>                            target_msc,
>                            divisor,
>                            remainder, 0, NULL);



More information about the xorg-devel mailing list