From 16d1a0bcdbfa376232e552a3382ee2a8751743a5 Mon Sep 17 00:00:00 2001 From: Thomas Hellstrom Date: Thu, 10 Aug 2017 17:10:47 +0200 Subject: [PATCH] loader_dri3: Support GLX_SWAP_COPY_OML MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Support the GLX_SWAP_COPY_OML method. When this method is requested, we use the same swapbuffer code path as EGL_BUFFER_PRESERVED. Signed-off-by: Thomas Hellstrom Reviewed-by: Michel Dänzer --- src/loader/loader_dri3_helper.c | 9 ++++++++- src/loader/loader_dri3_helper.h | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c index bc7c57f2bb2..2207b7543b9 100644 --- a/src/loader/loader_dri3_helper.c +++ b/src/loader/loader_dri3_helper.c @@ -311,6 +311,13 @@ loader_dri3_drawable_init(xcb_connection_t *conn, draw->vtable->set_drawable_size(draw, draw->width, draw->height); free(reply); + draw->swap_method = __DRI_ATTRIB_SWAP_UNDEFINED; + if (draw->ext->core->base.version >= 2) { + (void )draw->ext->core->getConfigAttrib(dri_config, + __DRI_ATTRIB_SWAP_METHOD, + &draw->swap_method); + } + /* * Make sure server has the same swap interval we do for the new * drawable. @@ -777,7 +784,7 @@ loader_dri3_swap_buffers_msc(struct loader_dri3_drawable *draw, * The force_copy parameter is used by EGL to attempt to preserve * the back buffer across a call to this function. */ - if (force_copy) + if (draw->swap_method == __DRI_ATTRIB_SWAP_COPY || force_copy) draw->cur_blit_source = LOADER_DRI3_BACK_ID(draw->cur_back); dri3_flush_present_events(draw); diff --git a/src/loader/loader_dri3_helper.h b/src/loader/loader_dri3_helper.h index 165c3cc9e08..cd9e8286792 100644 --- a/src/loader/loader_dri3_helper.h +++ b/src/loader/loader_dri3_helper.h @@ -158,6 +158,8 @@ struct loader_dri3_drawable { struct loader_dri3_extensions *ext; const struct loader_dri3_vtable *vtable; + + unsigned int swap_method; }; void -- 2.30.2