On 5 May 2017 at 10:30, Christian König <christian.koe...@amd.com> wrote: > Am 04.05.2017 um 18:33 schrieb Emil Velikov: >> >> From: Emil Velikov <emil.veli...@collabora.com> >> >> Provide a dummy stub when the user has opted w/o said platform, thus >> we can build the binaries without unnecessarily requiring X11/other >> headers. >> >> In order to avoid build and link-time issues, we remove the HAVE_DRI3 >> guards in the VA and VDPAU state-trackers. >> >> With this change st/va will return VA_STATUS_ERROR_ALLOCATION_FAILED >> instead of VA_STATUS_ERROR_UNIMPLEMENTED. That is fine since upstream >> users of libva such as vlc and mpv do little error checking, let >> alone distinguish between the two. >> >> Cc: Leo Liu <leo....@amd.com> >> Cc: "Guttula, Suresh" <suresh.gutt...@amd.com> >> Cc: mesa-sta...@lists.freedesktop.org >> Cc: Christian König <christian.koe...@amd.com> >> Signed-off-by: Emil Velikov <emil.veli...@collabora.com> >> --- >> Christian, others >> How do you feel about the ALLOCATION_FAILED vs UNIMPLEMENTED situation? >> Doing the latter is doable, albeit it will make the code a bit ugly. > > > I don't think that matters much, but resulting in UNIMPLEMENTED return code > when X backends are not compiled in indeed sounds cleaner. > > So price question is how much hassle would it be? Apart from that the > changes look good to me. > Hassle is zero, yet any solution that I can think of is quite ugly. See the example below and feel free to suggest anything else.
-Emil diff --git a/src/gallium/state_trackers/va/context.c b/src/gallium/state_trackers/va/context.c index ae9154a332a..9b7688320cc 100644 --- a/src/gallium/state_trackers/va/context.c +++ b/src/gallium/state_trackers/va/context.c @@ -26,6 +26,7 @@ * **************************************************************************/ +#include <stdbool.h> #include "pipe/p_screen.h" #include "pipe/p_video_codec.h" #include "util/u_memory.h" @@ -103,6 +104,7 @@ PUBLIC VAStatus VA_DRIVER_INIT_FUNC(VADriverContextP ctx) { vlVaDriver *drv; + bool implemented = true; if (!ctx) return VA_STATUS_ERROR_INVALID_CONTEXT; @@ -113,17 +115,26 @@ VA_DRIVER_INIT_FUNC(VADriverContextP ctx) switch (ctx->display_type) { case VA_DISPLAY_ANDROID: - FREE(drv); - return VA_STATUS_ERROR_UNIMPLEMENTED; + implemented = false; + break; case VA_DISPLAY_GLX: case VA_DISPLAY_X11: +#if !defined(HAVE_X11_PLATFORM) + implemented = false; +#endif drv->vscreen = vl_dri3_screen_create(ctx->native_dpy, ctx->x11_screen); if (!drv->vscreen) drv->vscreen = vl_dri2_screen_create(ctx->native_dpy, ctx->x11_screen); break; case VA_DISPLAY_WAYLAND: +#if !defined(HAVE_WAYLAND_PLATFORM) + implemented = false; +#endif case VA_DISPLAY_DRM: case VA_DISPLAY_DRM_RENDERNODES: { +#if !defined(HAVE_DRM_PLATFORM) + implemented = false; +#endif const struct drm_state *drm_info = (struct drm_state *) ctx->drm_state; if (!drm_info || drm_info->fd < 0) { @@ -139,6 +150,11 @@ VA_DRIVER_INIT_FUNC(VADriverContextP ctx) return VA_STATUS_ERROR_INVALID_DISPLAY; } + if (!implemented) { + FREE(drv); + return VA_STATUS_ERROR_UNIMPLEMENTED; + } + if (!drv->vscreen) goto error_screen; _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev