svn commit: r457430 - in head/graphics/mesa-dri: . files

Jan Beich jbeich at FreeBSD.org
Wed Dec 27 22:53:48 UTC 2017


Author: jbeich
Date: Wed Dec 27 22:53:47 2017
New Revision: 457430
URL: https://svnweb.freebsd.org/changeset/ports/457430

Log:
  graphics/mesa-dri: enable Vulkan drivers
  
  PR:		221540
  Tested by:	Greg V
  Approved by:	x11 (zeising)

Added:
  head/graphics/mesa-dri/files/patch-src_intel_vulkan_anv__allocator.c   (contents, props changed)
  head/graphics/mesa-dri/files/patch-src_intel_vulkan_anv__device.c   (contents, props changed)
  head/graphics/mesa-dri/files/patch-src_intel_vulkan_anv__gem.c   (contents, props changed)
  head/graphics/mesa-dri/files/patch-src_intel_vulkan_anv__queue.c   (contents, props changed)
Modified:
  head/graphics/mesa-dri/Makefile   (contents, props changed)
  head/graphics/mesa-dri/pkg-plist   (contents, props changed)

Modified: head/graphics/mesa-dri/Makefile
==============================================================================
--- head/graphics/mesa-dri/Makefile	Wed Dec 27 22:45:54 2017	(r457429)
+++ head/graphics/mesa-dri/Makefile	Wed Dec 27 22:53:47 2017	(r457430)
@@ -3,6 +3,7 @@
 
 PORTNAME=	mesa-dri
 PORTVERSION=	${MESAVERSION}
+PORTREVISION=	1
 CATEGORIES=	graphics
 
 COMMENT=	OpenGL hardware acceleration drivers for DRI2+
@@ -29,6 +30,7 @@ VDPAU_LIB_DEPENDS=	libvdpau.so:multimedia/libvdpau
 
 ALL_DRI_DRIVERS=	I915 I965 RADEON R200 SWRAST
 ALL_GALLIUM_DRIVERS=	FREEDRENO R300 R600 RADEONSI SVGA SWRAST VC4
+ALL_VULKAN_DRIVERS=	INTEL RADEON
 
 DRI_DRIVERS=		SWRAST	# classic swrast
 .if "${MESA_LLVM_VER}" != ""
@@ -36,12 +38,15 @@ GALLIUM_DRIVERS=	SWRAST	# llvmpipe
 .else
 GALLIUM_DRIVERS=	""
 .endif
+VULKAN_DRIVERS=		#
+
 .if ${ARCH} == amd64 || ${ARCH} == i386 \
  || ${ARCH} == powerpc || ${ARCH} == powerpc64
 DRI_DRIVERS+=		RADEON R200
 GALLIUM_DRIVERS+=	R300 R600
 . if "${MESA_LLVM_VER}" != ""	# until PPC gets LLVM in base
 GALLIUM_DRIVERS+=	RADEONSI
+VULKAN_DRIVERS+=	RADEON
 . endif
 .endif
 .if ${ARCH} == amd64 || ${ARCH} == i386
@@ -50,6 +55,7 @@ GALLIUM_DRIVERS+=	SVGA
 . if ${OPSYS} == FreeBSD && ${OSVERSION} < 1100000
 EXTRA_PATCHES+=	${PATCHDIR}/extra-src_mesa_drivers_dri_i965_intel__screen.c
 . endif
+VULKAN_DRIVERS+=	INTEL
 .elif ${ARCH} == aarch64 || ${ARCH} == armv6 || ${ARCH} == armv7
 GALLIUM_DRIVERS+=	FREEDRENO VC4
 . if ${ARCH} == armv6 || ${ARCH} == armv7
@@ -57,8 +63,18 @@ EXTRA_PATCHES+=	${PATCHDIR}/extra-src_gallium_drivers_
 . endif
 .endif
 
+.if ${VULKAN_DRIVERS:MINTEL}
+BUILD_DEPENDS+=		${PYTHON_PKGNAMEPREFIX}mako>0:textproc/py-mako@${PY_FLAVOR}
+. if ${/usr/bin/ld:L:tA} != "/usr/bin/ld.lld"
+# --build-id isn't supported by old GNU ld.bfd in base
+USE_BINUTILS=		yes
+LDFLAGS+=		-B${LOCALBASE}/bin
+. endif
+.endif
+
 CONFIGURE_ARGS+=	--with-dri-drivers="${DRI_DRIVERS:tl}" \
-			--with-gallium-drivers="${GALLIUM_DRIVERS:tl}"
+			--with-gallium-drivers="${GALLIUM_DRIVERS:tl}" \
+			--with-vulkan-drivers="${VULKAN_DRIVERS:tl}"
 
 .for _d in ${ALL_DRI_DRIVERS}
 . if ${DRI_DRIVERS:M${_d}}
