aboutsummaryrefslogtreecommitdiffstats
path: root/src/loader/loader_dri3_helper.c
diff options
context:
space:
mode:
authorThomas Hellstrom <[email protected]>2017-08-10 17:10:47 +0200
committerThomas Hellstrom <[email protected]>2017-08-17 07:39:42 +0200
commit16d1a0bcdbfa376232e552a3382ee2a8751743a5 (patch)
treed59be65c261182066c124092c12cb36dec8243b0 /src/loader/loader_dri3_helper.c
parent1e83baeb4b6b6d557ae8b9c219347b1b252b27c7 (diff)
loader_dri3: Support GLX_SWAP_COPY_OML
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 <[email protected]> Reviewed-by: Michel Dänzer <[email protected]>
Diffstat (limited to 'src/loader/loader_dri3_helper.c')
-rw-r--r--src/loader/loader_dri3_helper.c9
1 files changed, 8 insertions, 1 deletions
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);