summaryrefslogtreecommitdiffstats
path: root/video/out/opengl
diff options
context:
space:
mode:
authorDudemanguy <random342@airmail.cc>2022-06-21 23:13:44 -0500
committerDudemanguy <random342@airmail.cc>2022-06-22 18:09:11 +0000
commit652f09a7a6665be2a04ff8ec4f741de435bd536f (patch)
tree64259646673fb739e96e267d28b74f8a4b0e1b96 /video/out/opengl
parent1ffdb9128d87dffe869c1e9f4024a16bfd0022c4 (diff)
downloadmpv-652f09a7a6665be2a04ff8ec4f741de435bd536f.tar.bz2
mpv-652f09a7a6665be2a04ff8ec4f741de435bd536f.tar.xz
x11: avoid XPresent API calls when it's not needed
This commit kind of mixes several related things together. The main thing is to avoid calling any XPresent functions or internal functions related to presentation when the feature is not auto-whitelisted or enabled by the user. Internally rework this so it all works off of a use_present bool (have_present is eliminated because having a non-zero present_code covers exactly the same thing) and make sure it updates on runtime. Finally, put some actual logging in here whenever XPresent is enabled/disabled. Fixes #10326.
Diffstat (limited to 'video/out/opengl')
-rw-r--r--video/out/opengl/context_glx.c9
-rw-r--r--video/out/opengl/context_x11egl.c9
2 files changed, 12 insertions, 6 deletions
diff --git a/video/out/opengl/context_glx.c b/video/out/opengl/context_glx.c
index affe7c0f27..5ff6038ce7 100644
--- a/video/out/opengl/context_glx.c
+++ b/video/out/opengl/context_glx.c
@@ -206,14 +206,17 @@ static bool glx_check_visible(struct ra_ctx *ctx)
static void glx_swap_buffers(struct ra_ctx *ctx)
{
glXSwapBuffers(ctx->vo->x11->display, ctx->vo->x11->window);
- vo_x11_present(ctx->vo);
- present_sync_swap(ctx->vo->x11->present);
+ if (ctx->vo->x11->use_present) {
+ vo_x11_present(ctx->vo);
+ present_sync_swap(ctx->vo->x11->present);
+ }
}
static void glx_get_vsync(struct ra_ctx *ctx, struct vo_vsync_info *info)
{
struct vo_x11_state *x11 = ctx->vo->x11;
- present_sync_get_info(x11->present, info);
+ if (ctx->vo->x11->use_present)
+ present_sync_get_info(x11->present, info);
}
static bool glx_init(struct ra_ctx *ctx)
diff --git a/video/out/opengl/context_x11egl.c b/video/out/opengl/context_x11egl.c
index 549498b435..39df64f5e5 100644
--- a/video/out/opengl/context_x11egl.c
+++ b/video/out/opengl/context_x11egl.c
@@ -82,14 +82,17 @@ static void mpegl_swap_buffers(struct ra_ctx *ctx)
struct priv *p = ctx->priv;
eglSwapBuffers(p->egl_display, p->egl_surface);
- vo_x11_present(ctx->vo);
- present_sync_swap(ctx->vo->x11->present);
+ if (ctx->vo->x11->use_present) {
+ vo_x11_present(ctx->vo);
+ present_sync_swap(ctx->vo->x11->present);
+ }
}
static void mpegl_get_vsync(struct ra_ctx *ctx, struct vo_vsync_info *info)
{
struct vo_x11_state *x11 = ctx->vo->x11;
- present_sync_get_info(x11->present, info);
+ if (ctx->vo->x11->use_present)
+ present_sync_get_info(x11->present, info);
}
static bool mpegl_init(struct ra_ctx *ctx)