@@ -73,6 +89,14 @@ PLIST_SUB+=	${_d}_DRIVER="@comment "
 PLIST_SUB+=	${_gd}_GDRIVER=""
 . else
 PLIST_SUB+=	${_gd}_GDRIVER="@comment "
+. endif
+.endfor
+
+.for _vd in ${ALL_VULKAN_DRIVERS}
+. if ${VULKAN_DRIVERS:M${_vd}}
+PLIST_SUB+=	${_vd}_VDRIVER="" ARCH="${ARCH}"
+. else
+PLIST_SUB+=	${_vd}_VDRIVER="@comment "
 . endif
 .endfor
 

Added: head/graphics/mesa-dri/files/patch-src_intel_vulkan_anv__allocator.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/graphics/mesa-dri/files/patch-src_intel_vulkan_anv__allocator.c	Wed Dec 27 22:53:47 2017	(r457430)
@@ -0,0 +1,104 @@
+- Partially implement sys_futex() via _umtx_op()
+- Partially implement memfd_create() via mkostemp()
+- Ignore MAP_POPULATE if unsupported
+
+--- src/intel/vulkan/anv_allocator.c.orig	2017-08-12 16:09:52 UTC
++++ src/intel/vulkan/anv_allocator.c
+@@ -26,12 +26,31 @@
+ #include <unistd.h>
+ #include <limits.h>
+ #include <assert.h>
++#ifdef __linux__
+ #include <linux/futex.h>
+ #include <linux/memfd.h>
++#endif
+ #include <sys/time.h>
+ #include <sys/mman.h>
++#ifdef __linux__
+ #include <sys/syscall.h>
++#else
++#include <fcntl.h>
++#endif
+ 
++#ifdef __FreeBSD__
++#include <errno.h>
++#include <sys/umtx.h>
++#endif
++
++#ifndef MAP_POPULATE
++#define MAP_POPULATE 0
++#endif
++
++#ifndef MFD_CLOEXEC
++#define MFD_CLOEXEC O_CLOEXEC
++#endif
++
+ #include "anv_private.h"
+ 
+ #include "util/hash_table.h"
+@@ -112,6 +131,8 @@ struct anv_mmap_cleanup {
+ 
+ #define ANV_MMAP_CLEANUP_INIT ((struct anv_mmap_cleanup){0})
+ 
++#if defined(__linux__)
++
+ static inline long
+ sys_futex(void *addr1, int op, int val1,
+           struct timespec *timeout, void *addr2, int val3)
+@@ -131,11 +152,56 @@ futex_wait(uint32_t *addr, int32_t value)
+    return sys_futex(addr, FUTEX_WAIT, value, NULL, NULL, 0);
+ }
+ 
++#elif defined(__FreeBSD__)
++
++/* Based on libxshmfence */
++
++static inline int
++sys_futex(void *addr, int op, int32_t val)
++{
++   return _umtx_op(addr, op, (uint32_t)val, NULL, NULL) == -1 ? errno : 0;
++}
++
++static inline int
++futex_wake(uint32_t *addr, int count)
++{
++   return sys_futex(addr, UMTX_OP_WAKE, count);
++}
++
++static inline int
++futex_wait(uint32_t *addr, int32_t value)
++{
++   return sys_futex(addr, UMTX_OP_WAIT_UINT, value);
++}
++#endif
++
+ #ifndef HAVE_MEMFD_CREATE
+ static inline int
+ memfd_create(const char *name, unsigned int flags)
+ {
++#if defined(__linux__)
+    return syscall(SYS_memfd_create, name, flags);
++#elif defined(__FreeBSD__)
++   return shm_open(SHM_ANON, flags | O_RDWR | O_CREAT, 0600);
++#else /* DragonFly, NetBSD, OpenBSD, Solaris */
++   char template[] = "/tmp/shmfd-XXXXXX";
++#ifdef HAVE_MKOSTEMP
++   int fd = mkostemp(template, flags);
++#else
++   int fd = mkstemp(template);
++   if (flags & O_CLOEXEC) {
++     int flags = fcntl(fd, F_GETFD);
++     if (flags != -1) {
++       flags |= FD_CLOEXEC;
++       (void) fcntl(fd, F_SETFD, &flags);
++     }
++   }
++#endif /* HAVE_MKOSTEMP */
++   if (fd >= 0)
++     unlink(template);
++
++   return fd;
++#endif /* __linux__ */
+ }
+ #endif
+ 

