[Mesa-stable] [PATCH v2 12/27] auxiliary/vl: use vl_*_screen_create stubs when building w/o platform
Christian König
christian.koenig at amd.com
Fri May 5 09:30:24 UTC 2017
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.
Regards,
Christian.
> ---
> src/gallium/auxiliary/Makefile.am | 19 ++++++++++---------
> src/gallium/auxiliary/Makefile.sources | 10 +++++++---
> src/gallium/auxiliary/vl/vl_winsys.h | 21 ++++++++++++++++++---
> src/gallium/state_trackers/va/context.c | 2 --
> src/gallium/state_trackers/vdpau/device.c | 2 --
> 5 files changed, 35 insertions(+), 19 deletions(-)
>
> diff --git a/src/gallium/auxiliary/Makefile.am b/src/gallium/auxiliary/Makefile.am
> index e25e31b89ea..a64ead28e32 100644
> --- a/src/gallium/auxiliary/Makefile.am
> +++ b/src/gallium/auxiliary/Makefile.am
> @@ -88,23 +88,24 @@ if NEED_GALLIUM_VL_WINSYS
>
> noinst_LTLIBRARIES += libgalliumvlwinsys.la
>
> -libgalliumvlwinsys_la_CFLAGS = \
> - $(COMMON_VL_CFLAGS)
> +libgalliumvlwinsys_la_CFLAGS = $(COMMON_VL_CFLAGS)
> +libgalliumvlwinsys_la_SOURCES = $(VL_WINSYS_SOURCES)
>
> -libgalliumvlwinsys_la_SOURCES = \
> - $(VL_WINSYS_SOURCES)
> +if HAVE_PLATFORM_X11
> +libgalliumvlwinsys_la_SOURCES += $(VL_WINSYS_DRI2_SOURCES)
>
> if HAVE_DRI3
> -
> -libgalliumvlwinsys_la_SOURCES += \
> - $(VL_WINSYS_DRI3_SOURCES)
> -
> +libgalliumvlwinsys_la_SOURCES += $(VL_WINSYS_DRI3_SOURCES)
> endif
> -
> endif
>
> +if HAVE_PLATFORM_DRM
> +libgalliumvlwinsys_la_SOURCES += $(VL_WINSYS_DRM_SOURCES)
> endif
>
> +endif # NEED_GALLIUM_VL_WINSYS
> +endif # NEED_GALLIUM_VL
> +
> EXTRA_DIST = \
> SConscript \
> indices/u_indices.c \
> diff --git a/src/gallium/auxiliary/Makefile.sources b/src/gallium/auxiliary/Makefile.sources
> index dbdb3ca8152..a7dec6054d6 100644
> --- a/src/gallium/auxiliary/Makefile.sources
> +++ b/src/gallium/auxiliary/Makefile.sources
> @@ -343,18 +343,22 @@ VL_SOURCES := \
> vl/vl_video_buffer.c \
> vl/vl_video_buffer.h \
> vl/vl_vlc.h \
> - vl/vl_winsys.h \
> vl/vl_zscan.c \
> vl/vl_zscan.h
>
> # XXX: Nuke this as our dri targets no longer depend on VL.
> VL_WINSYS_SOURCES := \
> - vl/vl_winsys_dri.c \
> - vl/vl_winsys_drm.c
> + vl/vl_winsys.h
> +
> +VL_WINSYS_DRI2_SOURCES := \
> + vl/vl_winsys_dri.c
>
> VL_WINSYS_DRI3_SOURCES := \
> vl/vl_winsys_dri3.c
>
> +VL_WINSYS_DRM_SOURCES := \
> + vl/vl_winsys_drm.c
> +
> VL_STUB_SOURCES := \
> vl/vl_stubs.c
>
> diff --git a/src/gallium/auxiliary/vl/vl_winsys.h b/src/gallium/auxiliary/vl/vl_winsys.h
> index e1f9b274fcc..77277cefe8b 100644
> --- a/src/gallium/auxiliary/vl/vl_winsys.h
> +++ b/src/gallium/auxiliary/vl/vl_winsys.h
> @@ -32,7 +32,9 @@
> #ifndef vl_winsys_h
> #define vl_winsys_h
>
> +#ifdef HAVE_X11_PLATFORM
> #include <X11/Xlib.h>
> +#endif
> #include "pipe/p_defines.h"
> #include "pipe/p_format.h"
>
> @@ -68,15 +70,28 @@ struct vl_screen
> struct pipe_loader_device *dev;
> };
>
> +#ifdef HAVE_X11_PLATFORM
> struct vl_screen *
> vl_dri2_screen_create(Display *display, int screen);
> +#else
> +static inline struct vl_screen *
> +vl_dri2_screen_create(void *display, int screen) { return NULL; };
> +#endif
>
> +#if defined(HAVE_X11_PLATFORM) && defined(HAVE_DRI3)
> struct vl_screen *
> -vl_drm_screen_create(int fd);
> +vl_dri3_screen_create(Display *display, int screen);
> +#else
> +static inline struct vl_screen *
> +vl_dri3_screen_create(void *display, int screen) { return NULL; };
> +#endif
>
> -#if defined(HAVE_DRI3)
> +#ifdef HAVE_DRM_PLATFORM
> struct vl_screen *
> -vl_dri3_screen_create(Display *display, int screen);
> +vl_drm_screen_create(int fd);
> +#else
> +static inline struct vl_screen *
> +vl_drm_screen_create(int fd) { return NULL; };
> #endif
>
> #endif
> diff --git a/src/gallium/state_trackers/va/context.c b/src/gallium/state_trackers/va/context.c
> index 4224ed7f048..5159fceac91 100644
> --- a/src/gallium/state_trackers/va/context.c
> +++ b/src/gallium/state_trackers/va/context.c
> @@ -118,9 +118,7 @@ VA_DRIVER_INIT_FUNC(VADriverContextP ctx)
> return VA_STATUS_ERROR_UNIMPLEMENTED;
> case VA_DISPLAY_GLX:
> case VA_DISPLAY_X11:
> -#if defined(HAVE_DRI3)
> drv->vscreen = vl_dri3_screen_create(ctx->native_dpy, ctx->x11_screen);
> -#endif
> if (!drv->vscreen)
> drv->vscreen = vl_dri2_screen_create(ctx->native_dpy, ctx->x11_screen);
> if (!drv->vscreen)
> diff --git a/src/gallium/state_trackers/vdpau/device.c b/src/gallium/state_trackers/vdpau/device.c
> index 3ae3da3be1d..eae9f04ee10 100644
> --- a/src/gallium/state_trackers/vdpau/device.c
> +++ b/src/gallium/state_trackers/vdpau/device.c
> @@ -63,9 +63,7 @@ vdp_imp_device_create_x11(Display *display, int screen, VdpDevice *device,
>
> pipe_reference_init(&dev->reference, 1);
>
> -#if defined(HAVE_DRI3)
> dev->vscreen = vl_dri3_screen_create(display, screen);
> -#endif
> if (!dev->vscreen)
> dev->vscreen = vl_dri2_screen_create(display, screen);
> if (!dev->vscreen) {
More information about the mesa-stable
mailing list