mpv/video/out/opengl
Dudemanguy f8e62d3d82 egl_helpers: fix create_context fallback behavior
The EGL stuff is really complicated because of historical reasons
(tl;dr: blame EGL). There was one edge case with EGL context creation
that lead to incorrect behavior. EGL_KHR_create_context was created with
EGL 1.4 (which mpv does support) but it is still possible for an EGL 1.4
device to not implement this extension. That means that none of the EGL
attrs that pass a specific opengl version work. So for this obscure
case, there is a fallback context creation at the very end which simply
creates an EGLContext without passing any special attrs.

This has another problem however. mpv has a hard requirement on at least
desktop opengl 2.1 or opengl ES 2.0 to function (we're not asking for
much here). Since the fallback EGL context creation has no version
checking, it is entirely possible to create an EGL context with a
desktop opengl version under 2.1. As you get further along in the code,
the user will encounter the hard opengl version check and then error
out. However, we're supposed to also actually check if GLES works
(that's what the opengl-es=auto option is for) so this is a bug.

The fix is to do a bit of code duplication and make a mpgl_check_version
specifically for if we hit the edge case of needing to create an EGL
context without the EGL_KHR_create_context extension. Grab the version
with the function pointer, check if it's under 210, if so destroy the
EGL context and set it to NULL. After that, if the user has set
opengl-es to auto, mpv will try GLES next. If it is set to no, then mpv
will simply fail as desired. Fixes #5915.

Sidenote: the ra_gl_ctx_test_version originally testing 140 doesn't make
any sense. Passing the version number in that function only does
something if the user has set opengl-restrict. What we need to do is to
pass the version of the created context to that function. If the version
is higher than the opengl-restrict option, then make this a failure.
2021-07-25 15:32:53 +00:00
..
angle_dynamic.c angle_dynamic: silence warnings during compilation 2016-11-25 09:49:49 +01:00
angle_dynamic.h vo_opengl: angle: rewrite with custom swap chain 2017-02-07 22:45:07 +11:00
common.c egl_helpers: fix create_context fallback behavior 2021-07-25 15:32:53 +00:00
common.h egl_helpers: fix create_context fallback behavior 2021-07-25 15:32:53 +00:00
context.c vo_gpu: opengl: make sure to always clean up debug callbacks 2020-04-15 07:21:36 +02:00
context.h vo: use a struct for vsync feedback stuff 2018-12-06 10:30:25 +01:00
context_android.c context_android: move common code to a separate file 2019-09-27 00:05:06 +03:00
context_angle.c options: change option macros and all option declarations 2020-03-18 19:52:01 +01:00
context_cocoa.c options: change option macros and all option declarations 2020-03-18 19:52:01 +01:00
context_drm_egl.c context_drm_egl: allow autoprobe selection 2021-07-23 17:54:58 +00:00
context_dxinterop.c vo: make swapchain-depth option generic for all VOs 2019-09-28 14:10:01 +03:00
context_glx.c vo_gpu: context_glx: Add X11 native resource 2019-11-16 15:35:32 -08:00
context_rpi.c rpi: destroy fullscreen change handling 2019-12-11 18:50:37 +01:00
context_wayland.c wayland: fix wl_surface_set_buffer_scale usage 2021-06-27 10:58:59 -05:00
context_win.c vo_gpu: win: remove exclusive-fullscreen detection hack 2017-12-20 14:53:41 +11:00
context_x11egl.c vo_gpu: EGL: hack for alpha on different platforms 2020-10-15 13:44:07 +00:00
egl_helpers.c egl_helpers: fix create_context fallback behavior 2021-07-25 15:32:53 +00:00
egl_helpers.h vo_gpu: opengl: make it work with EGL 1.4 2019-12-16 00:25:51 +01:00
formats.c vo_opengl: remove some dead code 2017-08-11 21:29:35 +02:00
formats.h vo_opengl: refactor into vo_gpu 2017-09-21 15:00:55 +02:00
gl_headers.h vo_gpu: opengl: add hack for ancient Mesa/GLX 2019-11-30 13:38:28 +01:00
hwdec_d3d11egl.c vo_gpu: hwdec_d3d11egl: add missing P010 format to supported list 2019-10-17 22:45:05 +02:00
hwdec_drmprime_drm.c drm_prime: double free bug 2020-03-05 18:12:57 +01:00
hwdec_dxva2egl.c hwdec: don't require setting legacy hwdec fields 2017-12-02 04:53:51 +01:00
hwdec_dxva2gldx.c client API: add a new way to pass X11 Display etc. to render API 2018-03-26 19:47:08 +02:00
hwdec_ios.m hwdec_ios: fix crash after mapper_init failure 2018-04-17 01:06:29 +03:00
hwdec_osx.c hwdec: don't require setting legacy hwdec fields 2017-12-02 04:53:51 +01:00
hwdec_rpi.c client API: add a new way to pass X11 Display etc. to render API 2018-03-26 19:47:08 +02:00
hwdec_vdpau.c vo_gpu: hwdec_vdpau: remove direct_mode 2019-12-28 14:31:06 -08:00
libmpv_gl.c client API: add a new way to pass X11 Display etc. to render API 2018-03-26 19:47:08 +02:00
oml_sync.c oml_sync: fix typo in comment 2019-09-20 00:32:29 +02:00
oml_sync.h vo_gpu: glx: move OML sync code to an independent file 2019-09-08 23:23:43 +10:00
ra_gl.c video: fix rgb30 component order 2020-05-09 18:02:57 +02:00
ra_gl.h vo_opengl: refactor into vo_gpu 2017-09-21 15:00:55 +02:00
utils.c vo_gpu: make screenshots use the GL renderer 2018-02-11 17:45:51 -08:00
utils.h vo_gpu: make screenshots use the GL renderer 2018-02-11 17:45:51 -08:00