Added: head/graphics/mesa-dri/files/patch-src_intel_vulkan_anv__device.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/graphics/mesa-dri/files/patch-src_intel_vulkan_anv__device.c	Wed Dec 27 22:53:47 2017	(r457430)
@@ -0,0 +1,42 @@
+- Without sysinfo() fall back to sysconf()
+- Define ETIME if missing
+
+--- src/intel/vulkan/anv_device.c.orig	2017-08-12 16:09:52 UTC
++++ src/intel/vulkan/anv_device.c
+@@ -25,7 +25,9 @@
+ #include <stdbool.h>
+ #include <string.h>
+ #include <sys/mman.h>
++#ifdef __GLIBC__
+ #include <sys/sysinfo.h>
++#endif
+ #include <unistd.h>
+ #include <fcntl.h>
+ #include <xf86drm.h>
+@@ -39,6 +41,10 @@
+ 
+ #include "genxml/gen7_pack.h"
+ 
++#ifndef ETIME
++#define ETIME ETIMEDOUT
++#endif
++
+ static void
+ compiler_debug_log(void *data, const char *fmt, ...)
+ { }
+@@ -73,10 +79,15 @@ anv_compute_heap_size(int fd, uint64_t *heap_size)
+    }
+ 
+    /* Query the total ram from the system */
++#ifdef __GLIBC__
+    struct sysinfo info;
+    sysinfo(&info);
+ 
+    uint64_t total_ram = (uint64_t)info.totalram * (uint64_t)info.mem_unit;
++#else
++   uint64_t total_ram = sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGE_SIZE);
++#endif
++
+ 
+    /* We don't want to burn too much ram with the GPU.  If the user has 4GiB
+     * or less, we use at most half.  If they have more than 4GiB, we use 3/4.

Added: head/graphics/mesa-dri/files/patch-src_intel_vulkan_anv__gem.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/graphics/mesa-dri/files/patch-src_intel_vulkan_anv__gem.c	Wed Dec 27 22:53:47 2017	(r457430)
@@ -0,0 +1,14 @@
+- Define ETIME if missing
+
+--- src/intel/vulkan/anv_gem.c.orig	2017-10-23 13:21:18 UTC
++++ src/intel/vulkan/anv_gem.c
+@@ -26,6 +26,9 @@
+ #include <sys/mman.h>
+ #include <string.h>
+ #include <errno.h>
++#ifndef ETIME
++#define ETIME ETIMEDOUT
++#endif
+ #include <unistd.h>
+ #include <fcntl.h>
+ 

Added: head/graphics/mesa-dri/files/patch-src_intel_vulkan_anv__queue.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/graphics/mesa-dri/files/patch-src_intel_vulkan_anv__queue.c	Wed Dec 27 22:53:47 2017	(r457430)
@@ -0,0 +1,18 @@
+- Define ETIME if missing
+- Drop header that was never used
+
+--- src/intel/vulkan/anv_queue.c.orig	2017-10-23 13:21:18 UTC
++++ src/intel/vulkan/anv_queue.c
+@@ -26,8 +26,11 @@
+  */
+ 
+ #include <fcntl.h>
++#include <errno.h>
++#ifndef ETIME
++#define ETIME ETIMEDOUT
++#endif
+ #include <unistd.h>
+-#include <sys/eventfd.h>
+ 
+ #include "anv_private.h"
+ #include "vk_util.h"

Modified: head/graphics/mesa-dri/pkg-plist
==============================================================================
--- head/graphics/mesa-dri/pkg-plist	Wed Dec 27 22:45:54 2017	(r457429)
+++ head/graphics/mesa-dri/pkg-plist	Wed Dec 27 22:53:47 2017	(r457430)
@@ -23,6 +23,7 @@ include/GL/internal/dri_interface.h
 @comment include/GLES3/gl3platform.h
 @comment include/KHR/khrplatform.h
 @comment include/gbm.h
+%%INTEL_VDRIVER%%include/vulkan/vulkan_intel.h
 %%I915_DRIVER%%lib/dri/i915_dri.so
 %%I965_DRIVER%%lib/dri/i965_dri.so
 %%FREEDRENO_GDRIVER%%lib/dri/kgsl_dri.so
@@ -80,6 +81,8 @@ include/GL/internal/dri_interface.h
 %%VDPAU%%%%RADEONSI_GDRIVER%%lib/vdpau/libvdpau_radeonsi.so.1
 %%VDPAU%%%%RADEONSI_GDRIVER%%lib/vdpau/libvdpau_radeonsi.so.1.0
 %%VDPAU%%%%RADEONSI_GDRIVER%%lib/vdpau/libvdpau_radeonsi.so.1.0.0
+%%INTEL_VDRIVER%%lib/libvulkan_intel.so
+%%RADEON_VDRIVER%%lib/libvulkan_radeon.so
 @comment lib/libwayland-egl.so
 @comment lib/libwayland-egl.so.1
 @comment lib/libwayland-egl.so.1.0.0
@@ -90,3 +93,5 @@ libdata/pkgconfig/dri.pc
 @comment libdata/pkgconfig/glesv2.pc
 @comment libdata/pkgconfig/osmesa.pc
 @comment libdata/pkgconfig/wayland-egl.pc
+%%INTEL_VDRIVER%%share/vulkan/icd.d/intel_icd.%%ARCH%%.json
+%%RADEON_VDRIVER%%share/vulkan/icd.d/radeon_icd.%%ARCH%%.json


More information about the svn-ports-head mailing list