auxiliary/vl: use vl_*_screen_create stubs when building w/o platform
authorEmil Velikov <emil.velikov@collabora.com>
Tue, 2 May 2017 16:53:17 +0000 (17:53 +0100)
committerEmil Velikov <emil.l.velikov@gmail.com>
Fri, 19 May 2017 18:46:41 +0000 (19:46 +0100)
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>
src/gallium/auxiliary/Makefile.am
src/gallium/auxiliary/Makefile.sources
src/gallium/auxiliary/vl/vl_winsys.h
src/gallium/state_trackers/va/context.c
src/gallium/state_trackers/vdpau/device.c

index e25e31b89eadac33f18f1ba8944368ae4e16face..a64ead28e32a3f67319739808f8e38ff35e71679 100644 (file)
@@ -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 \
index baebee67a60589453c4747018bc917e3f53bc742..0e450ab3d7e4af25d41c0478c2c151f5e1c0a5dc 100644 (file)
@@ -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
 
index e1f9b274fccc2a7c9fbd14f9ed623edd7513e6e8..77277cefe8b8f2a4eb34ae24b28d16455175ea5c 100644 (file)
@@ -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
index 4224ed7f048ad528652d4a3fdaca3fc5539717c7..5159fceac91fa762819599d08155af79fa8a9c50 100644 (file)
@@ -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)
index 3ae3da3be1dea6c99a5aed74ce848235c282ad65..eae9f04ee10c17051a8d421b33da0558a3ddf37d 100644 (file)
@@ -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) {