Index: head/multimedia/libva-intel-media-driver/files/patch-fbres =================================================================== --- head/multimedia/libva-intel-media-driver/files/patch-fbres (revision 485571) +++ head/multimedia/libva-intel-media-driver/files/patch-fbres (revision 485572) @@ -1,64 +1,77 @@ Get framebuffer resolution on more platforms +media_driver/linux/common/codec/ddi/media_libva_decoder.cpp:48:10: fatal error: 'linux/fb.h' file not found +#include + ^~~~~~~~~~~~ +media_driver/linux/common/codec/ddi/media_libva_decoder.cpp:55:43: error: variable has incomplete type 'struct fb_var_screeninfo' + struct fb_var_screeninfo vsinfo; + ^ +media_driver/linux/common/codec/ddi/media_libva_decoder.cpp:62:22: error: use of undeclared identifier 'FBIOGET_VSCREENINFO' + if(ioctl(fd, FBIOGET_VSCREENINFO, &vsinfo) < 0) + ^ +media_driver/linux/common/ddi/media_libva.cpp:39:10: fatal error: 'linux/fb.h' file not found +#include + ^~~~~~~~~~~~ + --- media_driver/linux/common/codec/ddi/media_libva_decoder.cpp.orig 2018-10-01 21:39:52 UTC +++ media_driver/linux/common/codec/ddi/media_libva_decoder.cpp @@ -45,7 +45,39 @@ #include #endif +#if defined(__linux__) #include +#define DEFAULT_FBDEV "/dev/graphics/fb0" +#elif defined(__DragonFly__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__sun) +#include +# if defined(__sun) +#define DEFAULT_FBDEV "/dev/fb" +# else +#define DEFAULT_FBDEV "/dev/ttyv0" +# endif +#define FBIOGET_VSCREENINFO FBIOGTYPE +#define fb_var_screeninfo fbtype +#define xres fb_width +#define yres fb_height +#elif defined(__NetBSD__) || defined(__OpenBSD__) +#include +# if defined(__OpenBSD__) +#define DEFAULT_FBDEV "/dev/ttyC0" +# else +#define DEFAULT_FBDEV "/dev/ttyE0" +# endif +#define FBIOGET_VSCREENINFO WSDISPLAYIO_GINFO +#define fb_var_screeninfo wsdisplay_fbinfo +#define xres width +#define yres height +#else +#define DEFAULT_FBDEV "/dev/fb0" +#define FBIOGET_VSCREENINFO 0 +struct fb_var_screeninfo { + uint32_t xres; + uint32_t yres; +}; +#endif typedef MediaDdiFactory DdiDecodeFactory; static int32_t DdiDecode_GetDisplayInfo(VADriverContextP ctx) @@ -56,7 +88,7 @@ static int32_t DdiDecode_GetDisplayInfo(VADriverContex vsinfo.xres = 0; vsinfo.yres = 0; - fd = open("/dev/graphics/fb0",O_RDONLY); + fd = open(DEFAULT_FBDEV,O_RDONLY); if(fd > 0) { if(ioctl(fd, FBIOGET_VSCREENINFO, &vsinfo) < 0) --- media_driver/linux/common/ddi/media_libva.cpp.orig 2018-10-01 21:39:52 UTC +++ media_driver/linux/common/ddi/media_libva.cpp @@ -36,8 +36,6 @@ #include #endif -#include - #include "media_libva_util.h" #include "media_libva_decoder.h" #include "media_libva_encoder.h" Index: head/multimedia/libva-intel-media-driver/files/patch-glibc =================================================================== --- head/multimedia/libva-intel-media-driver/files/patch-glibc (revision 485571) +++ head/multimedia/libva-intel-media-driver/files/patch-glibc (revision 485572) @@ -1,45 +1,52 @@ makedev() is defined in on BSDs and on Solaris +mon/os/libdrm/xf86drm.c:50:10: fatal error: 'sys/sysmacros.h' file not found +#include + ^~~~~~~~~~~~~~~~~ +media_driver/linux/ult/libdrm_mock/xf86drm_mock.c:50:10: fatal error: 'sys/sysmacros.h' file not found +#include + ^~~~~~~~~~~~~~~~~ + --- media_driver/linux/common/os/libdrm/xf86drm.c.orig 2018-10-01 21:39:52 UTC +++ media_driver/linux/common/os/libdrm/xf86drm.c @@ -47,13 +47,15 @@ #include #include #include +#if defined(__GLIBC__) || defined(__linux__) #include +#endif #include #define stat_t struct stat #include #include #include -#ifdef HAVE_SYS_MKDEV_H +#ifdef __sun # include /* defines major(), minor(), and makedev() on Solaris */ #endif --- media_driver/linux/ult/libdrm_mock/xf86drm_mock.c.orig 2018-10-01 21:39:52 UTC +++ media_driver/linux/ult/libdrm_mock/xf86drm_mock.c @@ -47,16 +47,20 @@ #include #include #include +#if defined(__GLIBC__) || defined(__linux__) #include +#endif #include #define stat_t struct stat #include #include #include -#ifdef HAVE_SYS_MKDEV_H +#ifdef __sun # include /* defines major(), minor(), and makedev() on Solaris */ #endif +#if defined(__GLIBC__) || defined(__linux__) #include +#endif /* Not all systems have MAP_FAILED defined */ #ifndef MAP_FAILED Index: head/multimedia/libva-intel-media-driver/files/patch-i386-atomics =================================================================== --- head/multimedia/libva-intel-media-driver/files/patch-i386-atomics (revision 485571) +++ head/multimedia/libva-intel-media-driver/files/patch-i386-atomics (revision 485572) @@ -1,18 +1,22 @@ +FreeBSD doesn't ship libatomic, so use __sync* builtins instead: + media_driver/CMakeFiles/iHD_drv_video_OBJ.dir/linux/common/os/mos_context_specific.cpp.o: In function `OsContextSpecific::SetSliceCount(unsigned int*)': media_driver/linux/common/os/mos_context_specific.cpp:441: undefined reference to `__atomic_load_8' media_driver/linux/common/os/mos_context_specific.cpp:444: undefined reference to `__atomic_store_8' c++: error: linker command failed with exit code 1 (use -v to see invocation) + +https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=220822 --- media_driver/linux/common/os/mos_context_specific.cpp.orig 2018-10-01 21:39:52 UTC +++ media_driver/linux/common/os/mos_context_specific.cpp @@ -437,6 +437,10 @@ void OsContextSpecific::SetSliceCount(uint32_t *pSlice for (int sliceCountShm = m_gtSystemInfo.SliceCount; sliceCountShm > 0; sliceCountShm--) { +#if defined(__clang__) && defined(__i386__) +#define __atomic_load_n(ptr, order) __sync_fetch_and_add(ptr, 0) +#define __atomic_store_n(ptr, val, order) __sync_swap(ptr, val) +#endif uint64_t* pTimestampShm = (uint64_t*)m_sseuShm + sliceCountShm; uint64_t timestampShm = __atomic_load_n(pTimestampShm, __ATOMIC_SEQ_CST); if (sliceNum == sliceCountShm) Index: head/multimedia/libva-intel-media-driver/files/patch-memalign =================================================================== --- head/multimedia/libva-intel-media-driver/files/patch-memalign (revision 485571) +++ head/multimedia/libva-intel-media-driver/files/patch-memalign (revision 485572) @@ -1,52 +1,63 @@ memalign is Linux-specific, so use C11 aligned_alloc instead +In file included from media_driver/agnostic/common/os/mos_utilities.c:36: +/usr/include/malloc.h:3:2: error: " has been replaced by " +#error " has been replaced by " + ^ +media_driver/agnostic/common/os/mos_utilities.c:3096:11: error: use of undeclared identifier 'memalign' + ptr = _aligned_malloc(size, alignment); + ^ +media_driver/linux/common/os/mos_utilities_specific.h:91:43: note: expanded from macro '_aligned_malloc' +#define _aligned_malloc(size, alignment) memalign(alignment, size) + ^ + --- media_driver/agnostic/common/os/mos_utilities.c.orig 2018-10-01 21:39:52 UTC +++ media_driver/agnostic/common/os/mos_utilities.c @@ -33,7 +33,6 @@ #endif #include //open -#include // For memalign #include // memset #include // atoi atol #include --- media_driver/agnostic/ult/cm/buffer_up_test.cpp.orig 2018-10-01 21:39:52 UTC +++ media_driver/agnostic/ult/cm/buffer_up_test.cpp @@ -21,7 +21,6 @@ */ #include "cm_test.h" -#include class BufferUPTest: public CmTest { --- media_driver/linux/common/os/mos_utilities_specific.h.orig 2018-10-01 21:39:52 UTC +++ media_driver/linux/common/os/mos_utilities_specific.h @@ -88,7 +88,7 @@ #define UFINT_PATH_LINUX "UFINT" #define UFEXT_PATH_LINUX "UFEXT" -#define _aligned_malloc(size, alignment) memalign(alignment, size) +#define _aligned_malloc(size, alignment) aligned_alloc(alignment, size) #define _aligned_free(ptr) free(ptr) #define __MOS_USER_FEATURE_KEY_MESSAGE_DEFAULT_VALUE_STR "1" --- media_driver/linux/ult/ult_app/cm/cm_test.h.orig 2018-10-01 21:39:52 UTC +++ media_driver/linux/ult/ult_app/cm/cm_test.h @@ -23,7 +23,6 @@ #ifndef MEDIADRIVER_LINUX_CODECHAL_ULT_ULTAPP_CMTEST_H_ #define MEDIADRIVER_LINUX_CODECHAL_ULT_ULTAPP_CMTEST_H_ -#include #include "gtest/gtest.h" #include "mock_device.h" #include "../memory_leak_detector.h" @@ -34,7 +33,7 @@ class CmTest: public testing::Test { public: static void* AllocateAlignedMemory(size_t size, size_t alignment) - { return memalign(alignment, size); } + { return aligned_alloc(alignment, size); } static void FreeAlignedMemory(void *memory) { free(memory); } Index: head/multimedia/libva-intel-media-driver/files/patch-thread-id =================================================================== --- head/multimedia/libva-intel-media-driver/files/patch-thread-id (revision 485571) +++ head/multimedia/libva-intel-media-driver/files/patch-thread-id (revision 485572) @@ -1,37 +1,50 @@ Get thread ID on more platforms +media_driver/agnostic/common/cm/cm_task_internal.cpp:851:39: error: use of undeclared identifier 'SYS_gettid' + m_taskProfilingInfo.threadID = CmGetCurThreadId(); // Get Thread ID + ^ +media_driver/linux/common/cm/cm_innerdef_os.h:98:37: note: expanded from macro 'CmGetCurThreadId' +#define CmGetCurThreadId() syscall(SYS_gettid) + ^ +media_driver/agnostic/common/cm/cm_task_internal.cpp:952:39: error: use of undeclared identifier 'SYS_gettid' + m_taskProfilingInfo.threadID = CmGetCurThreadId(); // Get Thread ID + ^ +media_driver/linux/common/cm/cm_innerdef_os.h:98:37: note: expanded from macro 'CmGetCurThreadId' +#define CmGetCurThreadId() syscall(SYS_gettid) + ^ + --- media_driver/linux/common/cm/cm_innerdef_os.h.orig 2018-10-01 21:39:52 UTC +++ media_driver/linux/common/cm/cm_innerdef_os.h @@ -35,8 +35,16 @@ #include "mos_os.h" #include "media_libva_common.h" +#if defined(__linux__) #include #include +#elif defined(__FreeBSD__) +#include +#elif defined(__NetBSD__) +#include +#else // OpenBSD, Solaris +#include +#endif #include //Require DRM VMAP patch, @@ -95,5 +103,15 @@ inline void GetLocalTime(PSYSTEMTIME psystime) #endif #define CmGetCurProcessId() getpid() +#if defined(__linux__) #define CmGetCurThreadId() syscall(SYS_gettid) +#elif defined(__DragonFly__) +#define CmGetCurThreadId() lwp_gettid() +#elif defined(__FreeBSD__) +#define CmGetCurThreadId() pthread_getthreadid_np() +#elif defined(__NetBSD__) +#define CmGetCurThreadId() _lwp_self() +#else // OpenBSD, Solaris +#define CmGetCurThreadId() (uintptr_t)pthread_self() +#endif