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@amd.com> Cc: Guttula, Suresh <Suresh.Guttula@amd.com> Cc: mesa-stable@lists.freedesktop.org Cc: Christian König <christian.koenig@amd.com> Signed-off-by: Emil Velikov <emil.velikov@collabora.com>tags/17.2-branchpoint
@@ -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 \ |
@@ -346,18 +346,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 | |||
@@ -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 |
@@ -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) |
@@ -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) { |