vo_gpu: semi-fix --gpu-context/--gpu-api options and help output

This was confusing at best. Change it to output the actual choices.
(Seems like in the end it's always me who has to clean up other people's
bullshit.)

Context names were not unique - but they should be, so fix it. The whole
point of the original --opengl-backend option was to side-step the
tricky auto-detection, so you know exactly what you get. The goal of
this commit is to make --gpu-context work the same way. Fix the
non-unique names by appending "vk" to the names.

Keep in mind that this was not suitable for slecting the "UI" backend
anyway, since "x11" would force GLX, whereas people on not-NVIDIA
actually want "x11egl". Users trying to use --gpu-context=x11 to force
the X11 backend would always end up with GLX, which would at least break
VAAPI hardware decoding for them. Basically the idea that this option
could select the "UI" type is completely broken - it selects an
implementation, which implies a UI. Selecting the UI type This would
require a separate mechanism. (Although in theory this separate
mechanism could be part of the --gpu-context option - in any case,
someone would have to implement it.)

To achieve help output that can actually be understood, just duplicate
the code. Most of that code is duplicated anyway, and trying to share
just the list code with the result of making the output unreadable
doesn't make too much sense. If we wanted to save code/effort, we could
just remove the help output altogether.

--gpu-api has non-unique entries, and it would be nice to group them
(e.g. list all OpenGL capable contexts with "opengl"), but C makes this
simple idea too much of a pain, so don't do it.

Also remove a stray tab from the android entry on the manpage.
This commit is contained in:
wm4 2017-10-16 10:53:33 +02:00
parent c6b97a4935
commit 7cfae5adce
5 changed files with 25 additions and 22 deletions

View File

@ -4626,7 +4626,9 @@ The following video options are currently all specific to ``--vo=gpu`` and
cocoa
Cocoa/OS X
win
Win32/WGL, VK_KHR_win32_surface
Win32/WGL
winvk
VK_KHR_win32_surface
angle
Direct3D11 through the OpenGL ES translation layer ANGLE. This supports
almost everything the ``win`` backend does (if the ANGLE build is new
@ -4636,18 +4638,22 @@ The following video options are currently all specific to ``--vo=gpu`` and
on Nvidia and AMD. Newer Intel chips with the latest drivers may also
work.
x11
X11/GLX, VK_KHR_xlib_surface
X11/GLX
x11vk
VK_KHR_xlib_surface
x11probe
For internal autoprobing, equivalent to ``x11`` otherwise. Don't use
directly, it could be removed without warning as autoprobing is changed.
wayland
Wayland/EGL, VK_KHR_wayland_surface
Wayland/EGL
waylandvk
VK_KHR_wayland_surface
drm
DRM/EGL
x11egl
X11/EGL
android
Android/EGL. Requires ``--wid`` be set to an ``android.view.Surface``.
Android/EGL. Requires ``--wid`` be set to an ``android.view.Surface``.
mali-fbdev
Direct fbdev/EGL support on some ARM/MALI devices.
vdpauglx

View File

@ -111,24 +111,16 @@ static const struct ra_ctx_fns *contexts[] = {
#endif
};
static bool get_help(struct mp_log *log, struct bstr param)
{
if (bstr_equals0(param, "help")) {
mp_info(log, "GPU contexts / APIs:\n");
mp_info(log, " auto (autodetect)\n");
for (int n = 0; n < MP_ARRAY_SIZE(contexts); n++)
mp_info(log, " %s (%s)\n", contexts[n]->name, contexts[n]->type);
return true;
}
return false;
}
int ra_ctx_validate_api(struct mp_log *log, const struct m_option *opt,
struct bstr name, struct bstr param)
{
if (get_help(log, param))
if (bstr_equals0(param, "help")) {
mp_info(log, "GPU APIs (contexts):\n");
mp_info(log, " auto (autodetect)\n");
for (int n = 0; n < MP_ARRAY_SIZE(contexts); n++)
mp_info(log, " %s (%s)\n", contexts[n]->type, contexts[n]->name);
return M_OPT_EXIT;
}
if (bstr_equals0(param, "auto"))
return 1;
for (int i = 0; i < MP_ARRAY_SIZE(contexts); i++) {
@ -141,8 +133,13 @@ int ra_ctx_validate_api(struct mp_log *log, const struct m_option *opt,
int ra_ctx_validate_context(struct mp_log *log, const struct m_option *opt,
struct bstr name, struct bstr param)
{
if (get_help(log, param))
if (bstr_equals0(param, "help")) {
mp_info(log, "GPU contexts (APIs):\n");
mp_info(log, " auto (autodetect)\n");
for (int n = 0; n < MP_ARRAY_SIZE(contexts); n++)
mp_info(log, " %s (%s)\n", contexts[n]->name, contexts[n]->type);
return M_OPT_EXIT;
}
if (bstr_equals0(param, "auto"))
return 1;
for (int i = 0; i < MP_ARRAY_SIZE(contexts); i++) {

View File

@ -123,7 +123,7 @@ static void wayland_vk_wait_events(struct ra_ctx *ctx, int64_t until_time_us)
const struct ra_ctx_fns ra_ctx_vulkan_wayland = {
.type = "vulkan",
.name = "wayland",
.name = "waylandvk",
.reconfig = wayland_vk_reconfig,
.control = wayland_vk_control,
.wakeup = wayland_vk_wakeup,

View File

@ -97,7 +97,7 @@ static int win_control(struct ra_ctx *ctx, int *events, int request, void *arg)
const struct ra_ctx_fns ra_ctx_vulkan_win = {
.type = "vulkan",
.name = "win",
.name = "winvk",
.reconfig = win_reconfig,
.control = win_control,
.init = win_init,

View File

@ -107,7 +107,7 @@ static void xlib_wait_events(struct ra_ctx *ctx, int64_t until_time_us)
const struct ra_ctx_fns ra_ctx_vulkan_xlib = {
.type = "vulkan",
.name = "x11",
.name = "x11vk",
.reconfig = xlib_reconfig,
.control = xlib_control,
.wakeup = xlib_wakeup,