[Mesa-stable] [PATCH v2 12/27] auxiliary/vl: use vl_*_screen_create stubs when building w/o platform
Emil Velikov
emil.l.velikov at gmail.com
Fri May 5 11:23:24 UTC 2017
On 5 May 2017 at 10:30, Christian König <christian.koenig at amd.com> wrote:
> Am 04.05.2017 um 18:33 schrieb Emil Velikov:
>>
>> From: Emil Velikov <emil.velikov at 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.liu at amd.com>
>> Cc: "Guttula, Suresh" <Suresh.Guttula at amd.com>
>> Cc: mesa-stable at lists.freedesktop.org
>> Cc: Christian König <christian.koenig at amd.com>
>> Signed-off-by: Emil Velikov <emil.velikov at 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;
More information about the mesa-stable
mailing list