svn commit: r483899 - in head/multimedia: . cmrt cmrt/files libva-intel-driver libva-intel-hybrid-driver libva-intel-hybrid-driver/files
Jan Beich
jbeich at FreeBSD.org
Sat Nov 3 16:25:11 UTC 2018
Author: jbeich
Date: Sat Nov 3 16:25:07 2018
New Revision: 483899
URL: https://svnweb.freebsd.org/changeset/ports/483899
Log:
multimedia/libva-intel-driver: expose Hybrid decoding
On Skylake this reduces CPU usage by half when decoding VP9.
Added:
head/multimedia/cmrt/
head/multimedia/cmrt/Makefile (contents, props changed)
head/multimedia/cmrt/distinfo (contents, props changed)
head/multimedia/cmrt/files/
head/multimedia/cmrt/files/patch-i386 (contents, props changed)
head/multimedia/cmrt/files/patch-memalign (contents, props changed)
head/multimedia/cmrt/pkg-descr (contents, props changed)
head/multimedia/cmrt/pkg-plist (contents, props changed)
head/multimedia/libva-intel-hybrid-driver/
head/multimedia/libva-intel-hybrid-driver/Makefile (contents, props changed)
head/multimedia/libva-intel-hybrid-driver/distinfo (contents, props changed)
head/multimedia/libva-intel-hybrid-driver/files/
head/multimedia/libva-intel-hybrid-driver/files/patch-memalign (contents, props changed)
head/multimedia/libva-intel-hybrid-driver/pkg-descr (contents, props changed)
Modified:
head/multimedia/Makefile (contents, props changed)
head/multimedia/libva-intel-driver/Makefile (contents, props changed)
Modified: head/multimedia/Makefile
==============================================================================
--- head/multimedia/Makefile Sat Nov 3 14:42:22 2018 (r483898)
+++ head/multimedia/Makefile Sat Nov 3 16:25:07 2018 (r483899)
@@ -41,6 +41,7 @@
SUBDIR += clive
SUBDIR += clutter-gst
SUBDIR += clutter-gst3
+ SUBDIR += cmrt
SUBDIR += cuse4bsd-kmod
SUBDIR += cx88
SUBDIR += deforaos-player
@@ -227,6 +228,7 @@
SUBDIR += libv4l
SUBDIR += libva
SUBDIR += libva-intel-driver
+ SUBDIR += libva-intel-hybrid-driver
SUBDIR += libva-utils
SUBDIR += libva-vdpau-driver
SUBDIR += libvdpau
Added: head/multimedia/cmrt/Makefile
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/multimedia/cmrt/Makefile Sat Nov 3 16:25:07 2018 (r483899)
@@ -0,0 +1,30 @@
+# $FreeBSD$
+
+PORTNAME= cmrt
+DISTVERSION= 1.0.6
+CATEGORIES= multimedia
+
+MAINTAINER= jbeich at FreeBSD.org
+COMMENT= C for Media Runtime
+
+LICENSE= MIT
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+ONLY_FOR_ARCHS= amd64 i386
+ONLY_FOR_ARCHS_REASON= Only Intel GPUs on x86 are supported
+
+LIB_DEPENDS= libdrm_intel.so:graphics/libdrm \
+ libva.so:multimedia/libva
+
+USES= autoreconf compiler:c11 libtool pkgconfig
+USE_GITHUB= yes
+USE_LDCONFIG= yes
+GH_ACCOUNT= intel
+GNU_CONFIGURE= yes
+INSTALL_TARGET= install-strip
+
+post-patch:
+ @${REINPLACE_CMD} -e '/-g/d; /-O2/d' \
+ ${WRKSRC}/src/Makefile.am
+
+.include <bsd.port.mk>
Added: head/multimedia/cmrt/distinfo
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/multimedia/cmrt/distinfo Sat Nov 3 16:25:07 2018 (r483899)
@@ -0,0 +1,3 @@
+TIMESTAMP = 1473292298
+SHA256 (intel-cmrt-1.0.6_GH0.tar.gz) = ca22e905a2717fc740e703e65a0061a0e11f4ea513ba970bbc10b3bd6d28e6e0
+SIZE (intel-cmrt-1.0.6_GH0.tar.gz) = 3717552
Added: head/multimedia/cmrt/files/patch-i386
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/multimedia/cmrt/files/patch-i386 Sat Nov 3 16:25:07 2018 (r483899)
@@ -0,0 +1,28 @@
+In file included from cm_device.cpp:31:
+In file included from ./cm_device.h:37:
+In file included from ./cm_array.h:31:
+./cm_mem.h:200:17: error: invalid output size for constraint '=a'
+ :"=a"(local_rax), "=r"(local_rbx),
+ ^
+
+--- src/cm_mem.h.orig 2016-09-07 23:51:38 UTC
++++ src/cm_mem.h
+@@ -194,7 +194,9 @@ inline void GetCPUID(int CPUInfo[4], int InfoType)
+ CPUInfo[1] = local_ebx;
+ CPUInfo[2] = local_ecx;
+ CPUInfo[3] = local_edx;
+- } else {
++ }
++#ifdef __LP64__
++ else {
+ uint64_t local_rax, local_rbx, local_rcx, local_rdx;
+ __asm__ __volatile__("push %%rbx \n\t" "cpuid \n\t" "mov %%rbx, %1 \n\t" "pop %%rbx \n\t" /* restore the old %ebx */
+ :"=a"(local_rax), "=r"(local_rbx),
+@@ -206,6 +208,7 @@ inline void GetCPUID(int CPUInfo[4], int InfoType)
+ CPUInfo[2] = local_rcx;
+ CPUInfo[3] = local_rdx;
+ }
++#endif
+
+ #ifndef NO_EXCEPTION_HANDLING
+ }
Added: head/multimedia/cmrt/files/patch-memalign
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/multimedia/cmrt/files/patch-memalign Sat Nov 3 16:25:07 2018 (r483899)
@@ -0,0 +1,40 @@
+memalign is Linux-specific, so use C11 aligned_alloc instead
+
+--- src/cm_rt_linux.h.orig 2016-09-07 23:51:38 UTC
++++ src/cm_rt_linux.h
+@@ -48,7 +48,6 @@ extern "C" {
+ #include <stdlib.h>
+ #include <stdint.h>
+ #include <math.h>
+-#include <malloc.h>
+ #include <string.h>
+ #include <sys/time.h>
+ #include <pthread.h>
+@@ -334,7 +333,7 @@ template <> inline const char *CM_TYPE_NAME_UNMANGLED
+
+ inline void *CM_ALIGNED_MALLOC(size_t size, size_t alignment)
+ {
+- return memalign(alignment, size);
++ return aligned_alloc(alignment, size);
+ }
+
+ inline void CM_ALIGNED_FREE(void *memory)
+--- src/os_utilities.c.orig 2016-09-07 23:51:38 UTC
++++ src/os_utilities.c
+@@ -40,7 +40,6 @@
+ #include <sys/types.h>
+ #include <sys/sem.h>
+ #include <signal.h>
+-#include <malloc.h>
+ #include "string.h"
+ #include <unistd.h>
+
+@@ -56,7 +55,7 @@ INT32 GenOsMemAllocCounter;
+ GENOS_OS_VERBOSEMESSAGE("GenOsMemAllocCounter = %d, Addr = 0x%x.", GenOsMemAllocCounter, ptr); \
+ GENOS_OS_VERBOSEMESSAGE("<MemNinjaSysFreePtr memPtr = \"%d\" memType = \"Sys\"/>.", ptr);
+
+-#define _aligned_malloc(size, alignment) memalign(alignment, size)
++#define _aligned_malloc(size, alignment) aligned_alloc(alignment, size)
+ #define _aligned_free(ptr) free(ptr)
+
+ PVOID GENOS_AlignedAllocMemory(SIZE_T size, SIZE_T alignment)
Added: head/multimedia/cmrt/pkg-descr
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/multimedia/cmrt/pkg-descr Sat Nov 3 16:25:07 2018 (r483899)
@@ -0,0 +1,5 @@
+Media GPU kernel manager for Intel G45 & HD Graphics family. Allows to
+interface between Intel GPU's driver and a host program through a
+high-level language.
+
+WWW: https://01.org/linuxmedia
Added: head/multimedia/cmrt/pkg-plist
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/multimedia/cmrt/pkg-plist Sat Nov 3 16:25:07 2018 (r483899)
@@ -0,0 +1,7 @@
+etc/cmrt.conf
+include/cm_rt.h
+include/cm_rt_linux.h
+lib/libcmrt.so
+lib/libcmrt.so.1
+lib/libcmrt.so.1.1001.0
+libdata/pkgconfig/libcmrt.pc
Modified: head/multimedia/libva-intel-driver/Makefile
==============================================================================
--- head/multimedia/libva-intel-driver/Makefile Sat Nov 3 14:42:22 2018 (r483898)
+++ head/multimedia/libva-intel-driver/Makefile Sat Nov 3 16:25:07 2018 (r483899)
@@ -31,6 +31,12 @@ PLIST_FILES= lib/dri/i915_drv_video.so lib/dri/i965_dr
ONLY_FOR_ARCHS= amd64 i386
ONLY_FOR_ARCHS_REASON= Driver for hardware present only on intel i386 and amd64 CPUs
+OPTIONS_DEFINE= HYBRID
+
+HYBRID_DESC= Hybrid codec support (e.g., VP9 decoding on Skylake)
+HYBRID_RUN_DEPENDS= ${LOCALBASE}/lib/dri/hybrid_drv_video.so:multimedia/libva-intel-hybrid-driver
+HYBRID_CONFIGURE_ENABLE= hybrid-codec
+
post-patch: .SILENT
${REINPLACE_CMD} -e 's/-ldl//' \
${WRKSRC}/src/Makefile.am
Added: head/multimedia/libva-intel-hybrid-driver/Makefile
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/multimedia/libva-intel-hybrid-driver/Makefile Sat Nov 3 16:25:07 2018 (r483899)
@@ -0,0 +1,36 @@
+# $FreeBSD$
+
+PORTNAME= intel-hybrid-driver
+DISTVERSION= 1.0.2
+CATEGORIES= multimedia
+PKGNAMEPREFIX= libva-
+
+PATCH_SITES= https://github.com/${GH_ACCOUNT}/${GH_PROJECT}/commit/
+PATCHFILES= dfa9c8eba295.patch:-p1 b3b4d9a3a08d.patch:-p1
+
+MAINTAINER= jbeich at FreeBSD.org
+COMMENT= Hybrid VP8 encoder and VP9 decoder for Intel GPUs
+
+LICENSE= MIT
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+ONLY_FOR_ARCHS= amd64 i386
+ONLY_FOR_ARCHS_REASON= Only Intel GPUs on x86 are supported
+
+LIB_DEPENDS= libdrm_intel.so:graphics/libdrm \
+ libcmrt.so:multimedia/cmrt \
+ libva.so:multimedia/libva
+
+USES= autoreconf compiler:c11 gmake libtool pkgconfig
+USE_GITHUB= yes
+USE_LDCONFIG= yes
+GH_ACCOUNT= 01org
+GNU_CONFIGURE= yes
+INSTALL_TARGET= install-strip
+PLIST_FILES= lib/dri/hybrid_drv_video.so
+
+post-patch:
+ @${REINPLACE_CMD} -e '/__linux__/d; /LINUX/d' \
+ ${WRKSRC}/src/vp9hdec/Makefile.am
+
+.include <bsd.port.mk>
Added: head/multimedia/libva-intel-hybrid-driver/distinfo
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/multimedia/libva-intel-hybrid-driver/distinfo Sat Nov 3 16:25:07 2018 (r483899)
@@ -0,0 +1,7 @@
+TIMESTAMP = 1473291388
+SHA256 (01org-intel-hybrid-driver-1.0.2_GH0.tar.gz) = 16cd66872e8043ce6c0e9a016a043c460e8a180fdc520f31c1f97ffef7828d7b
+SIZE (01org-intel-hybrid-driver-1.0.2_GH0.tar.gz) = 1331968
+SHA256 (dfa9c8eba295.patch) = 0c5a2501f6a467cc88c04367f5de89c944fbdb013f87f19ba684c6e2e6560f33
+SIZE (dfa9c8eba295.patch) = 1679
+SHA256 (b3b4d9a3a08d.patch) = acb0acf2a83632358ccb3b02a4b74184149312863fa15bab4686df41abb1fd9b
+SIZE (b3b4d9a3a08d.patch) = 1917
Added: head/multimedia/libva-intel-hybrid-driver/files/patch-memalign
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/multimedia/libva-intel-hybrid-driver/files/patch-memalign Sat Nov 3 16:25:07 2018 (r483899)
@@ -0,0 +1,71 @@
+memalign is Linux-specific, so use C11 aligned_alloc instead
+
+--- src/vp9hdec/decode_hybrid_vp9.h.orig 2016-09-07 23:36:28 UTC
++++ src/vp9hdec/decode_hybrid_vp9.h
+@@ -39,8 +39,6 @@
+ #include "intel_hybrid_hostvld_vp9.h"
+ #include "intel_hybrid_common_vp9.h"
+
+-#include <malloc.h>
+-
+ #define INTEL_HYBRID_VP9_PAGE_SIZE 0x1000
+
+ #define INTEL_HYBRID_VP9_KEY_FRAME 0
+--- src/vp9hdec/intel_hybrid_debug_dump.cpp.orig 2016-09-07 23:36:28 UTC
++++ src/vp9hdec/intel_hybrid_debug_dump.cpp
+@@ -34,8 +34,6 @@
+ #include <errno.h>
+ #include <stdlib.h>
+
+-#include <malloc.h>
+-
+ static int intel_hybrid_createfile(
+ int *fd,
+ const char *lpFileName,
+@@ -166,7 +164,7 @@ char *intel_alloc_zero_aligned_memory(uint32_t size, u
+ size_t tmp_size;
+
+ tmp_size = ALIGN(size, alignment);
+- ptr = (char *)memalign(alignment, tmp_size);
++ ptr = (char *)aligned_alloc(alignment, tmp_size);
+
+ if (ptr) {
+ memset(ptr, 0, tmp_size);
+--- src/vp9hdec/intel_hybrid_hostvld_vp9.cpp.orig 2016-09-07 23:36:28 UTC
++++ src/vp9hdec/intel_hybrid_hostvld_vp9.cpp
+@@ -88,7 +88,7 @@ do {
+ #define VP9_REALLOCATE_ABOVE_CTX_BUFFER(pAboveCtxBuffer, size) \
+ do { \
+ VP9_ALIGNED_FREE_MEMORY(pAboveCtxBuffer); \
+- pAboveCtxBuffer = (PUINT8)memalign(INTEL_HOSTVLD_VP9_PAGE_SIZE, size); \
++ pAboveCtxBuffer = (PUINT8)aligned_alloc(INTEL_HOSTVLD_VP9_PAGE_SIZE, size); \
+ } while(0)
+
+ #define VP9_REALLOCATE_HOSTVLD_1D_BUFFER_UINT8(pHostvldBuffer, dwBufferSize) \
+@@ -96,7 +96,7 @@ do
+ { \
+ VP9_ALIGNED_FREE_MEMORY((pHostvldBuffer)->pu8Buffer); \
+ (pHostvldBuffer)->dwSize = dwBufferSize; \
+- (pHostvldBuffer)->pu8Buffer = (PUINT8)memalign(INTEL_HOSTVLD_VP9_PAGE_SIZE, dwBufferSize); \
++ (pHostvldBuffer)->pu8Buffer = (PUINT8)aligned_alloc(INTEL_HOSTVLD_VP9_PAGE_SIZE, dwBufferSize); \
+ } while (0)
+
+ VAStatus Intel_HostvldVp9_Execute_MT (
+@@ -425,7 +425,7 @@ VAStatus Intel_HostvldVp9_PreParser (PVOID pVp9FrameSt
+ dwSize = dwNumAboveCtx * sizeof(*pFrameInfo->pContextAbove);
+ VP9_ALIGNED_FREE_MEMORY(pFrameInfo->pContextAbove);
+ pFrameInfo->pContextAbove =
+- (PINTEL_HOSTVLD_VP9_NEIGHBOR)memalign(INTEL_HOSTVLD_VP9_PAGE_SIZE, dwSize);
++ (PINTEL_HOSTVLD_VP9_NEIGHBOR)aligned_alloc(INTEL_HOSTVLD_VP9_PAGE_SIZE, dwSize);
+
+ dwNumAboveCtx <<= 1;
+ // Entropy context, per 4x4 block. Allocate once for all the planes
+@@ -445,7 +445,7 @@ VAStatus Intel_HostvldVp9_PreParser (PVOID pVp9FrameSt
+ if (dwSize > pFrameInfo->ModeInfo.dwSize)
+ {
+ VP9_ALIGNED_FREE_MEMORY(pFrameInfo->ModeInfo.pBuffer);
+- pFrameInfo->ModeInfo.pBuffer = memalign(INTEL_HOSTVLD_VP9_PAGE_SIZE,
++ pFrameInfo->ModeInfo.pBuffer = aligned_alloc(INTEL_HOSTVLD_VP9_PAGE_SIZE,
+ dwSize * sizeof(INTEL_HOSTVLD_VP9_MODE_INFO));
+ pFrameInfo->ModeInfo.dwSize = dwSize;
+ }
Added: head/multimedia/libva-intel-hybrid-driver/pkg-descr
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/multimedia/libva-intel-hybrid-driver/pkg-descr Sat Nov 3 16:25:07 2018 (r483899)
@@ -0,0 +1,6 @@
+Intel hybrid driver provides support for WebM project VPx codecs. GPU
+acceleration is provided via media kernels executed on Intel GEN GPUs.
+The hybrid driver provides the CPU bound entropy (e.g., CPBAC)
+decoding and manages the GEN GPU media kernel parameters and buffers.
+
+WWW: https://01.org/linuxmedia
More information about the svn-ports-all
mailing list