video/out/gpu/context: prefer vulkan over opengl when reasonable

For most actual desktop users, vulkan should be the a superior
experience over opengl as this point and our autoprobe should pick that.
For linux users, vulkan on wayland is rapidly seeing improvements and is
far ahead of egl. There is no sign of that changing anytime soon and
working fifo is on the horizon, so really wayland users should just all
be using vulkan from now on. For x11, there is not a big difference
between using egl vs vulkan as far as I know and both work well. macOS
already prefers the vulkan backend over the libmpv one anyways, and
finally windows still defaults to d3d11. Probably virtually no one uses
opengl on windows, but vulkan is reasonably common among windows users
and it doesn't make any sense to prefer opengl over it.

The two outliers here are Android and VK_KHR_display. On Android, vulkan
drivers are probably just a total disaster and let's not put ourselves
in that mess if there's no reason to. For VK_KHR_display, it actually
works fine except for one really big problem: VT switching doesn't work.
If you try it, enjoy losing all input and being forced to do a hard
reboot. It might be fixable if you use logind or something, but the
method of using signals like the drm context does won't work because
VK_KHR_display uses render nodes not primary nodes. Also, the opengl drm
context could support hdr in theory (some attempts were made but none
succesful) so it is probably "better". Maybe. Anyways, for these two
platforms, we still prefer opengl.
This commit is contained in:
Dudemanguy 2024-10-14 19:48:30 -05:00
parent a8d91b0b13
commit 851df7088a
1 changed files with 17 additions and 14 deletions

View File

@ -82,6 +82,22 @@ static const struct ra_ctx_fns *contexts[] = {
&ra_ctx_d3d11, &ra_ctx_d3d11,
#endif #endif
// Vulkan contexts:
#if HAVE_VULKAN
#if HAVE_WIN32_DESKTOP
&ra_ctx_vulkan_win,
#endif
#if HAVE_WAYLAND
&ra_ctx_vulkan_wayland,
#endif
#if HAVE_X11
&ra_ctx_vulkan_xlib,
#endif
#if HAVE_COCOA && HAVE_SWIFT
&ra_ctx_vulkan_mac,
#endif
#endif
// OpenGL contexts: // OpenGL contexts:
#if HAVE_EGL_ANDROID #if HAVE_EGL_ANDROID
&ra_ctx_android, &ra_ctx_android,
@ -108,27 +124,14 @@ static const struct ra_ctx_fns *contexts[] = {
&ra_ctx_drm_egl, &ra_ctx_drm_egl,
#endif #endif
// Vulkan contexts: // Vulkan contexts (fallbacks):
#if HAVE_VULKAN #if HAVE_VULKAN
#if HAVE_ANDROID #if HAVE_ANDROID
&ra_ctx_vulkan_android, &ra_ctx_vulkan_android,
#endif #endif
#if HAVE_WIN32_DESKTOP
&ra_ctx_vulkan_win,
#endif
#if HAVE_WAYLAND
&ra_ctx_vulkan_wayland,
#endif
#if HAVE_X11
&ra_ctx_vulkan_xlib,
#endif
#if HAVE_VK_KHR_DISPLAY #if HAVE_VK_KHR_DISPLAY
&ra_ctx_vulkan_display, &ra_ctx_vulkan_display,
#endif #endif
#if HAVE_COCOA && HAVE_SWIFT
&ra_ctx_vulkan_mac,
#endif
#endif #endif
}; };