From 0b918edfb59d071c561a19b7d1a454cdbfd80e70 Mon Sep 17 00:00:00 2001 From: Emil Velikov Date: Sat, 2 Oct 2021 17:44:34 +0100 Subject: vo_gpu: opengl: reduce versions in mpgl_preferred_gl_versions Currently mpv requires a bare minimum of GL 2.1, although it tries to use 3.2+ core contexts when possible. The GLX and EGL spec effectively guarantee that the implementation will give you the highest compatible version possible. In other words: Requesting 3.2 core profile will always give you core profile and the version will be in the 3.2 .. 4.6 range - as supported by the drivers. Similarly for 2.1 - implementation will give you either: - 2.1 .. 3.1, or - 3.2 .. 4.6 compat profile This has been verified against the Mesa drivers (i965, iris, swrast) and Nvidia binary drivers. As such, drop the list to 320, 210 and terminating 0. v2: - mpgl_preferred_gl_versions -> mpgl_min_required_gl_versions - update ^^ comment Signed-off-by: Emil Velikov --- video/out/opengl/context.c | 10 ++-------- video/out/opengl/context.h | 2 +- video/out/opengl/context_glx.c | 4 ++-- video/out/opengl/egl_helpers.c | 4 ++-- 4 files changed, 7 insertions(+), 13 deletions(-) (limited to 'video') diff --git a/video/out/opengl/context.c b/video/out/opengl/context.c index c491039b66..c9f8445246 100644 --- a/video/out/opengl/context.c +++ b/video/out/opengl/context.c @@ -21,15 +21,9 @@ #include "utils.h" // 0-terminated list of desktop GL versions a backend should try to -// initialize. The first entry is the most preferred version. -const int mpgl_preferred_gl_versions[] = { - 440, - 430, - 400, - 330, +// initialize. Each entry is the minimum required version. +const int mpgl_min_required_gl_versions[] = { 320, - 310, - 300, 210, 0 }; diff --git a/video/out/opengl/context.h b/video/out/opengl/context.h index 2dd2517ef5..d78d17094c 100644 --- a/video/out/opengl/context.h +++ b/video/out/opengl/context.h @@ -4,7 +4,7 @@ #include "video/out/gpu/context.h" #include "common.h" -extern const int mpgl_preferred_gl_versions[]; +extern const int mpgl_min_required_gl_versions[]; // Returns whether or not a candidate GL version should be accepted or not // (based on the --opengl opts). Implementations may call this before diff --git a/video/out/opengl/context_glx.c b/video/out/opengl/context_glx.c index 4d9d993121..ee1fb30abf 100644 --- a/video/out/opengl/context_glx.c +++ b/video/out/opengl/context_glx.c @@ -312,8 +312,8 @@ static bool glx_init(struct ra_ctx *ctx) goto uninit; bool success = false; - for (int n = 0; mpgl_preferred_gl_versions[n]; n++) { - int version = mpgl_preferred_gl_versions[n]; + for (int n = 0; mpgl_min_required_gl_versions[n]; n++) { + int version = mpgl_min_required_gl_versions[n]; MP_VERBOSE(ctx, "Creating OpenGL %d.%d context...\n", MPGL_VER_P(version)); if (version >= 300) { diff --git a/video/out/opengl/egl_helpers.c b/video/out/opengl/egl_helpers.c index bcd85bfb73..2bdf3df0f2 100644 --- a/video/out/opengl/egl_helpers.c +++ b/video/out/opengl/egl_helpers.c @@ -184,8 +184,8 @@ static bool create_context(struct ra_ctx *ctx, EGLDisplay display, egl_ctx = eglCreateContext(display, config, EGL_NO_CONTEXT, attrs); } else { - for (int n = 0; mpgl_preferred_gl_versions[n]; n++) { - int ver = mpgl_preferred_gl_versions[n]; + for (int n = 0; mpgl_min_required_gl_versions[n]; n++) { + int ver = mpgl_min_required_gl_versions[n]; if (!ra_gl_ctx_test_version(ctx, ver, false)) continue; -- cgit v1.2.3