pkgsrc-WIP-changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

MesaLib-dfbsd-meson: Import mesa3d 19.1.0 git meson build as wip/MesaLib-dfbsd-meson



Module Name:	pkgsrc-wip
Committed By:	David Shao <davshao%gmail.com@localhost>
Pushed By:	dshao
Date:		Wed Feb 27 13:46:39 2019 -0800
Changeset:	2d54b97a4e5f9b477d5c0f12d1d4fe6bbd5eaac1

Modified Files:
	Makefile
Added Files:
	MesaLib-dfbsd-meson/DESCR
	MesaLib-dfbsd-meson/Makefile
	MesaLib-dfbsd-meson/PLIST
	MesaLib-dfbsd-meson/TODO
	MesaLib-dfbsd-meson/buildlink3.mk
	MesaLib-dfbsd-meson/builtin.mk
	MesaLib-dfbsd-meson/distinfo
	MesaLib-dfbsd-meson/dri.mk
	MesaLib-dfbsd-meson/options.mk
	MesaLib-dfbsd-meson/patches/patch-configure.ac
	MesaLib-dfbsd-meson/patches/patch-include_GL_internal_dri__interface.h
	MesaLib-dfbsd-meson/patches/patch-src_amd_common_ac__debug.c
	MesaLib-dfbsd-meson/patches/patch-src_amd_vulkan_radv__device.c
	MesaLib-dfbsd-meson/patches/patch-src_amd_vulkan_winsys_amdgpu_radv__amdgpu__cs.c
	MesaLib-dfbsd-meson/patches/patch-src_compiler_builtin__type__macros.h
	MesaLib-dfbsd-meson/patches/patch-src_compiler_glsl_glsl__parser__extras.cpp
	MesaLib-dfbsd-meson/patches/patch-src_egl_drivers_dri2_platform__drm.c
	MesaLib-dfbsd-meson/patches/patch-src_egl_drivers_dri2_platform__x11.c
	MesaLib-dfbsd-meson/patches/patch-src_egl_main_eglglobals.c
	MesaLib-dfbsd-meson/patches/patch-src_gallium_auxiliary_drivers_trace_tr__dump.c
	MesaLib-dfbsd-meson/patches/patch-src_gallium_auxiliary_pipe-loader_pipe__loader__drm.c
	MesaLib-dfbsd-meson/patches/patch-src_gallium_auxiliary_util_u__format__tests.c
	MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_freedreno_freedreno__screen.c
	MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_iris_meson.build
	MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_nouveau_nouveau__vp3__video.c
	MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_nouveau_nv50_nv84__video.c
	MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_radeonsi_si__compute__blit.c
	MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_radeonsi_si__pipe.c
	MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_radeonsi_si__state__shaders.c
	MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_vc4_vc4__bufmgr.c
	MesaLib-dfbsd-meson/patches/patch-src_gallium_include_pipe_p__config.h
	MesaLib-dfbsd-meson/patches/patch-src_gallium_state__trackers_clover_llvm_invocation.cpp
	MesaLib-dfbsd-meson/patches/patch-src_gallium_state__trackers_clover_llvm_metadata.hpp
	MesaLib-dfbsd-meson/patches/patch-src_gallium_state__trackers_clover_util_range.hpp
	MesaLib-dfbsd-meson/patches/patch-src_gallium_winsys_radeon_drm_radeon__drm__winsys.c
	MesaLib-dfbsd-meson/patches/patch-src_gbm_Makefile.am
	MesaLib-dfbsd-meson/patches/patch-src_glx_Makefile.am
	MesaLib-dfbsd-meson/patches/patch-src_glx_apple_apple__glapi.c
	MesaLib-dfbsd-meson/patches/patch-src_glx_dri__common.h
	MesaLib-dfbsd-meson/patches/patch-src_glx_dri__glx.c
	MesaLib-dfbsd-meson/patches/patch-src_glx_glxclient.h
	MesaLib-dfbsd-meson/patches/patch-src_glx_glxcurrent.c
	MesaLib-dfbsd-meson/patches/patch-src_glx_glxext.c
	MesaLib-dfbsd-meson/patches/patch-src_intel_Makefile.tools.am
	MesaLib-dfbsd-meson/patches/patch-src_intel_compiler_brw__fs__bank__conflicts.cpp
	MesaLib-dfbsd-meson/patches/patch-src_intel_isl_isl__tiled__memcpy.c
	MesaLib-dfbsd-meson/patches/patch-src_intel_tools_aub__mem.c
	MesaLib-dfbsd-meson/patches/patch-src_intel_tools_aubinator__error__decode.c
	MesaLib-dfbsd-meson/patches/patch-src_intel_tools_error2aub.c
	MesaLib-dfbsd-meson/patches/patch-src_intel_vulkan_anv__allocator.c
	MesaLib-dfbsd-meson/patches/patch-src_intel_vulkan_anv__device.c
	MesaLib-dfbsd-meson/patches/patch-src_intel_vulkan_anv__gem.c
	MesaLib-dfbsd-meson/patches/patch-src_intel_vulkan_anv__gem__stubs.c
	MesaLib-dfbsd-meson/patches/patch-src_intel_vulkan_anv__queue.c
	MesaLib-dfbsd-meson/patches/patch-src_mapi_entry__x86-64__tls.h
	MesaLib-dfbsd-meson/patches/patch-src_mapi_entry__x86__tls.h
	MesaLib-dfbsd-meson/patches/patch-src_mapi_glapi_gen_gl__gentable.py
	MesaLib-dfbsd-meson/patches/patch-src_mapi_u__current.c
	MesaLib-dfbsd-meson/patches/patch-src_mapi_u__current.h
	MesaLib-dfbsd-meson/patches/patch-src_mesa_drivers_dri_i915_intel__screen.c
	MesaLib-dfbsd-meson/patches/patch-src_mesa_drivers_dri_i965_brw__bufmgr.c
	MesaLib-dfbsd-meson/patches/patch-src_mesa_drivers_dri_i965_brw__performance__query.c
	MesaLib-dfbsd-meson/patches/patch-src_mesa_drivers_dri_i965_intel__screen.c
	MesaLib-dfbsd-meson/patches/patch-src_mesa_drivers_dri_swrast_swrast.c
	MesaLib-dfbsd-meson/patches/patch-src_mesa_drivers_x11_Makefile.am
	MesaLib-dfbsd-meson/patches/patch-src_mesa_main_context.c
	MesaLib-dfbsd-meson/patches/patch-src_mesa_main_extensions.c
	MesaLib-dfbsd-meson/patches/patch-src_mesa_main_macros.h
	MesaLib-dfbsd-meson/patches/patch-src_mesa_main_shader__query.cpp
	MesaLib-dfbsd-meson/patches/patch-src_mesa_x86_common__x86.c
	MesaLib-dfbsd-meson/patches/patch-src_util_Makefile.am
	MesaLib-dfbsd-meson/patches/patch-src_util_build__id.c
	MesaLib-dfbsd-meson/patches/patch-src_util_disk__cache.c
	MesaLib-dfbsd-meson/patches/patch-src_util_futex.h
	MesaLib-dfbsd-meson/patches/patch-src_util_os__time.c
	MesaLib-dfbsd-meson/patches/patch-src_util_ralloc.c
	MesaLib-dfbsd-meson/patches/patch-src_util_strndup.h
	MesaLib-dfbsd-meson/patches/patch-src_util_u__atomic.h
	MesaLib-dfbsd-meson/patches/patch-src_util_u__queue.c
	MesaLib-dfbsd-meson/patches/patch-src_util_u__thread.h
	MesaLib-dfbsd-meson/patches/patch-src_util_xmlconfig.c

Log Message:
MesaLib-dfbsd-meson: Import mesa3d 19.1.0 git meson build as wip/MesaLib-dfbsd-meson

Meson build version of latest mesa3d git, current 19.1.0-devel.
Recently added Intel iris driver.
Builds on latest amd64 NetBSD, DragonFly, and FreeBSD.
Links with meson build of latest modular-xorg-server.
Some initial success running radeonsi, r600. Intel integrated untested.

To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=2d54b97a4e5f9b477d5c0f12d1d4fe6bbd5eaac1

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

diffstat:
 Makefile                                           |   1 +
 MesaLib-dfbsd-meson/DESCR                          |   5 +
 MesaLib-dfbsd-meson/Makefile                       | 142 ++++++++
 MesaLib-dfbsd-meson/PLIST                          | 130 +++++++
 MesaLib-dfbsd-meson/TODO                           |   8 +
 MesaLib-dfbsd-meson/buildlink3.mk                  |  50 +++
 MesaLib-dfbsd-meson/builtin.mk                     |  87 +++++
 MesaLib-dfbsd-meson/distinfo                       |  78 ++++
 MesaLib-dfbsd-meson/dri.mk                         |  34 ++
 MesaLib-dfbsd-meson/options.mk                     | 400 +++++++++++++++++++++
 MesaLib-dfbsd-meson/patches/patch-configure.ac     | 109 ++++++
 .../patch-include_GL_internal_dri__interface.h     |  27 ++
 .../patches/patch-src_amd_common_ac__debug.c       |  19 +
 .../patches/patch-src_amd_vulkan_radv__device.c    |  23 ++
 ...src_amd_vulkan_winsys_amdgpu_radv__amdgpu__cs.c |  19 +
 .../patch-src_compiler_builtin__type__macros.h     |  25 ++
 ...atch-src_compiler_glsl_glsl__parser__extras.cpp |  18 +
 .../patch-src_egl_drivers_dri2_platform__drm.c     |  18 +
 .../patch-src_egl_drivers_dri2_platform__x11.c     |  60 ++++
 .../patches/patch-src_egl_main_eglglobals.c        |  53 +++
 ...-src_gallium_auxiliary_drivers_trace_tr__dump.c |  50 +++
 ...llium_auxiliary_pipe-loader_pipe__loader__drm.c | 127 +++++++
 ...h-src_gallium_auxiliary_util_u__format__tests.c |  17 +
 ...c_gallium_drivers_freedreno_freedreno__screen.c |  34 ++
 .../patch-src_gallium_drivers_iris_meson.build     |  22 ++
 ...c_gallium_drivers_nouveau_nouveau__vp3__video.c |  18 +
 ...-src_gallium_drivers_nouveau_nv50_nv84__video.c |  18 +
 ...rc_gallium_drivers_radeonsi_si__compute__blit.c | 176 +++++++++
 .../patch-src_gallium_drivers_radeonsi_si__pipe.c  |  93 +++++
 ...c_gallium_drivers_radeonsi_si__state__shaders.c |  21 ++
 .../patch-src_gallium_drivers_vc4_vc4__bufmgr.c    |  18 +
 .../patch-src_gallium_include_pipe_p__config.h     |  31 ++
 ...lium_state__trackers_clover_llvm_invocation.cpp |  40 +++
 ...allium_state__trackers_clover_llvm_metadata.hpp |  21 ++
 ...c_gallium_state__trackers_clover_util_range.hpp |  40 +++
 ...gallium_winsys_radeon_drm_radeon__drm__winsys.c |  18 +
 .../patches/patch-src_gbm_Makefile.am              |  12 +
 .../patches/patch-src_glx_Makefile.am              |  49 +++
 .../patches/patch-src_glx_apple_apple__glapi.c     |  24 ++
 .../patches/patch-src_glx_dri__common.h            |  17 +
 .../patches/patch-src_glx_dri__glx.c               |  43 +++
 .../patches/patch-src_glx_glxclient.h              |  19 +
 .../patches/patch-src_glx_glxcurrent.c             |  40 +++
 MesaLib-dfbsd-meson/patches/patch-src_glx_glxext.c |  47 +++
 .../patches/patch-src_intel_Makefile.tools.am      |  14 +
 ...src_intel_compiler_brw__fs__bank__conflicts.cpp |  23 ++
 .../patch-src_intel_isl_isl__tiled__memcpy.c       |  22 ++
 .../patches/patch-src_intel_tools_aub__mem.c       |  43 +++
 ...atch-src_intel_tools_aubinator__error__decode.c |  19 +
 .../patches/patch-src_intel_tools_error2aub.c      |  19 +
 .../patch-src_intel_vulkan_anv__allocator.c        |  62 ++++
 .../patches/patch-src_intel_vulkan_anv__device.c   |  61 ++++
 .../patches/patch-src_intel_vulkan_anv__gem.c      |  19 +
 .../patch-src_intel_vulkan_anv__gem__stubs.c       |  36 ++
 .../patches/patch-src_intel_vulkan_anv__queue.c    |  25 ++
 .../patches/patch-src_mapi_entry__x86-64__tls.h    |  32 ++
 .../patches/patch-src_mapi_entry__x86__tls.h       |  40 +++
 .../patch-src_mapi_glapi_gen_gl__gentable.py       |  15 +
 .../patches/patch-src_mapi_u__current.c            |  31 ++
 .../patches/patch-src_mapi_u__current.h            |  16 +
 ...patch-src_mesa_drivers_dri_i915_intel__screen.c |  44 +++
 .../patch-src_mesa_drivers_dri_i965_brw__bufmgr.c  |  31 ++
 ...mesa_drivers_dri_i965_brw__performance__query.c |  61 ++++
 ...patch-src_mesa_drivers_dri_i965_intel__screen.c |  81 +++++
 .../patch-src_mesa_drivers_dri_swrast_swrast.c     |  19 +
 .../patches/patch-src_mesa_drivers_x11_Makefile.am |  15 +
 .../patches/patch-src_mesa_main_context.c          |  57 +++
 .../patches/patch-src_mesa_main_extensions.c       |  31 ++
 .../patches/patch-src_mesa_main_macros.h           |  18 +
 .../patches/patch-src_mesa_main_shader__query.cpp  |  58 +++
 .../patches/patch-src_mesa_x86_common__x86.c       |  24 ++
 .../patches/patch-src_util_Makefile.am             |  15 +
 .../patches/patch-src_util_build__id.c             |  26 ++
 .../patches/patch-src_util_disk__cache.c           |  29 ++
 MesaLib-dfbsd-meson/patches/patch-src_util_futex.h |  53 +++
 .../patches/patch-src_util_os__time.c              |  18 +
 .../patches/patch-src_util_ralloc.c                |  25 ++
 .../patches/patch-src_util_strndup.h               |  15 +
 .../patches/patch-src_util_u__atomic.h             |  15 +
 .../patches/patch-src_util_u__queue.c              |  70 ++++
 .../patches/patch-src_util_u__thread.h             | 115 ++++++
 .../patches/patch-src_util_xmlconfig.c             |  31 ++
 82 files changed, 3629 insertions(+)

diffs:
diff --git a/Makefile b/Makefile
index 2c4cd090fa..5063e77295 100644
--- a/Makefile
+++ b/Makefile
@@ -21,6 +21,7 @@ SUBDIR+=	GoogleEarth
 SUBDIR+=	I2util
 SUBDIR+=	LuaJIT21
 SUBDIR+=	MesaLib-dfbsd
+SUBDIR+=	MesaLib-dfbsd-meson
 SUBDIR+=	MoleInvasion
 SUBDIR+=	OpenGLUT
 SUBDIR+=	OpenIPMI
diff --git a/MesaLib-dfbsd-meson/DESCR b/MesaLib-dfbsd-meson/DESCR
new file mode 100644
index 0000000000..8a8cccf5b9
--- /dev/null
+++ b/MesaLib-dfbsd-meson/DESCR
@@ -0,0 +1,5 @@
+MesaLib is a 3-D graphics library with an API which is very similar to
+that of OpenGL*.  To the extent that Mesa utilizes the OpenGL command syntax
+or state machine, it is being used with authorization from Silicon Graphics,
+Inc.  However, the author makes no claim that Mesa is in any way a
+compatible replacement for OpenGL or associated with Silicon Graphics, Inc.
diff --git a/MesaLib-dfbsd-meson/Makefile b/MesaLib-dfbsd-meson/Makefile
new file mode 100644
index 0000000000..32c6348d3e
--- /dev/null
+++ b/MesaLib-dfbsd-meson/Makefile
@@ -0,0 +1,142 @@
+# $NetBSD: Makefile,v 1.18 2019/02/22 15:40:35 tnn Exp $
+
+# 2019-02-26	panfrost/midgard: Allow flt to run on most units
+COMMIT_ID=	b7a5b81d1488d4ec11ca49664b4f83ffd9dade2f
+
+# 2019-02-21	gallium/auxiliary/vl: Fix transparent issue on compute shader with rgba
+## COMMIT_ID=	eac822eac1d0d682aa199cb039e9df4c53ec5e1e
+
+PORTNAME=	mesa		
+
+DISTNAME=	${PORTNAME}-${COMMIT_ID}
+PKGNAME=	MesaLib-19.1.0
+# PKGREVISION=	1
+CATEGORIES=	graphics x11
+MASTER_SITES=	http://cgit.freedesktop.org/mesa/${PORTNAME}/snapshot/
+
+# DISTNAME=	mesa-18.3.3
+# PKGNAME=	${DISTNAME:S/mesa/MesaLib/}
+# CATEGORIES=	graphics x11
+# MASTER_SITES=	ftp://ftp.freedesktop.org/pub/mesa/
+# MASTER_SITES=	ftp://ftp.freedesktop.org/pub/mesa/${PKGVERSION_NOREV}/
+EXTRACT_SUFX=	.tar.xz
+
+MAINTAINER=	pkgsrc-users%NetBSD.org@localhost
+HOMEPAGE=	https://www.mesa3d.org/
+COMMENT=	The Mesa 3D Graphics Library
+LICENSE=	mit
+
+GNU_CONFIGURE=	yes
+# USE_TOOLS+=	autoconf automake autoreconf bison pkg-config gmake flex
+USE_TOOLS+=	bison pkg-config gmake flex
+
+USE_LANGUAGES=	c99 c++
+# USE_LIBTOOL=	yes
+
+PKGCONFIG_OVERRIDE+=	src/egl/main/egl.pc.in
+PKGCONFIG_OVERRIDE+=	src/gallium/targets/d3dadapter9/d3d.pc.in
+PKGCONFIG_OVERRIDE+=	src/gallium/targets/osmesa/osmesa.pc.in
+PKGCONFIG_OVERRIDE+=	src/gallium/targets/xa/xatracker.pc.in
+PKGCONFIG_OVERRIDE+=	src/gbm/main/gbm.pc.in
+PKGCONFIG_OVERRIDE+=	src/glx/windows/windowsdriproto.pc.in
+PKGCONFIG_OVERRIDE+=	src/mapi/es1api/glesv1_cm.pc.in
+PKGCONFIG_OVERRIDE+=	src/mapi/es2api/glesv2.pc.in
+PKGCONFIG_OVERRIDE+=	src/mesa/drivers/dri/dri.pc.in
+PKGCONFIG_OVERRIDE+=	src/mesa/drivers/osmesa/osmesa.pc.in
+PKGCONFIG_OVERRIDE+=	src/mesa/gl.pc.in
+
+CONFIGURE_ARGS+=		--enable-shared-glapi
+MESON_ARGS+=			-Dshared-glapi=true
+
+# Work around a buildlink and/or libtool bug:
+# In the libtool install/relink stage, if we want to link with two static
+# archives named libglapi.la but in different directories, bad things happen.
+SUBST_CLASSES+=			wrapper-bug
+SUBST_STAGE.wrapper-bug=	pre-configure
+SUBST_MESSAGE.wrapper-bug=	Renaming non-shared libglapi.la in Makefiles
+SUBST_FILES.wrapper-bug=	src/gallium/targets/libgl-xlib/Makefile.am
+SUBST_FILES.wrapper-bug+=	src/gallium/targets/osmesa/Makefile.am
+SUBST_FILES.wrapper-bug+=	src/glx/Makefile.am
+SUBST_FILES.wrapper-bug+=	src/mapi/Makefile.am
+SUBST_FILES.wrapper-bug+=	src/mesa/drivers/osmesa/Makefile.am
+SUBST_FILES.wrapper-bug+=	src/mesa/drivers/x11/Makefile.am
+SUBST_SED.wrapper-bug=		-e 's,shared-glapi/libglapi\.la,shared-glapi/libglapi_tmp_rename.la,g'
+SUBST_SED.wrapper-bug+=		-e 's,shared_glapi_libglapi_la,shared_glapi_libglapi_tmp_rename_la,g'
+SUBST_SED.wrapper-bug+=		-e 's,libglapi\.la,libglapi_impl.la,g'
+SUBST_SED.wrapper-bug+=		-e 's,libglapi_la,libglapi_impl_la,g'
+SUBST_SED.wrapper-bug+=		-e 's,libglapi_tmp_rename\.la,libglapi.la,g'
+SUBST_SED.wrapper-bug+=		-e 's,libglapi_tmp_rename_la,libglapi_la,g'
+
+# Replace /etc/drirc.d with ${PREFIX}/etc/drirc.d
+SUBST_CLASSES+=			drirc
+SUBST_STAGE.drirc=		pre-configure
+SUBST_MESSAGE.drirc=		Fixing hardcoded /etc/drirc.d references
+SUBST_FILES.drirc+=		src/util/xmlconfig.c
+SUBST_SED.drirc+=		 -e 's|/etc|${PREFIX}/etc|g'
+
+CFLAGS.SunOS+=		-D__EXTENSIONS__ -D_POSIX_PTHREAD_SEMANTICS
+CXXFLAGS.SunOS+=	-Drestrict=__restrict__
+LDFLAGS.SunOS+=		-lsocket -lnsl
+
+.include "../../mk/bsd.prefs.mk"
+.include "../../mk/compiler.mk"
+.include "options.mk"
+
+.if ${MACHINE_ARCH} == "i386"
+CONFIGURE_ARGS+=	--enable-glx-read-only-text
+MESON_ARGS+=		-Dglx-read-only-text=true
+.endif
+
+PYTHON_FOR_BUILD_ONLY=	yes
+BUILD_DEPENDS+=		${PYPKGPREFIX}-mako-[0-9]*:../../devel/py-mako
+# needed to build vulkan support
+BUILD_DEPENDS+=		${PYPKGPREFIX}-cElementTree-[0-9]*:../../textproc/py-cElementTree
+CONFIGURE_ENV+=		PYTHON=${PYTHONBIN}
+.include "../../lang/python/tool.mk"
+
+# Handle platforms without exp2
+.if !empty(MACHINE_PLATFORM:MNetBSD-[1-5].*-*)
+CPPFLAGS+=	-Dexp2\(x\)=exp\(\(x\)\*M_LN2\)
+CPPFLAGS+=	-Dexp2f\(x\)=expf\(\(x\)\*M_LN2\)
+.endif
+
+# Work around Xorg segfaulting in radeon driver due to wrong alloca being used
+CFLAGS.NetBSD+=		-Dalloca=__builtin_alloca
+CXXFLAGS.NetBSD+=	-Dalloca=__builtin_alloca
+
+# Autotools is being phased out
+CONFIGURE_ARGS+=		--enable-autotools
+
+pre-configure:
+	touch ${WRKSRC}/src/glx/apple_dummy.cpp
+# 	cd ${WRKSRC} && autoreconf -vif
+
+DRIRC_DIR=		${PKG_SYSCONFDIR}/drirc.d
+EGDIR=			${PREFIX}/share/examples/mesa
+OWN_DIRS+=		${DRIRC_DIR}
+INSTALLATION_DIRS+=	${EGDIR}
+CONF_FILES+=		${EGDIR}/00-mesa-defaults.conf	\
+			  ${DRIRC_DIR}/00-mesa-defaults.conf
+
+post-install:
+	${INSTALL_DATA} ${WRKSRC}/src/util/00-mesa-defaults.conf ${DESTDIR}${EGDIR}
+
+# FreeBSD bug 225414 --build-id=sha1 used by i965
+.if ${OPSYS} == "FreeBSD"
+PKG_LD=			${PREFIX}/bin/gld
+LDFLAGS+=		-fuse-ld=${PKG_LD:Q}
+_WRAP_EXTRA_ARGS.CXX+=	-fuse-ld=${PKG_LD:Q}
+CWRAPPERS_APPEND.cxx+=	-fuse-ld=${PKG_LD:Q}
+.include "../../devel/binutils/buildlink3.mk"
+.endif
+
+# Meson
+CFLAGS+=	-Wno-return-type
+.include "../../devel/py-meson/build.mk"
+
+.include "../../devel/zlib/buildlink3.mk"
+.include "../../x11/libXrandr/buildlink3.mk"
+.include "../../x11/libX11/buildlink3.mk"
+.include "../../x11/libXext/buildlink3.mk"
+.include "../../x11/libxcb/buildlink3.mk"
+.include "../../mk/bsd.pkg.mk"
diff --git a/MesaLib-dfbsd-meson/PLIST b/MesaLib-dfbsd-meson/PLIST
new file mode 100644
index 0000000000..03ffac3c30
--- /dev/null
+++ b/MesaLib-dfbsd-meson/PLIST
@@ -0,0 +1,130 @@
+@comment $NetBSD: PLIST,v 1.5 2019/01/19 21:54:03 tnn Exp $
+${PLIST.egl}include/EGL/egl.h
+${PLIST.egl}include/EGL/eglext.h
+${PLIST.egl}include/EGL/eglextchromium.h
+${PLIST.egl}include/EGL/eglmesaext.h
+${PLIST.egl}include/EGL/eglplatform.h
+include/GL/gl.h
+include/GL/gl_mangle.h
+include/GL/glcorearb.h
+include/GL/glext.h
+include/GL/glx.h
+include/GL/glx_mangle.h
+include/GL/glxext.h
+${PLIST.osmesa}include/GL/osmesa.h
+${PLIST.dri}include/GL/internal/dri_interface.h
+${PLIST.glesv1}include/GLES/egl.h
+${PLIST.glesv1}include/GLES/gl.h
+${PLIST.glesv1}include/GLES/glext.h
+${PLIST.glesv1}include/GLES/glplatform.h
+${PLIST.glesv2}include/GLES2/gl2.h
+${PLIST.glesv2}include/GLES2/gl2ext.h
+${PLIST.glesv2}include/GLES2/gl2platform.h
+${PLIST.glesv2}include/GLES3/gl3.h
+${PLIST.glesv2}include/GLES3/gl31.h
+${PLIST.glesv2}include/GLES3/gl32.h
+${PLIST.glesv2}include/GLES3/gl3ext.h
+${PLIST.glesv2}include/GLES3/gl3platform.h
+include/KHR/khrplatform.h
+${PLIST.gbm}include/gbm.h
+${PLIST.vulkan}include/vulkan/vulkan_intel.h
+${PLIST.xatracker}include/xa_composite.h
+${PLIST.xatracker}include/xa_context.h
+${PLIST.xatracker}include/xa_tracker.h
+@comment ${PLIST.vaapi}lib/dri/gallium_drv_video.la
+@comment ${PLIST.vaapi}lib/dri/gallium_drv_video.so
+${PLIST.i915}lib/dri/i915_dri.so
+${PLIST.i965}lib/dri/i965_dri.so
+${PLIST.iris}lib/dri/iris_dri.so
+@comment ${PLIST.ilo}lib/dri/ilo_dri.so
+${PLIST.freedreno}lib/dri/kgsl_dri.so
+${PLIST.swrast}lib/dri/kms_swrast_dri.so
+${PLIST.freedreno}lib/dri/msm_dri.so
+${PLIST.nouveau}lib/dri/nouveau_dri.so
+${PLIST.nouveau_dri}lib/dri/nouveau_vieux_dri.so
+${PLIST.r200}lib/dri/r200_dri.so
+${PLIST.r300}lib/dri/r300_dri.so
+${PLIST.r600}lib/dri/r600_dri.so
+${PLIST.radeon_dri}lib/dri/radeon_dri.so
+${PLIST.radeonsi}lib/dri/radeonsi_dri.so
+${PLIST.swrast_dri}lib/dri/swrast_dri.so
+${PLIST.vc4}lib/dri/vc4_dri.so
+${PLIST.svga}lib/dri/vmwgfx_dri.so
+@comment ${PLIST.egl}lib/libEGL.la
+${PLIST.egl}lib/libEGL.so
+${PLIST.egl}lib/libEGL.so.1
+${PLIST.egl}lib/libEGL.so.1.0.0
+@comment lib/libGL.la
+lib/libGL.so
+lib/libGL.so.1
+lib/libGL.so.1.2.0
+@comment ${PLIST.glesv1}lib/libGLESv1_CM.la
+${PLIST.glesv1}lib/libGLESv1_CM.so
+${PLIST.glesv1}lib/libGLESv1_CM.so.1
+${PLIST.glesv1}lib/libGLESv1_CM.so.1.0.0
+@comment ${PLIST.glesv2}lib/libGLESv2.la
+${PLIST.glesv2}lib/libGLESv2.so
+${PLIST.glesv2}lib/libGLESv2.so.2
+${PLIST.glesv2}lib/libGLESv2.so.2.0.0
+@comment ${PLIST.osmesa}lib/libOSMesa.la
+${PLIST.osmesa}lib/libOSMesa.so
+${PLIST.osmesa}lib/libOSMesa.so.8
+${PLIST.osmesa}lib/libOSMesa.so.8.0.0
+${PLIST.xvmc}${PLIST.nouveau}lib/libXvMCnouveau.so
+@comment ${PLIST.xvmc}${PLIST.nouveau}lib/libXvMCnouveau.so.1
+@comment ${PLIST.xvmc}${PLIST.nouveau}lib/libXvMCnouveau.so.1.0
+@comment ${PLIST.xvmc}${PLIST.nouveau}lib/libXvMCnouveau.so.1.0.0
+${PLIST.xvmc}${PLIST.r600}lib/libXvMCr600.so
+@comment ${PLIST.xvmc}${PLIST.r600}lib/libXvMCr600.so.1
+@comment ${PLIST.xvmc}${PLIST.r600}lib/libXvMCr600.so.1.0
+@comment ${PLIST.xvmc}${PLIST.r600}lib/libXvMCr600.so.1.0.0
+@comment ${PLIST.gbm}lib/libgbm.la
+${PLIST.gbm}lib/libgbm.so
+${PLIST.gbm}lib/libgbm.so.1
+${PLIST.gbm}lib/libgbm.so.1.0.0
+@comment lib/libglapi.la
+lib/libglapi.so
+lib/libglapi.so.0
+lib/libglapi.so.0.0.0
+@comment ${PLIST.wayland}lib/libwayland-egl.la
+@comment ${PLIST.xatracker}lib/libxatracker.la
+${PLIST.xatracker}lib/libxatracker.so
+${PLIST.xatracker}lib/libxatracker.so.2
+${PLIST.xatracker}lib/libxatracker.so.2.5.0
+${PLIST.dri}lib/pkgconfig/dri.pc
+${PLIST.egl}lib/pkgconfig/egl.pc
+${PLIST.gbm}lib/pkgconfig/gbm.pc
+${PLIST.osmesa}lib/pkgconfig/osmesa.pc
+lib/pkgconfig/gl.pc
+${PLIST.glesv1}lib/pkgconfig/glesv1_cm.pc
+${PLIST.glesv2}lib/pkgconfig/glesv2.pc
+${PLIST.wayland}lib/pkgconfig/wayland-egl.pc
+${PLIST.xatracker}lib/pkgconfig/xatracker.pc
+${PLIST.nouveau}${PLIST.vdpau}lib/vdpau/libvdpau_nouveau.so
+${PLIST.nouveau}${PLIST.vdpau}lib/vdpau/libvdpau_nouveau.so.1
+${PLIST.nouveau}${PLIST.vdpau}lib/vdpau/libvdpau_nouveau.so.1.0
+${PLIST.nouveau}${PLIST.vdpau}lib/vdpau/libvdpau_nouveau.so.1.0.0
+${PLIST.vdpau}lib/vdpau/libvdpau_r300.so
+${PLIST.vdpau}lib/vdpau/libvdpau_r300.so.1
+${PLIST.vdpau}lib/vdpau/libvdpau_r300.so.1.0
+${PLIST.vdpau}lib/vdpau/libvdpau_r300.so.1.0.0
+${PLIST.vdpau}lib/vdpau/libvdpau_r600.so
+${PLIST.vdpau}lib/vdpau/libvdpau_r600.so.1
+${PLIST.vdpau}lib/vdpau/libvdpau_r600.so.1.0
+${PLIST.vdpau}lib/vdpau/libvdpau_r600.so.1.0.0
+${PLIST.vdpau}lib/vdpau/libvdpau_radeonsi.so
+${PLIST.vdpau}lib/vdpau/libvdpau_radeonsi.so.1
+${PLIST.vdpau}lib/vdpau/libvdpau_radeonsi.so.1.0
+${PLIST.vdpau}lib/vdpau/libvdpau_radeonsi.so.1.0.0
+@comment ${PLIST.vdpau}lib/dri/nouveau_drv_video.la
+${PLIST.nouveau}${PLIST.vaapi}lib/dri/nouveau_drv_video.so
+@comment ${PLIST.vdpau}lib/dri/r600_drv_video.la
+${PLIST.vaapi}lib/dri/r600_drv_video.so
+@comment ${PLIST.vdpau}lib/dri/radeonsi_drv_video.la
+${PLIST.vaapi}lib/dri/radeonsi_drv_video.so
+${PLIST.vulkan}lib/libvulkan_intel.la
+${PLIST.vulkan}lib/libvulkan_radeon.la
+${PLIST.vulkan}share/vulkan/icd.d/intel_icd.${MACHINE_ARCH}.json
+${PLIST.vulkan}share/vulkan/icd.d/radeon_icd.${MACHINE_ARCH}.json
+share/drirc.d/00-mesa-defaults.conf
+share/examples/mesa/00-mesa-defaults.conf
diff --git a/MesaLib-dfbsd-meson/TODO b/MesaLib-dfbsd-meson/TODO
new file mode 100644
index 0000000000..5589abaf3e
--- /dev/null
+++ b/MesaLib-dfbsd-meson/TODO
@@ -0,0 +1,8 @@
+Copy port to graphics/MesaLib, do not install from wip.
+
+* See what can be done on NetBSD build for glesv1 and glesv2
+* See if libLLVM 3.9+ on FreeBSD can build nouveau
+* Test OSX quartz, check if bug 90311 patch needs regen
+* Test Solaris
+* Test Linux
+* Fully port Vulkan support from FreeBSD ports. 
diff --git a/MesaLib-dfbsd-meson/buildlink3.mk b/MesaLib-dfbsd-meson/buildlink3.mk
new file mode 100644
index 0000000000..939ef86eb8
--- /dev/null
+++ b/MesaLib-dfbsd-meson/buildlink3.mk
@@ -0,0 +1,50 @@
+# $NetBSD: buildlink3.mk,v 1.2 2018/10/10 11:03:02 maya Exp $
+
+BUILDLINK_TREE+=	MesaLib
+
+.if !defined(MESALIB_BUILDLINK3_MK)
+MESALIB_BUILDLINK3_MK:=
+
+BUILDLINK_API_DEPENDS.MesaLib+=	MesaLib>=3.4.2
+BUILDLINK_ABI_DEPENDS.MesaLib+=	MesaLib>=7.11.2
+BUILDLINK_PKGSRCDIR.MesaLib?=	../../graphics/MesaLib
+
+.include "../../mk/bsd.fast.prefs.mk"
+
+.if ${X11_TYPE} == "modular"
+BUILDLINK_ABI_DEPENDS.MesaLib+=	MesaLib>=10.5.3
+# This is needed to avoid linking conflicting libstdc++ versions
+.  if defined(USE_LANGUAGES) && !empty(USE_LANGUAGES:Mc++)
+GCC_REQD+=			4.2
+.  endif
+.endif
+
+# See <http://developer.apple.com/qa/qa2007/qa1567.html>.
+.if ${X11_TYPE} == "native" && !empty(MACHINE_PLATFORM:MDarwin-[9].*-*)
+BUILDLINK_LDFLAGS.MesaLib+=	-Wl,-dylib_file,/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib
+.endif
+
+pkgbase:= MesaLib
+.include "../../mk/pkg-build-options.mk"
+
+.if ${X11_TYPE} == "native" && ${OPSYS} != "Cygwin" && exists(${X11BASE}/lib/pkgconfig/dri.pc)
+PKG_BUILD_OPTIONS.MesaLib+=	dri
+.endif
+
+.if !empty(PKG_BUILD_OPTIONS.MesaLib:Mdri)
+.  include "../../graphics/MesaLib/dri.mk"
+.endif
+
+.if	${X11_TYPE} == "modular" && !empty(PKG_BUILD_OPTIONS.MesaLib:Mdri) ||	\
+	${X11_TYPE} == "native"  && exists(${X11BASE}/include/EGL/egl.h)
+MESALIB_SUPPORTS_EGL=	yes
+.else
+MESALIB_SUPPORTS_EGL=	no
+.endif
+
+.include "../../mk/pthread.buildlink3.mk"
+
+.include "../../x11/libXext/buildlink3.mk"
+.endif # MESALIB_BUILDLINK3_MK
+
+BUILDLINK_TREE+=	-MesaLib
diff --git a/MesaLib-dfbsd-meson/builtin.mk b/MesaLib-dfbsd-meson/builtin.mk
new file mode 100644
index 0000000000..f9bab9d959
--- /dev/null
+++ b/MesaLib-dfbsd-meson/builtin.mk
@@ -0,0 +1,87 @@
+# $NetBSD: builtin.mk,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+BUILTIN_PKG:=	MesaLib
+
+BUILTIN_FIND_FILES_VAR:=	H_MESALIB PC_GL
+BUILTIN_FIND_FILES.H_MESALIB=	${X11BASE}/include/GL/glx.h
+BUILTIN_FIND_FILES.PC_GL=	${X11BASE}/lib/pkgconfig/gl.pc
+BUILTIN_FIND_FILES.PC_GL+=	${X11BASE}/lib${LIBABISUFFIX}/pkgconfig/gl.pc
+
+.include "../../mk/buildlink3/bsd.builtin.mk"
+
+###
+### Determine if there is a built-in implementation of the package and
+### set IS_BUILTIN.<pkg> appropriately ("yes" or "no").
+###
+.if !defined(IS_BUILTIN.MesaLib)
+.  if empty(PC_GL:M__nonexistent__)
+IS_BUILTIN.MesaLib=	yes
+.  elif empty(H_MESALIB:M__nonexistent__)
+IS_BUILTIN.MesaLib=	yes
+.  else
+IS_BUILTIN.MesaLib=	no
+.  endif
+.endif
+MAKEVARS+=	IS_BUILTIN.MesaLib
+
+###
+### If there is a built-in implementation, then set BUILTIN_PKG.<pkg> to
+### a package name to represent the built-in package.
+###
+.if !defined(BUILTIN_PKG.MesaLib) && \
+    !empty(IS_BUILTIN.MesaLib:M[yY][eE][sS])
+.  if empty(PC_GL:M__nonexistent__)
+BUILTIN_VERSION.Mesa!= ${SED} -n -e 's/Version: //p' ${PC_GL}
+.  elif empty(H_MESALIB:M__nonexistent__)
+.    include "../../graphics/Mesa/version.mk"
+.  else # ?
+BUILTIN_VERSION.Mesa:= 0.something-weird-happened
+.  endif
+BUILTIN_PKG.MesaLib=	MesaLib-${BUILTIN_VERSION.Mesa}
+MAKEVARS+=	BUILTIN_VERSION.Mesa
+.endif
+MAKEVARS+=	BUILTIN_PKG.MesaLib
+
+###
+### Determine whether we should use the built-in implementation if it
+### exists, and set USE_BUILTIN.<pkg> appropriate ("yes" or "no").
+###
+.if !defined(USE_BUILTIN.MesaLib)
+.  if ${PREFER.MesaLib} == "pkgsrc"
+USE_BUILTIN.MesaLib=	no
+.  else
+USE_BUILTIN.MesaLib=	${IS_BUILTIN.MesaLib}
+.    if defined(BUILTIN_PKG.MesaLib) && \
+        !empty(IS_BUILTIN.MesaLib:M[yY][eE][sS])
+USE_BUILTIN.MesaLib=	yes
+.      for dep in ${BUILDLINK_API_DEPENDS.MesaLib}
+.        if !empty(USE_BUILTIN.MesaLib:M[yY][eE][sS])
+USE_BUILTIN.MesaLib!=							\
+	if ${PKG_ADMIN} pmatch ${dep:Q} ${BUILTIN_PKG.MesaLib}; then \
+		${ECHO} yes;						\
+	else								\
+		${ECHO} no;						\
+	fi
+.        endif
+.      endfor
+.    endif
+.  endif  # PREFER.MesaLib
+.endif
+MAKEVARS+=	USE_BUILTIN.MesaLib
+
+###
+### The section below only applies if we are not including this file
+### solely to determine whether a built-in implementation exists.
+###
+CHECK_BUILTIN.MesaLib?=	no
+.if !empty(CHECK_BUILTIN.MesaLib:M[nN][oO])
+
+.  if !empty(USE_BUILTIN.MesaLib:M[nN][oO])
+.    include "../../mk/pthread.buildlink3.mk"
+.    include "../../mk/pthread.builtin.mk"
+BUILTIN_PKG:=	MesaLib
+.  endif
+
+.  include "../../mk/x11.builtin.mk"
+
+.endif	# CHECK_BUILTIN.MesaLib
diff --git a/MesaLib-dfbsd-meson/distinfo b/MesaLib-dfbsd-meson/distinfo
new file mode 100644
index 0000000000..10468c4227
--- /dev/null
+++ b/MesaLib-dfbsd-meson/distinfo
@@ -0,0 +1,78 @@
+$NetBSD: distinfo,v 1.16 2019/02/22 15:40:35 tnn Exp $
+
+SHA1 (mesa-b7a5b81d1488d4ec11ca49664b4f83ffd9dade2f.tar.xz) = 1f4abc5e81b0324a29e18e4a6462b7594426a0e5
+RMD160 (mesa-b7a5b81d1488d4ec11ca49664b4f83ffd9dade2f.tar.xz) = 9de8f29f7c4ed493fd2fcc13bf1acc219f757b49
+SHA512 (mesa-b7a5b81d1488d4ec11ca49664b4f83ffd9dade2f.tar.xz) = 77dff3852e6e9a396f1147a58e127188decf42496e89428ad3950d7bc00745fe538a7f9739740e64631bd0e3d3c65fb9411c7b6badfcea751da7cf735cca59de
+Size (mesa-b7a5b81d1488d4ec11ca49664b4f83ffd9dade2f.tar.xz) = 10566208 bytes
+SHA1 (patch-configure.ac) = cddca44dbf1e2f447dd30a03440104920d6c24ab
+SHA1 (patch-include_GL_internal_dri__interface.h) = 76803a4ab6ff7e596900a0099dd9712093f8bc21
+SHA1 (patch-src_amd_common_ac__debug.c) = 8233367c3b5bc344442ea8d19488fdd1e3791ae9
+SHA1 (patch-src_amd_vulkan_radv__device.c) = a029ba89311fe62e3712573993fabf38910e9838
+SHA1 (patch-src_amd_vulkan_winsys_amdgpu_radv__amdgpu__cs.c) = 1fe81a7b16e36dc9125400c20543271216a33a45
+SHA1 (patch-src_compiler_builtin__type__macros.h) = 857bca0c0f55ec8d7a20b3807c7a5d7bd06bdfbf
+SHA1 (patch-src_compiler_glsl_glsl__parser__extras.cpp) = ef114d6e288e6d212fce9d1c0606f7d454a171c4
+SHA1 (patch-src_egl_drivers_dri2_platform__drm.c) = e18e7b1ffbc74b8acf3d9095a92c750f9d005479
+SHA1 (patch-src_egl_drivers_dri2_platform__x11.c) = 49e48c31eacb79d1da357fe70eaffd2926b5280e
+SHA1 (patch-src_egl_main_eglglobals.c) = 0d52014f52e62fc5fa6650336ddb0011ecf331e6
+SHA1 (patch-src_gallium_auxiliary_drivers_trace_tr__dump.c) = 360e1608508a7bbb41acecd58930781038e2309e
+SHA1 (patch-src_gallium_auxiliary_pipe-loader_pipe__loader__drm.c) = f913b779404e6bd8ae707a4fd66eb7c1dca9b311
+SHA1 (patch-src_gallium_auxiliary_util_u__format__tests.c) = d878e6f3e9a0a37d4903c0d0551f9fa535635d40
+SHA1 (patch-src_gallium_drivers_freedreno_freedreno__screen.c) = d76bf52c25609d641dbf4021e81282cbdc925976
+SHA1 (patch-src_gallium_drivers_iris_meson.build) = 9b94ae7047763cc4b1be5b39a3d9cac898e10f65
+SHA1 (patch-src_gallium_drivers_nouveau_nouveau__vp3__video.c) = 04f95784c3270c9bb7e95377982e217962481525
+SHA1 (patch-src_gallium_drivers_nouveau_nv50_nv84__video.c) = 1b4239fe053523835ecac006894bdb0cde0ee626
+SHA1 (patch-src_gallium_drivers_radeonsi_si__compute__blit.c) = 65235a932809c434546db0416e69241d62cdaf06
+SHA1 (patch-src_gallium_drivers_radeonsi_si__pipe.c) = c8b6d6418956469f283f3e6bab848c33f54b75e1
+SHA1 (patch-src_gallium_drivers_radeonsi_si__state__shaders.c) = ed51a57765f2349bc91fd509dc03e709241bd899
+SHA1 (patch-src_gallium_drivers_vc4_vc4__bufmgr.c) = 1d591d346486fdf58893f69ab92a272e6a31a987
+SHA1 (patch-src_gallium_include_pipe_p__config.h) = f4e38eac66167b619c30076bb0144dd716310967
+SHA1 (patch-src_gallium_state__trackers_clover_llvm_invocation.cpp) = 3053db09fbfffffd82e232b60b244a0a80c8f181
+SHA1 (patch-src_gallium_state__trackers_clover_llvm_metadata.hpp) = c97d38098ea03658bc193a50e445b87f1c020839
+SHA1 (patch-src_gallium_state__trackers_clover_util_range.hpp) = cdc78067986c1b92818472c4201c58ef1b42c4f4
+SHA1 (patch-src_gallium_winsys_radeon_drm_radeon__drm__winsys.c) = 8c73f29a93e4e7ae8c0acd6f5f345047dc8a8541
+SHA1 (patch-src_gbm_Makefile.am) = 5f3107afbf64b97f7d21ce427cecc4fb78974db3
+SHA1 (patch-src_glx_Makefile.am) = 869c4f2388f835b9b296b3c84c2a03ef7717f17d
+SHA1 (patch-src_glx_apple_apple__glapi.c) = c4eea8dabf74eb03d22da4eb834b18ae3384c63b
+SHA1 (patch-src_glx_dri__common.h) = 0274877f8c65a4bb729536a897df4704897a4c6e
+SHA1 (patch-src_glx_dri__glx.c) = 8fd48776e9953b18bd17ba130d90ae2935e67242
+SHA1 (patch-src_glx_glxclient.h) = f0358179ae397bc8677597b0ccb9a471f40f15de
+SHA1 (patch-src_glx_glxcurrent.c) = 8b8e949eded13491c5865601253c6e7d4b06e228
+SHA1 (patch-src_glx_glxext.c) = 15c2c5e0c6b5095ce849fb86ad148aa05d7d907a
+SHA1 (patch-src_intel_Makefile.tools.am) = 5253d5972b48ae3bc8d648bb9f479dcf6cbd3fab
+SHA1 (patch-src_intel_compiler_brw__fs__bank__conflicts.cpp) = 6276d2c6846bb4dd08699921bec4e20202a17478
+SHA1 (patch-src_intel_isl_isl__tiled__memcpy.c) = 265721e521d1d1e43a50cbbcffbc0f0fc47922f7
+SHA1 (patch-src_intel_tools_aub__mem.c) = 671e478a843b70c12c5038ad314c108925ab5cc7
+SHA1 (patch-src_intel_tools_aubinator__error__decode.c) = 159b57f9a3c1fd37ab1e5b49ff911073e2e9ff9b
+SHA1 (patch-src_intel_tools_error2aub.c) = e38395e3889f6e3af645f312a429ce2a7d285231
+SHA1 (patch-src_intel_vulkan_anv__allocator.c) = 5dd27eea9811d739558c5b488c57a3d7ae539d87
+SHA1 (patch-src_intel_vulkan_anv__device.c) = 03600546e73527ef1db50650907f7ad3062273f3
+SHA1 (patch-src_intel_vulkan_anv__gem.c) = b8eb487fa704151e7c3c3b1d23973b2b0aa5922e
+SHA1 (patch-src_intel_vulkan_anv__gem__stubs.c) = 7f0a25e96624815ef0912024b52bbb512d4fa42f
+SHA1 (patch-src_intel_vulkan_anv__queue.c) = 2dbf7dfd0c77f74f510032bf8d12109f58c50a30
+SHA1 (patch-src_mapi_entry__x86-64__tls.h) = 11b7ef1da435fa17fc7025a46a123d447d6a7d07
+SHA1 (patch-src_mapi_entry__x86__tls.h) = 11c0f5302d305a77f3a1780d44a2c61f48a66273
+SHA1 (patch-src_mapi_glapi_gen_gl__gentable.py) = 0b1d4ef3f78a9b3726ef7f9921608a48a5e4ac56
+SHA1 (patch-src_mapi_u__current.c) = 38d324fcd1c28d155106ccd248edb5eb1aa9ffac
+SHA1 (patch-src_mapi_u__current.h) = 465a992bd34057e9521f0a33e6f2e25cefc145ca
+SHA1 (patch-src_mesa_drivers_dri_i915_intel__screen.c) = e33f51b3502e8c52ff7283aeb807996717f79f4f
+SHA1 (patch-src_mesa_drivers_dri_i965_brw__bufmgr.c) = 09e62d6b9d614fa3d15bd7cc0f05b8bbbdcb92bd
+SHA1 (patch-src_mesa_drivers_dri_i965_brw__performance__query.c) = 9579ab29e0a913aa0516665e72a8573097932312
+SHA1 (patch-src_mesa_drivers_dri_i965_intel__screen.c) = 639d0d2680a98dd5213dfadf608468de6ac54c20
+SHA1 (patch-src_mesa_drivers_dri_swrast_swrast.c) = 3106f350e590f62c8bd29cd85f24f977639dccdb
+SHA1 (patch-src_mesa_drivers_x11_Makefile.am) = 172a8da11a620edce790f64338a0390cd1e93188
+SHA1 (patch-src_mesa_main_context.c) = 74226013b56ad6c9678f1970458538b35967678f
+SHA1 (patch-src_mesa_main_extensions.c) = 2f48bdb1176c2878bb33bcfab7556172b50a987e
+SHA1 (patch-src_mesa_main_macros.h) = c5dceaa8dc02a58e5b2273d82e3fe1cc12e327d3
+SHA1 (patch-src_mesa_main_shader__query.cpp) = 3f9c31645d87855759def11344dee16af23c7be3
+SHA1 (patch-src_mesa_x86_common__x86.c) = f8c4b93443ef66d017f6aa114b877565b30f2598
+SHA1 (patch-src_util_Makefile.am) = e390cd47b784ad08987b81fdbce537968ad4a624
+SHA1 (patch-src_util_build__id.c) = fee28ddf5c91208492efcfdebf32e0cfef35502d
+SHA1 (patch-src_util_disk__cache.c) = cc0b29780dba5d5b5e43c0798336f16a1f0008de
+SHA1 (patch-src_util_futex.h) = 35097c3b8baf8b969c6ec5ec1feb6f4e0a48237e
+SHA1 (patch-src_util_os__time.c) = 0cdeec38dbb09700f4cfaa075f865e2a617daf31
+SHA1 (patch-src_util_ralloc.c) = d311bfd9ed7e673d72e050668d351c1e6552cdc8
+SHA1 (patch-src_util_strndup.h) = 73f49694ca48ad6b9a9d8346c5b84fddec2463bd
+SHA1 (patch-src_util_u__atomic.h) = 31d4514538ef5ee53012695eb5c66134aaec981e
+SHA1 (patch-src_util_u__queue.c) = ed1ea3f6fc37e9a64894a3e865c48691b6e01b2c
+SHA1 (patch-src_util_u__thread.h) = 1c0d6ea3638e79bb437843e96cfe6786a9616b7b
+SHA1 (patch-src_util_xmlconfig.c) = ad5619e067957b120a70c1c63421c92b356e16ac
diff --git a/MesaLib-dfbsd-meson/dri.mk b/MesaLib-dfbsd-meson/dri.mk
new file mode 100644
index 0000000000..b5bf454044
--- /dev/null
+++ b/MesaLib-dfbsd-meson/dri.mk
@@ -0,0 +1,34 @@
+# $NetBSD: dri.mk,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+#
+# Currently, this is for convenience only.
+#
+.if !defined(DRI_MK)
+DRI_MK=		# defined
+
+.  if !defined(USE_BUILTIN.MesaLib)
+CHECK_BUILTIN.MesaLib:=	yes
+.    include "../../graphics/MesaLib/builtin.mk"
+CHECK_BUILTIN.MesaLib:=	no
+.  endif
+
+.  if !empty(USE_BUILTIN.MesaLib:M[Nn][Oo])
+.    if ${OPSYS} != "Darwin"
+BUILDLINK_API_DEPENDS.libdrm+=		libdrm>=2.4.60
+.    endif
+.    if ${OPSYS} == "Linux"
+BUILDLINK_API_DEPENDS.libxcb+=	libxcb>=1.9.3
+.    endif
+.  endif
+.  include "../../textproc/expat/buildlink3.mk"
+.  include "../../x11/xorgproto/buildlink3.mk"
+# XXX these do not have builtin.mk
+.  if ${X11_TYPE} == "modular"
+.    include "../../x11/libxshmfence/buildlink3.mk"
+.  endif
+.  include "../../x11/libXdamage/buildlink3.mk"
+.  include "../../x11/libXfixes/buildlink3.mk"
+.  include "../../x11/libXxf86vm/buildlink3.mk"
+.  if ${OPSYS} != "Darwin"
+.    include "../../x11/libdrm/buildlink3.mk"
+.  endif
+.endif
diff --git a/MesaLib-dfbsd-meson/options.mk b/MesaLib-dfbsd-meson/options.mk
new file mode 100644
index 0000000000..3cbbf3a25a
--- /dev/null
+++ b/MesaLib-dfbsd-meson/options.mk
@@ -0,0 +1,400 @@
+# $NetBSD: options.mk,v 1.11 2019/01/26 21:28:29 tnn Exp $
+
+PKG_OPTIONS_VAR=		PKG_OPTIONS.MesaLib
+PKG_SUPPORTED_OPTIONS=		llvm dri
+PKG_SUGGESTED_OPTIONS=
+
+PKG_SUPPORTED_OPTIONS+=		glx-tls xvmc debug
+PKG_SUPPORTED_OPTIONS+=		vdpau vaapi
+PKG_SUPPORTED_OPTIONS+=		osmesa
+PKG_SUPPORTED_OPTIONS+=		glesv1 glesv2
+PKG_SUPPORTED_OPTIONS+=		xa
+PKG_SUPPORTED_OPTIONS+=		asm
+PKG_SUPPORTED_OPTIONS+=		noatexit
+PKG_SUPPORTED_OPTIONS+=		iris
+PKG_SUGGESTED_OPTIONS+=		iris
+PKG_SUPPORTED_OPTIONS+=		vulkan
+PKG_SUPPORTED_OPTIONS+=		no_cs_queue
+PKG_SUPPORTED_OPTIONS+=		revert_threaded_context
+PKG_SUPPORTED_OPTIONS+=		revert_copy_clear
+PKG_SUPPORTED_OPTIONS+=		revert_i965_softpin
+
+# PKG_SUGGESTED_OPTIONS+=		xvmc
+PKG_SUGGESTED_OPTIONS+=		vdpau vaapi
+
+# glesv1 and glesv2 build error on NetBSD
+# due to no table_noop_array for tls patch
+.if ${OPSYS} != "NetBSD"
+PKG_SUGGESTED_OPTIONS+=		glesv1 glesv2
+.endif
+
+PKG_SUGGESTED_OPTIONS+=		xa
+PKG_SUGGESTED_OPTIONS+=		noatexit
+
+# The LLVM option enables JIT accelerated software rendering and
+# is also required to support the latest RADEON GPUs, so enable it
+# by default on platforms where such GPUs might be encountered.
+.if (${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64") && \
+	${OPSYS} != "SunOS" && ${OPSYS} != "Darwin" && \
+	!(${OPSYS} == "NetBSD" && ${X11_TYPE} == "native")
+PKG_SUGGESTED_OPTIONS+=		llvm
+.endif
+
+.if ${OPSYS} == "FreeBSD" || ${OPSYS} == "OpenBSD" ||		\
+	${OPSYS} == "DragonFly" || ${OPSYS} == "Linux" ||	\
+	${OPSYS} == "SunOS" || ${OPSYS} == "Darwin" ||		\
+	(${OPSYS} == "NetBSD" && ${X11_TYPE} == "modular")
+PKG_SUGGESTED_OPTIONS+=		dri
+.endif
+
+# Use Thread Local Storage in GLX where it is supported by Mesa and works.
+.if \
+	!empty(MACHINE_PLATFORM:MNetBSD-[789].*-i386) ||	\
+	!empty(MACHINE_PLATFORM:MNetBSD-[789].*-x86_64) ||	\
+	!empty(MACHINE_PLATFORM:MLinux-*-i386) ||		\
+	!empty(MACHINE_PLATFORM:MLinux-*-x86_64) ||		\
+	!empty(MACHINE_PLATFORM:MFreeBSD-1[0-9].*-x86_64) ||	\
+	!empty(MACHINE_PLATFORM:MDragonFly-*-x86_64)
+PKG_SUGGESTED_OPTIONS+=		glx-tls
+.endif
+
+.if ${OPSYS} == "NetBSD"
+PKG_SUGGESTED_OPTIONS+=		no_cs_queue
+PKG_SUGGESTED_OPTIONS+=		revert_threaded_context
+PKG_SUGGESTED_OPTIONS+=		revert_copy_clear
+.endif
+
+.if ${OPSYS} == "DragonFly"
+PKG_SUGGESTED_OPTIONS+=		revert_i965_softpin
+.endif
+
+.include "../../mk/bsd.options.mk"
+
+# gallium
+PLIST_VARS+=	freedreno i915 i965 nouveau r300 r600 radeonsi	\
+		swrast svga vc4 virgl vulkan iris
+# classic DRI
+PLIST_VARS+=	dri swrast_dri nouveau_dri radeon_dri r200
+# other features
+PLIST_VARS+=	egl gbm vaapi vdpau wayland xatracker
+PLIST_VARS+=	osmesa xvmc
+PLIST_VARS+=	glesv1 glesv2
+
+.if !empty(PKG_OPTIONS:Mdri)
+
+CONFIGURE_ARGS+=	--enable-dri
+
+# Having DRI3 and egl compiled in by default doesn't hurt, the X server
+# will only use it if it is supported at run time.
+CONFIGURE_ARGS+=	--enable-dri3
+MESON_ARGS+=		-Ddri3=true
+.if ${OPSYS} != "Darwin"
+CONFIGURE_ARGS+=	--enable-egl
+CONFIGURE_ARGS+=	--enable-gbm
+MESON_ARGS+=		-Degl=true
+MESON_ARGS+=		-Dgbm=true
+PLIST.egl=		yes
+PLIST.gbm=		yes
+.else
+CONFIGURE_ARGS+=	--disable-egl
+CONFIGURE_ARGS+=	--disable-gbm
+MESON_ARGS+=		-Degl=false
+MESON_ARGS+=		-Dgbm=false
+.endif
+
+.if !empty(PKG_OPTIONS:Mosmesa)
+CONFIGURE_ARGS+=	--enable-osmesa
+MESON_ARGS+=		-Dosmesa=gallium
+PLIST.osmesa=		yes
+.endif
+
+.if !empty(PKG_OPTIONS:Mglesv1)
+CONFIGURE_ARGS+=	--enable-gles1
+MESON_ARGS+=		-Dgles1=true
+PLIST.glesv1=		yes
+.else
+CONFIGURE_ARGS+=	--disable-gles1
+MESON_ARGS+=		-Dgles1=false
+.endif
+
+.if !empty(PKG_OPTIONS:Mglesv2)
+CONFIGURE_ARGS+=	--enable-gles2
+MESON_ARGS+=		-Dgles2=true
+PLIST.glesv2=		yes
+.else
+CONFIGURE_ARGS+=	--disable-gles2
+MESON_ARGS+=		-Dgles2=false
+.endif
+
+.if !empty(PKG_OPTIONS:Mglx-tls)
+# Recommended by
+# http://www.freedesktop.org/wiki/Software/Glamor/
+CONFIGURE_ARGS+=	--enable-glx-tls
+.else
+# (EE) Failed to load /usr/pkg/lib/xorg/modules/extensions/libglx.so:
+# /usr/pkg/lib/libGL.so.1: Use of initialized Thread Local Storage with model
+# initial-exec and dlopen is not supported
+CONFIGURE_ARGS+=	--disable-glx-tls
+.endif # glx-tls
+
+# DRI on Linux needs either sysfs or udev
+CONFIGURE_ARGS.Linux+=	--enable-sysfs
+
+PLIST.dri=	yes
+
+.if ${OPSYS} != "Darwin"
+BUILDLINK_DEPMETHOD.libpciaccess=	full
+.include "../../sysutils/libpciaccess/buildlink3.mk"
+.endif
+.include "../../graphics/MesaLib/dri.mk"
+
+DRI_DRIVERS=		#
+GALLIUM_DRIVERS=	#
+VULKAN_DRIVERS=		#
+
+# Software rasterizer
+# From meson.build
+# if with_dri_swrast and (with_gallium_softpipe or with_gallium_swr)
+#   error('Only one swrast provider can be built')
+# endif
+PLIST.swrast_dri=	yes
+.if ${OPSYS} != "Darwin"
+PLIST.swrast=		yes
+GALLIUM_DRIVERS+=	swrast
+.else
+DRI_DRIVERS+=		swrast
+.endif
+
+# x86 only drivers
+.if (${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64") && ${OPSYS} != "Darwin"
+# svga / VMWare driver
+PLIST.svga=		yes
+GALLIUM_DRIVERS+=	svga
+
+# Intel chipsets, x86 only
+# From meson.build:
+# if with_dri_i915 and with_gallium_i915
+#   error('Only one i915 provider can be built')
+# endif
+PLIST.i915=		yes
+# GALLIUM_DRIVERS+=	i915
+DRI_DRIVERS+=		i915
+
+PLIST.i965=		yes
+DRI_DRIVERS+=		i965
+
+.endif
+
+# Intel Iris support
+.if !empty(PKG_OPTIONS:Miris)
+GALLIUM_DRIVERS+=	iris
+PLIST.iris=		yes
+# MESON_ARGS+=		-Dtools=nir
+.endif
+
+# Vulkan support
+.if !empty(PKG_OPTIONS:Mvulkan)
+# VULKAN_DRIVERS+=	intel
+# VULKAN_DRIVERS+=	radeon
+VULKAN_DRIVERS+=	auto	
+PLIST.vulkan=		yes
+.endif
+
+# ARM drivers
+.if !empty(MACHINE_PLATFORM:MNetBSD-*-*arm*)
+# Qualcomm SnapDragon, libdrm_freedreno.pc
+#GALLIUM_DRIVERS+=	freedreno
+#PLIST.freedreno=	yes
+
+# Broadcom VideoCore 4
+GALLIUM_DRIVERS+=	vc4
+PLIST.vc4=		yes
+.endif
+
+# qemu Linux guest driver
+.if !empty(MACHINE_PLATFORM:MLinux-*-x86_64)
+# XXX test this
+#GALLIUM_DRIVERS+=	virgl
+#PLIST.virgl=		yes
+.endif
+
+# theoretically cross platform PCI drivers
+.if ${OPSYS} != "Darwin" && empty(MACHINE_PLATFORM:MNetBSD-*-*arm*) && \
+	empty(MACHINE_PLATFORM:MNetBSD-*-mipsel)
+
+# AMD Radeon r600
+PLIST.r600=		yes
+GALLIUM_DRIVERS+=	r600
+
+# FULL_OS_VERSION_CMD=	${UNAME} -r
+# FULL_OS_VERSION=	${FULL_OS_VERSION_CMD:sh}
+
+# FreeBSD lacks nouveau support (there are official binaries from Nvidia)
+.if ${OPSYS} != "FreeBSD"
+# nVidia
+PLIST.nouveau=		yes
+GALLIUM_DRIVERS+=	nouveau
+.endif
+
+# Meson build does not compile these correctly anymore.
+# classic DRI radeon
+# PLIST.radeon_dri=	yes
+# DRI_DRIVERS+=		radeon
+
+# classic DRI r200
+PLIST.r200=		yes
+DRI_DRIVERS+=		r200
+
+# FreeBSD lacks nouveau support (there are official binaries from Nvidia)
+.if ${OPSYS} != "FreeBSD"
+# classic DRI nouveau
+PLIST.nouveau_dri=	yes
+DRI_DRIVERS+=		nouveau
+.endif
+.endif # cross platform PCI drivers
+
+.if ${OPSYS} == "Darwin"
+CONFIGURE_ARGS+=	--with-platforms=x11
+MESON_ARGS+=	-Dplatforms=x11
+#.elif ${OPSYS} == "Linux"
+#.include "../../wip/wayland/buildlink3.mk"
+#CONFIGURE_ARGS+=	--with-platforms=x11,drm,wayland
+#PLIST.wayland=		yes
+.else
+CONFIGURE_ARGS+=	--with-platforms=x11,drm
+MESON_ARGS+=	-Dplatforms=x11,drm
+.endif
+
+.if !empty(PKG_OPTIONS:Mllvm)
+# VA-API and VDPAU
+.if !empty(PKG_OPTIONS:Mvaapi)
+.include "../../multimedia/libva/available.mk"
+.if ${VAAPI_AVAILABLE} == "yes"
+PLIST.vaapi=	yes
+.include "../../multimedia/libva/buildlink3.mk"
+.else
+MESON_ARGS+=	-Dgallium-va=false
+.endif
+.endif # vaapi
+.if !empty(PKG_OPTIONS:Mvdpau)
+.include "../../multimedia/libvdpau/available.mk"
+.if ${VDPAU_AVAILABLE} == "yes"
+PLIST.vdpau=	yes
+.include "../../multimedia/libvdpau/buildlink3.mk"
+.else
+MESON_ARGS+=	-Dgallium-vapau=false
+.endif
+.endif # vdpau
+
+# XA is useful for accelerating xf86-video-vmware
+.if !empty(PKG_OPTIONS:Mxa)
+CONFIGURE_ARGS+=	--enable-xa
+PLIST.xatracker=	yes
+.else
+MESON_ARGS+=	-Dgallium-xa=false
+.endif
+
+# AMD Radeon r300
+PLIST.r300=		yes
+GALLIUM_DRIVERS+=	r300
+# AMD Canary Islands GPUs
+PLIST.radeonsi=		yes
+GALLIUM_DRIVERS+=	radeonsi
+CONFIGURE_ARGS+=	--enable-llvm
+CONFIGURE_ARGS+=	--enable-llvm-shared-libs
+MESON_ARGS+=		-Dllvm=true
+MESON_ARGS+=		-Dshared-llvm=true
+
+.if !exists(/usr/include/libelf.h)
+.include "../../devel/libelf/buildlink3.mk"
+.endif
+
+# XXX update libLLVM to use it instead
+#BUILDLINK_API_DEPENDS.libLLVM+= libLLVM>=5.0
+.include "../../lang/llvm/buildlink3.mk"
+
+# BUILDLINK_API_DEPENDS.libLLVM+= libLLVM>=4.0
+# .include "../../lang/libLLVM/buildlink3.mk"
+CONFIGURE_ENV+=		ac_cv_path_ac_pt_LLVM_CONFIG=${LLVM_CONFIG_PATH}
+.else # !llvm
+CONFIGURE_ARGS+=	--disable-xa
+CONFIGURE_ARGS+=	--disable-llvm
+CONFIGURE_ARGS+=	--disable-llvm-shared-libs
+MESON_ARGS+=		-Dgallium-xa=false
+MESON_ARGS+=		-Dllvm=false
+MESON_ARGS+=		-Dshared-llvm=false
+.endif # llvm
+
+CONFIGURE_ARGS+=	--with-gallium-drivers=${GALLIUM_DRIVERS:ts,}
+CONFIGURE_ARGS+=	--with-dri-drivers=${DRI_DRIVERS:ts,}
+CONFIGURE_ARGS+=	--with-vulkan-drivers=${VULKAN_DRIVERS:ts,}
+MESON_ARGS+=		-Dgallium-drivers=${GALLIUM_DRIVERS:ts,}
+MESON_ARGS+=		-Ddri-drivers=${DRI_DRIVERS:ts,}
+MESON_ARGS+=		-Dvulkan-drivers=${VULKAN_DRIVERS:ts,}
+
+.else # !dri
+CONFIGURE_ARGS+=	--with-gallium-drivers=
+CONFIGURE_ARGS+=	--with-dri-drivers=
+CONFIGURE_ARGS+=	--with-vulkan-drivers=
+CONFIGURE_ARGS+=	--disable-dri
+CONFIGURE_ARGS+=	--disable-dri3
+CONFIGURE_ARGS+=	--disable-egl
+CONFIGURE_ARGS+=	--disable-gbm
+CONFIGURE_ARGS+=	--disable-gles1
+CONFIGURE_ARGS+=	--disable-gles2
+CONFIGURE_ARGS+=	--enable-xlib-glx
+CONFIGURE_ARGS+=	--with-platforms=x11
+MESON_ARGS+=		-Dgallium-drivers=
+MESON_ARGS+=		-Ddri-drivers=
+MESON_ARGS+=		-Ddri3=false
+MESON_ARGS+=		-Degl=false
+MESON_ARGS+=		-Dgbm=false
+MESON_ARGS+=		-Dgles1=false
+MESON_ARGS+=		-Dgles2=false
+MESON_ARGS+=		-Dglx=xlib
+MESON_ARGS+=		-Dplatforms=x11
+# XXX configure looks for expat but doesn't actually need it in non-dri case
+CONFIGURE_ENV+=		EXPAT_CFLAGS=" " EXPAT_LIBS=" "
+.if !empty(PKG_OPTIONS:Mllvm)
+PKG_FAIL_REASON+=	"The llvm PKG_OPTION must also be disabled when dri is disabled"
+.endif
+.endif # dri
+
+.if !empty(PKG_OPTIONS:Mdebug)
+CONFIGURE_ARGS+=	--enable-debug
+MESON_ARGS+=		--buildtype=debug
+.endif
+
+.if !empty(PKG_OPTIONS:Masm)
+MESON_ARGS+=		-Dasm=true
+.else
+MESON_ARGS+=		-Dasm=false
+.endif
+
+.if !empty(PKG_OPTIONS:Mxvmc)
+.include "../../x11/libXvMC/buildlink3.mk"
+PLIST.xvmc=		yes
+MESON_ARGS+=		-Dgallium-xvmc=true
+.else
+MESON_ARGS+=		-Dgallium-xvmc=false
+.endif
+
+.if !empty(PKG_OPTIONS:Mnoatexit)
+CPPFLAGS+=	-DHAVE_NOATEXIT
+.endif
+
+.if !empty(PKG_OPTIONS:Mno_cs_queue)
+CPPFLAGS+=	-DNO_CS_QUEUE
+.endif
+
+.if !empty(PKG_OPTIONS:Mrevert_threaded_context)
+CPPFLAGS+=	-DREVERT_THREADED_CONTEXT
+.endif
+
+.if !empty(PKG_OPTIONS:Mrevert_copy_clear)
+CPPFLAGS+=	-DREVERT_COPY_CLEAR
+.endif
+
+.if !empty(PKG_OPTIONS:Mrevert_i965_softpin)
+CPPFLAGS+=	-DREVERT_I965_SOFTPIN
+.endif
diff --git a/MesaLib-dfbsd-meson/patches/patch-configure.ac b/MesaLib-dfbsd-meson/patches/patch-configure.ac
new file mode 100644
index 0000000000..5aee475b70
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-configure.ac
@@ -0,0 +1,109 @@
+$NetBSD: patch-configure.ac,v 1.5 2019/01/20 09:50:28 tnn Exp $
+
+Don't check for pthread stubs anywhere, as we don't provide it.
+
+From FreeBSD ports graphics/mesa-dri 18.0.0,
+DragonFly dports graphics/mesa-dri 17.3.1,
+files/patch-configure
+
+For FreeBSD 11.2-RELEASE
+  CXXLD    mesa_dri_drivers.la
+/usr/bin/ld: unrecognized option '--build-id=sha1'
+
+* But do NOT extend to FreeBSD, instead use binutils ld to link.
+osx: ld does not support --build-ld
+
+* For FreeBSD: Use monotonic clock for timeouts.
+
+* For FreeBSD: Implement futex_wake() and futex_wait() via _umtx_op() 
+
+* dri3: Mon Apr 10 19:14:48 2017 UTC
+DRI3 remains enabled at compile time, but it is now disabled at
+runtime for stock FreeBSD.  Set LIBGL_DRI3_ENABLE in the
+environment to enable DRI3.
+This change was made to work around a problem in libEGL,
+which fails to fall back to using DRI2 when run on a system
+without DRI3 support.
+
+--- configure.ac.orig	2019-02-27 03:56:56.000000000 +0000
++++ configure.ac
+@@ -739,7 +739,7 @@ dnl
+ dnl OSX linker does not support build-id
+ dnl
+ case "$host_os" in
+-darwin*)
++darwin* | solaris*)
+     LD_BUILD_ID=""
+     ;;
+ *)
+@@ -944,7 +944,7 @@ case "$host_os" in
+ darwin*)
+     ;;
+ *)
+-    AC_CHECK_FUNCS([clock_gettime], [CLOCK_LIB=],
++    AC_CHECK_FUNCS([clock_gettime clock_nanosleep], [CLOCK_LIB=],
+                    [AC_CHECK_LIB([rt], [clock_gettime], [CLOCK_LIB=-lrt],
+                                  [AC_MSG_ERROR([Could not find clock_gettime])])])
+     AC_SUBST([CLOCK_LIB])
+@@ -954,6 +954,9 @@ esac
+ dnl See if posix_memalign is available
+ AC_CHECK_FUNC([posix_memalign], [DEFINES="$DEFINES -DHAVE_POSIX_MEMALIGN"])
+ 
++dnl See if open_memstream is available
++AC_CHECK_FUNC([open_memstream], [DEFINES="$DEFINES -DHAVE_OPEN_MEMSTREAM"])
++
+ dnl Check for zlib
+ PKG_CHECK_MODULES([ZLIB], [zlib >= $ZLIB_REQUIRED])
+ DEFINES="$DEFINES -DHAVE_ZLIB"
+@@ -979,7 +982,7 @@ PTHREAD_LIBS="$PTHREAD_LIBS -pthread"
+ dnl pthread-stubs is mandatory on some BSD platforms, due to the nature of the
+ dnl project. Even then there's a notable issue as described in the project README
+ case "$host_os" in
+-linux* | cygwin* | darwin* | solaris* | *-gnu* | gnu* | openbsd*)
++*)
+     pthread_stubs_possible="no"
+     ;;
+ * )
+@@ -995,8 +998,12 @@ save_LIBS="$LIBS"
+ LIBS="$PTHREAD_LIBS"
+ AC_MSG_CHECKING(whether pthread_setaffinity_np is supported)
+ AC_LINK_IFELSE([AC_LANG_SOURCE([[
++    #if  defined(__DragonFly__) || defined(__FreeBSD__)
++    #include <pthread_np.h>
++    #else
+     #define _GNU_SOURCE
+     #include <pthread.h>
++    #endif
+     int main() {
+        void *a = (void*) &pthread_setaffinity_np;
+        long b = (long) a;
+@@ -1008,7 +1015,10 @@ AC_LINK_IFELSE([AC_LANG_SOURCE([[
+ LIBS="$save_LIBS"
+ 
+ dnl Check for futex for fast inline simple_mtx_t.
+-AC_CHECK_HEADER([linux/futex.h], [DEFINES="$DEFINES -DHAVE_LINUX_FUTEX_H"])
++AC_CHECK_HEADERS([linux/futex.h sys/umtx.h],
++    [DEFINES="$DEFINES -DHAVE_LINUX_FUTEX_H"],,
++    [#include <errno.h>
++     #include <sys/types.h>])
+ 
+ dnl SELinux awareness.
+ AC_ARG_ENABLE([selinux],
+@@ -1291,7 +1301,7 @@ fi
+ AC_SUBST(LIBSENSORS_LIBS)
+ 
+ case "$host_os" in
+-linux*)
++linux* | freebsd* | dragonfly*)
+     dri3_default=yes
+     ;;
+ *)
+@@ -2519,8 +2529,6 @@ if test "x$enable_opencl" = xyes; then
+         CLANG_LIBDIR=${LLVM_LIBDIR}
+     fi
+     CLANG_RESOURCE_DIR=$CLANG_LIBDIR/clang/${LLVM_VERSION}
+-    AS_IF([test ! -f "$CLANG_RESOURCE_DIR/include/stddef.h"],
+-        [AC_MSG_ERROR([Could not find clang internal header stddef.h in $CLANG_RESOURCE_DIR Use --with-clang-libdir to specify the correct path to the clang libraries.])])
+ fi
+ AM_CONDITIONAL(HAVE_CLOVER, test "x$enable_opencl" = xyes)
+ AM_CONDITIONAL(HAVE_CLOVER_ICD, test "x$enable_opencl_icd" = xyes)
diff --git a/MesaLib-dfbsd-meson/patches/patch-include_GL_internal_dri__interface.h b/MesaLib-dfbsd-meson/patches/patch-include_GL_internal_dri__interface.h
new file mode 100644
index 0000000000..a33da634c8
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-include_GL_internal_dri__interface.h
@@ -0,0 +1,27 @@
+$NetBSD: patch-include_GL_internal_dri__interface.h,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+From FreeBSD ports graphics/mesa-dri 17.2.4.
+
+GCC on 9.x doesn't allow types to be overwritten, these types are defined
+in drm.h also, which causes build issues in xorg-server.
+
+--- include/GL/internal/dri_interface.h.orig	2019-02-27 03:56:56.000000000 +0000
++++ include/GL/internal/dri_interface.h
+@@ -40,6 +40,9 @@
+ #ifndef DRI_INTERFACE_H
+ #define DRI_INTERFACE_H
+ 
++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
++#include <drm.h>
++#else
+ #ifdef HAVE_LIBDRM
+ #include <drm.h>
+ #else
+@@ -47,6 +50,7 @@ typedef unsigned int drm_context_t;
+ typedef unsigned int drm_drawable_t;
+ typedef struct drm_clip_rect drm_clip_rect_t;
+ #endif
++#endif /* __FreeBSD__ || __DragonFly__ */
+ 
+ #include <GL/gl.h>
+ 
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_amd_common_ac__debug.c b/MesaLib-dfbsd-meson/patches/patch-src_amd_common_ac__debug.c
new file mode 100644
index 0000000000..ec2e68097e
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_amd_common_ac__debug.c
@@ -0,0 +1,19 @@
+$NetBSD: patch-src_amd_common_ac__debug.c,v 1.2 2019/01/20 09:50:28 tnn Exp $
+
+#if'out some debug code on SunOS. There is no open_memstream(3)
+
+--- src/amd/common/ac_debug.c.orig	2019-01-17 11:26:22.000000000 +0000
++++ src/amd/common/ac_debug.c
+@@ -571,10 +571,12 @@ void ac_parse_ib_chunk(FILE *f, uint32_t
+ 
+ 	char *out;
+ 	size_t outsize;
++#if defined(HAVE_OPEN_MEMSTREAM)
+ 	FILE *memf = open_memstream(&out, &outsize);
+ 	ib.f = memf;
+ 	ac_do_parse_ib(memf, &ib);
+ 	fclose(memf);
++#endif
+ 
+ 	if (out) {
+ 		format_ib_output(f, out);
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_amd_vulkan_radv__device.c b/MesaLib-dfbsd-meson/patches/patch-src_amd_vulkan_radv__device.c
new file mode 100644
index 0000000000..024fc9d848
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_amd_vulkan_radv__device.c
@@ -0,0 +1,23 @@
+$NetBSD$
+
+From graphics/mesa-dri: update to 18.3.1
+
+https://reviews.freebsd.org/D17872
+
+--- src/amd/vulkan/radv_device.c.orig	2018-12-11 21:13:57.000000000 +0000
++++ src/amd/vulkan/radv_device.c
+@@ -50,6 +50,14 @@
+ #include "util/debug.h"
+ #include "util/mesa-sha1.h"
+ 
++#ifndef CLOCK_MONOTONIC_RAW
++# ifdef CLOCK_MONOTONIC_FAST
++#  define CLOCK_MONOTONIC_RAW CLOCK_MONOTONIC_FAST
++# else
++#  define CLOCK_MONOTONIC_RAW CLOCK_MONOTONIC
++# endif
++#endif
++
+ static int
+ radv_device_get_cache_uuid(enum radeon_family family, void *uuid)
+ {
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_amd_vulkan_winsys_amdgpu_radv__amdgpu__cs.c b/MesaLib-dfbsd-meson/patches/patch-src_amd_vulkan_winsys_amdgpu_radv__amdgpu__cs.c
new file mode 100644
index 0000000000..047dac279f
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_amd_vulkan_winsys_amdgpu_radv__amdgpu__cs.c
@@ -0,0 +1,19 @@
+$NetBSD: patch-src_amd_vulkan_winsys_amdgpu_radv__amdgpu__cs.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+Define ETIME if missing
+
+https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=225415
+FreeBSD Bugzilla: Bug 225415 graphics/mesa-dri: update to 18.0.0 
+
+--- src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c.orig	2018-02-09 02:17:57.000000000 +0000
++++ src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
+@@ -33,6 +33,9 @@
+ #include "radv_amdgpu_bo.h"
+ #include "sid.h"
+ 
++#ifndef ETIME
++#define ETIME ETIMEDOUT
++#endif
+ 
+ enum {
+ 	VIRTUAL_BUFFER_HASH_TABLE_SIZE = 1024
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_compiler_builtin__type__macros.h b/MesaLib-dfbsd-meson/patches/patch-src_compiler_builtin__type__macros.h
new file mode 100644
index 0000000000..6e1063880a
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_compiler_builtin__type__macros.h
@@ -0,0 +1,25 @@
+$NetBSD: patch-src_compiler_builtin__type__macros.h,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+Workaround netbsd headers.
+
+--- src/compiler/builtin_type_macros.h.orig	2018-09-07 21:18:07.000000000 +0000
++++ src/compiler/builtin_type_macros.h
+@@ -28,6 +28,18 @@
+  * language version or extension might provide them.
+  */
+ 
++#ifdef __NetBSD__ /* XXX https://mail-index.netbsd.org/tech-userlevel/2018/09/08/msg011381.html */
++#undef uint8_t
++#undef uint16_t
++#undef uint32_t
++#undef uint64_t
++#undef int8_t
++#undef int16_t
++#undef int32_t
++#undef int64_t
++#endif
++
++
+ DECL_TYPE(error,  GL_INVALID_ENUM, GLSL_TYPE_ERROR, 0, 0)
+ DECL_TYPE(void,   GL_INVALID_ENUM, GLSL_TYPE_VOID,  0, 0)
+ 
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_compiler_glsl_glsl__parser__extras.cpp b/MesaLib-dfbsd-meson/patches/patch-src_compiler_glsl_glsl__parser__extras.cpp
new file mode 100644
index 0000000000..c926fe10a6
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_compiler_glsl_glsl__parser__extras.cpp
@@ -0,0 +1,18 @@
+$NetBSD: patch-src_compiler_glsl_glsl__parser__extras.cpp,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+atexit() is not a good idea in a library; use destructor attribute.
+
+--- src/compiler/glsl/glsl_parser_extras.cpp.orig	2017-09-25 16:56:18.000000000 +0000
++++ src/compiler/glsl/glsl_parser_extras.cpp
+@@ -2224,7 +2224,11 @@ extern "C" {
+  * programs would be invalid.  So this should happen at approximately
+  * program exit.
+  */
++#if defined(HAVE_NOATEXIT)
++void __attribute__((__destructor__))
++#else
+ void
++#endif
+ _mesa_destroy_shader_compiler(void)
+ {
+    _mesa_destroy_shader_compiler_caches();
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_egl_drivers_dri2_platform__drm.c b/MesaLib-dfbsd-meson/patches/patch-src_egl_drivers_dri2_platform__drm.c
new file mode 100644
index 0000000000..3920bed657
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_egl_drivers_dri2_platform__drm.c
@@ -0,0 +1,18 @@
+$NetBSD: patch-src_egl_drivers_dri2_platform__drm.c,v 1.2 2019/01/20 09:50:28 tnn Exp $
+
+netbsd-5 build fix
+
+--- src/egl/drivers/dri2/platform_drm.c.orig	2019-01-17 11:26:22.000000000 +0000
++++ src/egl/drivers/dri2/platform_drm.c
+@@ -725,7 +725,11 @@ dri2_initialize_drm(_EGLDriver *drv, _EG
+       }
+       dri2_dpy->own_device = true;
+    } else {
++#ifdef F_DUPFD_CLOEXEC
+       dri2_dpy->fd = fcntl(gbm_device_get_fd(gbm), F_DUPFD_CLOEXEC, 3);
++#else
++      dri2_dpy->fd = -1;
++#endif
+       if (dri2_dpy->fd < 0) {
+          err = "DRI2: failed to fcntl() existing gbm device";
+          goto cleanup;
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_egl_drivers_dri2_platform__x11.c b/MesaLib-dfbsd-meson/patches/patch-src_egl_drivers_dri2_platform__x11.c
new file mode 100644
index 0000000000..51335d375f
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_egl_drivers_dri2_platform__x11.c
@@ -0,0 +1,60 @@
+$NetBSD: patch-src_egl_drivers_dri2_platform__x11.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+Provide compat strndup for older Darwin.
+
+* From FreeBSD ports 18.0.0:
+work-around for https://bugs.freedesktop.org/show_bug.cgi?id=100627
+
+Mon Apr 10 19:14:48 2017 UTC
+DRI3 remains enabled at compile time, but it is now disabled at
+runtime for stock FreeBSD.  Set LIBGL_DRI3_ENABLE in the
+environment to enable DRI3.
+This change was made to work around a problem in libEGL,
+which fails to fall back to using DRI2 when run on a system
+without DRI3 support.
+
+* Added logging statement to note dri3 initialization being invoked.
+
+--- src/egl/drivers/dri2/platform_x11.c.orig	2018-02-09 02:17:57.000000000 +0000
++++ src/egl/drivers/dri2/platform_x11.c
+@@ -608,6 +608,23 @@ dri2_x11_local_authenticate(struct dri2_
+    return EGL_TRUE;
+ }
+ 
++#if (defined(__APPLE__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0 < 1070)
++static char *
++strndup(const char *s, int length)
++{
++   char *d;
++
++   d = malloc(length + 1);
++   if (d == NULL)
++      return NULL;
++
++   memcpy(d, s, length);
++   d[length] = '\0';
++
++   return d;
++}
++#endif
++
+ static EGLBoolean
+ dri2_x11_connect(struct dri2_egl_display *dri2_dpy)
+ {
+@@ -1466,8 +1483,15 @@ dri2_initialize_x11(_EGLDriver *drv, _EG
+ 
+    if (!disp->Options.ForceSoftware) {
+ #ifdef HAVE_DRI3
+-      if (!env_var_as_boolean("LIBGL_DRI3_DISABLE", false))
++#if ((defined(__FreeBSD__) || defined(__FreeBSD_kernel__)) && !defined(__DRM_NEXT__)) || defined(__DragonFly__) || defined(__NetBSD__)
++      if (env_var_as_boolean("LIBGL_DRI3_ENABLE", false))
++#endif
++      if (!env_var_as_boolean("LIBGL_DRI3_DISABLE", false)) {
++         _eglLog(_EGL_INFO, "platform_x11.c: calling dri2_initialize_x11_dri3\n");
+          initialized = dri2_initialize_x11_dri3(drv, disp);
++         if (initialized)
++            _eglLog(_EGL_INFO, "platform_x11.c: initialized by dri2_initialize_x11_dri3\n");
++      }
+ #endif
+ 
+       if (!initialized)
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_egl_main_eglglobals.c b/MesaLib-dfbsd-meson/patches/patch-src_egl_main_eglglobals.c
new file mode 100644
index 0000000000..26495a9f2f
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_egl_main_eglglobals.c
@@ -0,0 +1,53 @@
+$NetBSD: patch-src_egl_main_eglglobals.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+atexit() is not a good idea in shared libraries.
+
+FreeBSD reported atexit bug for 10.6:
+https://bugs.freedesktop.org/show_bug.cgi?id=91869
+
+--- src/egl/main/eglglobals.c.orig	2018-01-18 21:30:28.000000000 +0000
++++ src/egl/main/eglglobals.c
+@@ -85,11 +85,22 @@ struct _egl_global _eglGlobal =
+    .debugTypesEnabled = _EGL_DEBUG_BIT_CRITICAL | _EGL_DEBUG_BIT_ERROR,
+ };
+ 
++#if defined(HAVE_NOATEXIT)
++static EGLBoolean registered = EGL_FALSE;
+ 
++static void __attribute__((__destructor__))
++#else
+ static void
++#endif
+ _eglAtExit(void)
+ {
+    EGLint i;
++
++#if defined(HAVE_NOATEXIT)
++   if (!registered)
++      return;
++#endif
++
+    for (i = _eglGlobal.NumAtExitCalls - 1; i >= 0; i--)
+       _eglGlobal.AtExitCalls[i]();
+ }
+@@ -99,14 +110,20 @@ void
+ _eglAddAtExitCall(void (*func)(void))
+ {
+    if (func) {
++#if !defined(HAVE_NOATEXIT)
+       static EGLBoolean registered = EGL_FALSE;
++#endif
+ 
+       mtx_lock(_eglGlobal.Mutex);
+ 
++#if defined(HAVE_NOATEXIT)
++      registered = EGL_TRUE;
++#else
+       if (!registered) {
+          atexit(_eglAtExit);
+          registered = EGL_TRUE;
+       }
++#endif
+ 
+       assert(_eglGlobal.NumAtExitCalls < ARRAY_SIZE(_eglGlobal.AtExitCalls));
+       _eglGlobal.AtExitCalls[_eglGlobal.NumAtExitCalls++] = func;
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_gallium_auxiliary_drivers_trace_tr__dump.c b/MesaLib-dfbsd-meson/patches/patch-src_gallium_auxiliary_drivers_trace_tr__dump.c
new file mode 100644
index 0000000000..9935beb299
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_gallium_auxiliary_drivers_trace_tr__dump.c
@@ -0,0 +1,50 @@
+$NetBSD: patch-src_gallium_auxiliary_drivers_trace_tr__dump.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+atexit() is not a good idea in shared libraries.
+
+FreeBSD reported atexit bug for 10.6:
+https://bugs.freedesktop.org/show_bug.cgi?id=91869
+
+--- src/gallium/auxiliary/driver_trace/tr_dump.c.orig	2018-09-07 21:18:07.000000000 +0000
++++ src/gallium/auxiliary/driver_trace/tr_dump.c
+@@ -63,7 +63,6 @@ static mtx_t call_mutex = _MTX_INITIALIZ
+ static long unsigned call_no = 0;
+ static boolean dumping = FALSE;
+ 
+-
+ static inline void
+ trace_dump_write(const char *buf, size_t size)
+ {
+@@ -171,9 +170,20 @@ trace_dump_trace_flush(void)
+    }
+ }
+ 
++#if defined(HAVE_NOATEXIT)
++static boolean trace_dump_has_begun = FALSE;
++
++static void __attribute__((__destructor__))
++#else
+ static void
++#endif
+ trace_dump_trace_close(void)
+ {
++#if defined(HAVE_NOATEXIT)
++   if (!trace_dump_has_begun)
++      return;
++#endif
++
+    if (stream) {
+       trace_dump_writes("</trace>\n");
+       if (close_stream) {
+@@ -233,7 +243,11 @@ trace_dump_trace_begin(void)
+        * screen multiple times, so we only write </trace> tag and close at exit
+        * time.
+        */
++#if defined(HAVE_NOATEXIT)
++      trace_dump_has_begun = TRUE;
++#else
+       atexit(trace_dump_trace_close);
++#endif
+    }
+ 
+    return TRUE;
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_gallium_auxiliary_pipe-loader_pipe__loader__drm.c b/MesaLib-dfbsd-meson/patches/patch-src_gallium_auxiliary_pipe-loader_pipe__loader__drm.c
new file mode 100644
index 0000000000..d9d3b98897
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_gallium_auxiliary_pipe-loader_pipe__loader__drm.c
@@ -0,0 +1,127 @@
+$NetBSD: patch-src_gallium_auxiliary_pipe-loader_pipe__loader__drm.c,v 1.2 2019/01/10 22:30:11 tnn Exp $
+
+* From FreeBSD ports / DragonFly dports graphics/mesa-dri
+
+Revert the following commit.
+
+FreeBSD and DragonFly don't have the required render nodes.
+
+-------
+
+From 69a1b9959e59653da262185c4e2cf57d24939b19 Mon Sep 17 00:00:00 2001
+Date: Mon, 29 Jun 2015 12:36:45 +0100
+Subject: pipe-loader: drop support for non-render node devices
+
+Render nodes have been around for quite some time. Removing support via
+the master/primary node allows us to clean up the conditional
+compilation and simplify the build greatly.
+
+For example currently we the pipe-loader, which explicitly links against
+xcb and friends (for X auth) if found at compile-time. That
+would cause problems as one will be forced to use X/xcb, even if it's a
+headless system that is used for opencl.
+
+v2: Clarify the linking topic in the commit message.
+
+* Extended for NetBSD.
+
+--- src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c.orig	2018-12-11 21:13:57.000000000 +0000
++++ src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c
+@@ -229,6 +229,16 @@ pipe_loader_drm_probe_fd(struct pipe_loa
+    return ret;
+ }
+ 
++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) || defined(__NetBSD__)
++static int
++open_drm_minor(int minor)
++{
++   char path[PATH_MAX];
++   snprintf(path, sizeof(path), DRM_DEV_NAME, DRM_DIR_NAME, minor);
++   return open(path, O_RDWR, 0);
++}
++#endif
++
+ static int
+ open_drm_render_node_minor(int minor)
+ {
+@@ -241,7 +251,19 @@ open_drm_render_node_minor(int minor)
+ int
+ pipe_loader_drm_probe(struct pipe_loader_device **devs, int ndev)
+ {
++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) || defined(__NetBSD__)
++   int i, k, fd, num_render_node_devs;
++   int j = 0;
++
++   struct {
++      unsigned vendor_id;
++      unsigned chip_id;
++   } render_node_devs[DRM_RENDER_NODE_MAX_NODES];
++
++   /* Look for render nodes first */
++#else
+    int i, j, fd;
++#endif
+ 
+    for (i = DRM_RENDER_NODE_MIN_MINOR, j = 0;
+         i <= DRM_RENDER_NODE_MAX_MINOR; i++) {
+@@ -256,6 +278,11 @@ pipe_loader_drm_probe(struct pipe_loader
+          continue;
+       }
+ 
++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) || defined(__NetBSD__)
++      render_node_devs[j].vendor_id = dev->u.pci.vendor_id;
++      render_node_devs[j].chip_id = dev->u.pci.chip_id;
++
++#endif
+       if (j < ndev) {
+          devs[j] = dev;
+       } else {
+@@ -265,6 +292,48 @@ pipe_loader_drm_probe(struct pipe_loader
+       j++;
+    }
+ 
++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) || defined(__NetBSD__)
++   num_render_node_devs = j;
++
++   /* Next look for drm devices. */
++   for (i = 0; i < DRM_MAX_MINOR; i++) {
++      struct pipe_loader_device *dev;
++      boolean duplicate = FALSE;
++      fd = open_drm_minor(i);
++      if (fd < 0)
++         continue;
++
++      if (!pipe_loader_drm_probe_fd(&dev, fd)) {
++         close(fd);
++         continue;
++      }
++
++      /* Check to make sure we aren't already accessing this device via
++       * render nodes.
++       */
++      for (k = 0; k < num_render_node_devs; k++) {
++         if (dev->u.pci.vendor_id == render_node_devs[k].vendor_id &&
++             dev->u.pci.chip_id == render_node_devs[k].chip_id) {
++            close(fd);
++            dev->ops->release(&dev);
++            duplicate = TRUE;
++            break;
++         }
++      }
++
++      if (duplicate)
++         continue;
++
++      if (j < ndev) {
++         devs[j] = dev;
++      } else {
++         dev->ops->release(&dev);
++      }
++
++      j++;
++   }
++
++#endif
+    return j;
+ }
+ 
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_gallium_auxiliary_util_u__format__tests.c b/MesaLib-dfbsd-meson/patches/patch-src_gallium_auxiliary_util_u__format__tests.c
new file mode 100644
index 0000000000..cb05bb04c2
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_gallium_auxiliary_util_u__format__tests.c
@@ -0,0 +1,17 @@
+$NetBSD: patch-src_gallium_auxiliary_util_u__format__tests.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+On old NetBSD, NAN in math.h is __nanf.__val. Which is not constant.
+
+--- src/gallium/auxiliary/util/u_format_tests.c.orig	2019-01-04 23:59:59.000000000 +0000
++++ src/gallium/auxiliary/util/u_format_tests.c
+@@ -28,6 +28,10 @@
+ 
+ #include <math.h>
+ #include <float.h>
++#if defined(__NetBSD__) && __NetBSD_Version__ < 600000000
++#undef NAN
++#define NAN __builtin_nanf("")
++#endif
+ 
+ #include "pipe/p_config.h"
+ #include "util/u_memory.h"
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_freedreno_freedreno__screen.c b/MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_freedreno_freedreno__screen.c
new file mode 100644
index 0000000000..8732e9e5dc
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_freedreno_freedreno__screen.c
@@ -0,0 +1,34 @@
+$NetBSD$
+
+From FreeBSD ports graphics/mesa-dri 18.1.4.
+
+- Without sysinfo() fall back to sysconf()
+
+--- src/gallium/drivers/freedreno/freedreno_screen.c.orig	2018-07-13 18:41:27.000000000 +0000
++++ src/gallium/drivers/freedreno/freedreno_screen.c
+@@ -43,7 +43,11 @@
+ #include <errno.h>
+ #include <stdio.h>
+ #include <stdlib.h>
++#ifdef __GLIBC__
+ #include <sys/sysinfo.h>
++#else
++#include <unistd.h>
++#endif
+ 
+ #include "freedreno_screen.h"
+ #include "freedreno_resource.h"
+@@ -837,9 +841,13 @@ fd_screen_create(struct fd_device *dev)
+ 		screen->priority_mask = (1 << val) - 1;
+ 	}
+ 
++#ifdef __GLIBC__
+ 	struct sysinfo si;
+ 	sysinfo(&si);
+ 	screen->ram_size = si.totalram;
++#else
++	screen->ram_size = sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGE_SIZE);
++#endif
+ 
+ 	DBG("Pipe Info:");
+ 	DBG(" GPU-id:          %d", screen->gpu_id);
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_iris_meson.build b/MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_iris_meson.build
new file mode 100644
index 0000000000..f38e425f4d
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_iris_meson.build
@@ -0,0 +1,22 @@
+$NetBSD$
+
+--- src/gallium/drivers/iris/meson.build.orig	2019-02-27 03:56:56.000000000 +0000
++++ src/gallium/drivers/iris/meson.build
+@@ -50,7 +50,7 @@ iris_gen_libs = []
+ foreach v : ['80', '90', '100', '110']
+   iris_gen_libs += static_library(
+     'libiris_gen@0@'.format(v),
+-    ['iris_blorp.c', 'iris_state.c', gen_xml_pack],
++    ['iris_blorp.c', 'iris_state.c', gen_xml_pack, nir_opcodes_h, nir_builder_opcodes_h, nir_intrinsics_h],
+     include_directories : [inc_common, inc_intel, inc_nir],
+     c_args : [
+       c_vis_args, no_override_init_args, c_sse2_args,
+@@ -62,7 +62,7 @@ endforeach
+ 
+ libiris = static_library(
+   'iris',
+-  [files_libiris, gen_xml_pack, nir_opcodes_h, nir_builder_opcodes_h],
++  [files_libiris, gen_xml_pack, nir_opcodes_h, nir_builder_opcodes_h, nir_intrinsics_h],
+   include_directories : [
+     inc_src, inc_include, inc_gallium, inc_gallium_aux, inc_intel, inc_nir,
+     inc_gallium_drivers,
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_nouveau_nouveau__vp3__video.c b/MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_nouveau_nouveau__vp3__video.c
new file mode 100644
index 0000000000..91ad33c971
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_nouveau_nouveau__vp3__video.c
@@ -0,0 +1,18 @@
+$NetBSD: patch-src_gallium_drivers_nouveau_nouveau__vp3__video.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+Fix build on platforms without close-on-exec.
+
+--- src/gallium/drivers/nouveau/nouveau_vp3_video.c.orig	2017-02-13 11:55:49.000000000 +0000
++++ src/gallium/drivers/nouveau/nouveau_vp3_video.c
+@@ -294,7 +294,11 @@ nouveau_vp3_load_firmware(struct nouveau
+    if (nouveau_bo_map(dec->fw_bo, NOUVEAU_BO_WR, dec->client))
+       return 1;
+ 
++#ifdef O_CLOEXEC
+    fd = open(path, O_RDONLY | O_CLOEXEC);
++#else
++   fd = open(path, O_RDONLY);
++#endif
+    if (fd < 0) {
+       fprintf(stderr, "opening firmware file %s failed: %m\n", path);
+       return 1;
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_nouveau_nv50_nv84__video.c b/MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_nouveau_nv50_nv84__video.c
new file mode 100644
index 0000000000..883e4426e9
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_nouveau_nv50_nv84__video.c
@@ -0,0 +1,18 @@
+$NetBSD: patch-src_gallium_drivers_nouveau_nv50_nv84__video.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+Fix build on platforms without close-on-exec.
+
+--- src/gallium/drivers/nouveau/nv50/nv84_video.c.orig	2015-03-21 00:51:18.000000000 +0000
++++ src/gallium/drivers/nouveau/nv50/nv84_video.c
+@@ -34,7 +34,11 @@
+ static int
+ nv84_copy_firmware(const char *path, void *dest, ssize_t len)
+ {
++#ifdef O_CLOEXEC
+    int fd = open(path, O_RDONLY | O_CLOEXEC);
++#else
++   int fd = open(path, O_RDONLY);
++#endif
+    ssize_t r;
+    if (fd < 0) {
+       fprintf(stderr, "opening firmware file %s failed: %m\n", path);
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_radeonsi_si__compute__blit.c b/MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_radeonsi_si__compute__blit.c
new file mode 100644
index 0000000000..073b769cbb
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_radeonsi_si__compute__blit.c
@@ -0,0 +1,176 @@
+$NetBSD$
+
+2018-10-16 radeonsi: use compute shaders for clear_buffer & copy_buffer
+Commit: 9b331e462e5021d994859756d46cd2519d9c9c6e
+
+https://cgit.freedesktop.org/mesa/mesa/commit/?id=9b331e462e5021d994859756d46cd2519d9c9c6e
+
+--- src/gallium/drivers/radeonsi/si_compute_blit.c.orig	2019-02-09 12:52:15.000000000 +0000
++++ src/gallium/drivers/radeonsi/si_compute_blit.c
+@@ -34,10 +34,17 @@ static enum si_cache_policy get_cache_po
+ 					     enum si_coherency coher,
+ 					     uint64_t size)
+ {
++#if defined(REVERT_COPY_CLEAR)
++	if ((sctx->chip_class >= GFX9 && coher == SI_COHERENCY_CB_META) ||
++	    (sctx->chip_class >= CIK && coher == SI_COHERENCY_SHADER))
++		return L2_LRU;
++		
++#else
+ 	if ((sctx->chip_class >= GFX9 && (coher == SI_COHERENCY_CB_META ||
+ 					  coher == SI_COHERENCY_CP)) ||
+ 	    (sctx->chip_class >= CIK && coher == SI_COHERENCY_SHADER))
+ 		return size <= 256 * 1024 ? L2_LRU : L2_STREAM;
++#endif
+ 
+ 	return L2_BYPASS;
+ }
+@@ -180,6 +187,52 @@ void si_clear_buffer(struct si_context *
+ 		     uint64_t offset, uint64_t size, uint32_t *clear_value,
+ 		     uint32_t clear_value_size, enum si_coherency coher)
+ {
++#if defined(REVERT_COPY_CLEAR)
++
++/* Recommended maximum sizes for optimal performance.
++ * Fall back to compute or SDMA if the size is greater.
++ */
++#define CP_DMA_COPY_PERF_THRESHOLD	(64 * 1024) /* copied from Vulkan */
++#define CP_DMA_CLEAR_PERF_THRESHOLD	(32 * 1024) /* guess (clear is much slower) */
++
++	struct radeon_winsys *ws = sctx->ws;
++	struct si_resource *rdst = si_resource(dst);
++	enum si_cache_policy cache_policy = get_cache_policy(sctx, coher, size);
++
++	if (!size)
++		return;
++
++	uint64_t aligned_size = size & ~3ull;
++
++	/* dma_clear_buffer can use clear_buffer on failure. Make sure that
++	 * doesn't happen. We don't want an infinite recursion: */
++	if (sctx->dma_cs &&
++	    !(dst->flags & PIPE_RESOURCE_FLAG_SPARSE) &&
++	    (offset % 4 == 0) &&
++	    /* CP DMA is very slow. Always use SDMA for big clears. This
++	     * alone improves DeusEx:MD performance by 70%. */
++	    (size > CP_DMA_CLEAR_PERF_THRESHOLD ||
++	     /* Buffers not used by the GFX IB yet will be cleared by SDMA.
++	      * This happens to move most buffer clears to SDMA, including
++	      * DCC and CMASK clears, because pipe->clear clears them before
++	      * si_emit_framebuffer_state (in a draw call) adds them.
++	      * For example, DeusEx:MD has 21 buffer clears per frame and all
++	      * of them are moved to SDMA thanks to this. */
++	     !ws->cs_is_buffer_referenced(sctx->gfx_cs, rdst->buf,
++				          RADEON_USAGE_READWRITE))) {
++		si_sdma_clear_buffer(sctx, dst, offset, aligned_size, *clear_value);
++
++		offset += aligned_size;
++		size -= aligned_size;
++	} else if (aligned_size >= 4) {
++		si_cp_dma_clear_buffer(sctx, sctx->gfx_cs, dst, offset,
++				       aligned_size, *clear_value, 0, coher,
++				       get_cache_policy(sctx, coher, size));
++
++		offset += aligned_size;
++		size -= aligned_size;
++	}
++#else
+ 	if (!size)
+ 		return;
+ 
+@@ -258,6 +311,7 @@ void si_clear_buffer(struct si_context *
+ 		offset += aligned_size;
+ 		size -= aligned_size;
+ 	}
++#endif
+ 
+ 	/* Handle non-dword alignment. */
+ 	if (size) {
+@@ -275,8 +329,61 @@ static void si_pipe_clear_buffer(struct 
+ 				 const void *clear_value,
+ 				 int clear_value_size)
+ {
++#if defined(REVERT_COPY_CLEAR)
++	struct si_context *sctx = (struct si_context*)ctx;
++	uint32_t dword_value;
++
++	assert(offset % clear_value_size == 0);
++	assert(size % clear_value_size == 0);
++
++	if (clear_value_size > 4) {
++		bool clear_dword_duplicated = true;
++
++		/* See if we can lower large fills to dword fills. */
++		for (unsigned i = 1; i < clear_value_size / 4; i++)
++			if (((uint32_t *)clear_value)[0] != ((uint32_t*)clear_value)[i]) {
++				clear_dword_duplicated = false;
++				break;
++			}
++
++		if (!clear_dword_duplicated) {
++			/* Use transform feedback for 64-bit, 96-bit, and
++			 * 128-bit fills.
++			 */
++			union pipe_color_union streamout_clear_value;
++
++			memcpy(&streamout_clear_value, clear_value, clear_value_size);
++			si_blitter_begin(sctx, SI_DISABLE_RENDER_COND);
++			util_blitter_clear_buffer(sctx->blitter, dst, offset,
++						  size, clear_value_size / 4,
++						  &streamout_clear_value);
++			si_blitter_end(sctx);
++			return;
++		}
++	}
++
++	/* Expand the clear value to a dword. */
++	switch (clear_value_size) {
++	case 1:
++		dword_value = *(uint8_t*)clear_value;
++		dword_value |= (dword_value << 8) |
++			       (dword_value << 16) |
++			       (dword_value << 24);
++		break;
++	case 2:
++		dword_value = *(uint16_t*)clear_value;
++		dword_value |= dword_value << 16;
++		break;
++	default:
++		dword_value = *(uint32_t*)clear_value;
++	}
++
++	si_clear_buffer(sctx, dst, offset, size, &dword_value,
++			clear_value_size, SI_COHERENCY_SHADER);
++#else
+ 	si_clear_buffer((struct si_context*)ctx, dst, offset, size, (uint32_t*)clear_value,
+ 			clear_value_size, SI_COHERENCY_SHADER);
++#endif
+ }
+ 
+ void si_copy_buffer(struct si_context *sctx,
+@@ -289,6 +396,17 @@ void si_copy_buffer(struct si_context *s
+ 	enum si_coherency coher = SI_COHERENCY_SHADER;
+ 	enum si_cache_policy cache_policy = get_cache_policy(sctx, coher, size);
+ 
++#if defined(REVERT_COPY_CLEAR)
++	si_cp_dma_copy_buffer(sctx, dst, src, dst_offset, src_offset, size,
++			      0, coher, cache_policy);
++ 
++	if (cache_policy != L2_BYPASS)
++ 		si_resource(dst)->TC_L2_dirty = true;
++ 
++	/* If it's not a prefetch... */
++	if (dst_offset != src_offset)
++		sctx->num_cp_dma_calls++;
++#else
+ 	/* Only use compute for VRAM copies on dGPUs. */
+ 	if (sctx->screen->info.has_dedicated_vram &&
+ 	    si_resource(dst)->domains & RADEON_DOMAIN_VRAM &&
+@@ -301,6 +419,7 @@ void si_copy_buffer(struct si_context *s
+ 		si_cp_dma_copy_buffer(sctx, dst, src, dst_offset, src_offset, size,
+ 				      0, coher, cache_policy);
+ 	}
++#endif
+ }
+ 
+ void si_compute_copy_image(struct si_context *sctx,
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_radeonsi_si__pipe.c b/MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_radeonsi_si__pipe.c
new file mode 100644
index 0000000000..725c924fc0
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_radeonsi_si__pipe.c
@@ -0,0 +1,93 @@
+$NetBSD$
+
+Option to revert:
+
+2017-05-15 radeonsi: enable threaded_context
+Commit:	1c8f7d3be6ffb3567041f1e11a037fa7e75e4c28
+
+https://cgit.freedesktop.org/mesa/mesa/commit/?id=1c8f7d3be6ffb3567041f1e11a037fa7e75e4c28
+
+2018-10-16 radeonsi: use compute shaders for clear_buffer & copy_buffer
+Commit: 9b331e462e5021d994859756d46cd2519d9c9c6e
+
+https://cgit.freedesktop.org/mesa/mesa/commit/?id=9b331e462e5021d994859756d46cd2519d9c9c6e
+
+--- src/gallium/drivers/radeonsi/si_pipe.c.orig	2019-02-27 03:56:56.000000000 +0000
++++ src/gallium/drivers/radeonsi/si_pipe.c
+@@ -197,10 +197,12 @@ static void si_destroy_context(struct pi
+ 		sctx->b.delete_vs_state(&sctx->b, sctx->vs_blit_color_layered);
+ 	if (sctx->vs_blit_texcoord)
+ 		sctx->b.delete_vs_state(&sctx->b, sctx->vs_blit_texcoord);
++#if !defined(REVERT_COPY_CLEAR)
+ 	if (sctx->cs_clear_buffer)
+ 		sctx->b.delete_compute_state(&sctx->b, sctx->cs_clear_buffer);
+ 	if (sctx->cs_copy_buffer)
+ 		sctx->b.delete_compute_state(&sctx->b, sctx->cs_copy_buffer);
++#endif
+ 	if (sctx->cs_copy_image)
+ 		sctx->b.delete_compute_state(&sctx->b, sctx->cs_copy_image);
+ 	if (sctx->cs_copy_image_1d_array)
+@@ -378,7 +380,11 @@ static void si_set_context_param(struct 
+ }
+ 
+ static struct pipe_context *si_create_context(struct pipe_screen *screen,
++#if defined(REVERT_THREADED_CONTEXT)
++                                              void *priv, unsigned flags)
++#else
+                                               unsigned flags)
++#endif
+ {
+ 	struct si_context *sctx = CALLOC_STRUCT(si_context);
+ 	struct si_screen* sscreen = (struct si_screen *)screen;
+@@ -396,7 +402,11 @@ static struct pipe_context *si_create_co
+ 		sscreen->record_llvm_ir = true; /* racy but not critical */
+ 
+ 	sctx->b.screen = screen; /* this must be set first */
++#if defined(REVERT_THREADED_CONTEXT)
++	sctx->b.priv = priv;
++#else
+ 	sctx->b.priv = NULL;
++#endif
+ 	sctx->b.destroy = si_destroy_context;
+ 	sctx->screen = sscreen; /* Easy accessing of screen/winsys. */
+ 	sctx->is_debug = (flags & PIPE_CONTEXT_DEBUG) != 0;
+@@ -647,6 +657,7 @@ fail:
+ 	return NULL;
+ }
+ 
++#if !defined(REVERT_THREADED_CONTEXT)
+ static struct pipe_context *si_pipe_create_context(struct pipe_screen *screen,
+ 						   void *priv, unsigned flags)
+ {
+@@ -677,6 +688,7 @@ static struct pipe_context *si_pipe_crea
+ 				       sscreen->info.drm_major >= 3 ? si_create_fence : NULL,
+ 				       &((struct si_context*)ctx)->tc);
+ }
++#endif
+ 
+ /*
+  * pipe_screen
+@@ -874,7 +886,11 @@ struct pipe_screen *radeonsi_screen_crea
+ 						       debug_options, 0);
+ 
+ 	/* Set functions first. */
++#if defined(REVERT_THREADED_CONTEXT)
++	sscreen->b.context_create = si_create_context;
++#else
+ 	sscreen->b.context_create = si_pipe_create_context;
++#endif
+ 	sscreen->b.destroy = si_destroy_screen;
+ 
+ 	si_init_screen_get_functions(sscreen);
+@@ -1144,7 +1160,11 @@ struct pipe_screen *radeonsi_screen_crea
+ 		si_init_compiler(sscreen, &sscreen->compiler_lowp[i]);
+ 
+ 	/* Create the auxiliary context. This must be done last. */
++#if defined(REVERT_THREADED_CONTEXT)
++	sscreen->aux_context = sscreen->b.context_create(&sscreen->b, NULL, 0);
++#else
+ 	sscreen->aux_context = si_create_context(&sscreen->b, 0);
++#endif
+ 
+ 	if (sscreen->debug_flags & DBG(TEST_DMA))
+ 		si_test_dma(sscreen);
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_radeonsi_si__state__shaders.c b/MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_radeonsi_si__state__shaders.c
new file mode 100644
index 0000000000..9905344d81
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_radeonsi_si__state__shaders.c
@@ -0,0 +1,21 @@
+$NetBSD: patch-src_gallium_drivers_radeonsi_si__state__shaders.c,v 1.3 2019/01/20 09:50:28 tnn Exp $
+
+#if'out some debug code on SunOS. There is no open_memstream(3)
+
+--- src/gallium/drivers/radeonsi/si_state_shaders.c.orig	2019-01-17 11:26:22.000000000 +0000
++++ src/gallium/drivers/radeonsi/si_state_shaders.c
+@@ -1721,12 +1721,14 @@ static void si_build_shader_variant(stru
+ 	}
+ 
+ 	if (shader->compiler_ctx_state.is_debug_context) {
++#if defined(HAVE_OPEN_MEMSTREAM)
+ 		FILE *f = open_memstream(&shader->shader_log,
+ 					 &shader->shader_log_size);
+ 		if (f) {
+ 			si_shader_dump(sscreen, shader, NULL, sel->type, f, false);
+ 			fclose(f);
+ 		}
++#endif
+ 	}
+ 
+ 	si_shader_init_pm4_state(sscreen, shader);
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_vc4_vc4__bufmgr.c b/MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_vc4_vc4__bufmgr.c
new file mode 100644
index 0000000000..2eec8e3d7f
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_gallium_drivers_vc4_vc4__bufmgr.c
@@ -0,0 +1,18 @@
+$NetBSD: patch-src_gallium_drivers_vc4_vc4__bufmgr.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+Patch from FreeBSD ports graphics/mesa-dri 17.1.0
+
+# define ETIME as ETIMEOUT same as in intel driver
+
+--- src/gallium/drivers/vc4/vc4_bufmgr.c.orig	2017-05-25 07:13:13.000000000 +0000
++++ src/gallium/drivers/vc4/vc4_bufmgr.c
+@@ -27,6 +27,9 @@
+ #include <fcntl.h>
+ #include <xf86drm.h>
+ #include <xf86drmMode.h>
++#ifndef ETIME
++#define ETIME ETIMEDOUT
++#endif
+ 
+ #include "util/u_hash_table.h"
+ #include "util/u_memory.h"
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_gallium_include_pipe_p__config.h b/MesaLib-dfbsd-meson/patches/patch-src_gallium_include_pipe_p__config.h
new file mode 100644
index 0000000000..b66a74e446
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_gallium_include_pipe_p__config.h
@@ -0,0 +1,31 @@
+$NetBSD: patch-src_gallium_include_pipe_p__config.h,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+* Patches for Sparc from FreeBSD ports for mesa-dri 17.2.3.
+
+* Definitions for DragonFly already in upstream source.
+
+--- src/gallium/include/pipe/p_config.h.orig	2017-10-19 12:23:53.000000000 +0000
++++ src/gallium/include/pipe/p_config.h
+@@ -77,6 +77,12 @@
+ #define PIPE_CC_ICL
+ #endif
+ 
++#if defined(__sparc__) || defined(__sparc64__)
++#define PIPE_ARCH_SPARC
++#if defined(__sparc64__)
++#define PIPE_ARCH_SPARC_64
++#endif
++#endif
+ 
+ /*
+  * Processor architecture
+@@ -131,7 +137,8 @@
+ 
+ #if defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64) || defined(PIPE_ARCH_ARM) || defined(PIPE_ARCH_AARCH64)
+ #define PIPE_ARCH_LITTLE_ENDIAN
+-#elif defined(PIPE_ARCH_PPC) || defined(PIPE_ARCH_PPC_64) || defined(PIPE_ARCH_S390)
++#elif defined(PIPE_ARCH_PPC) || defined(PIPE_ARCH_PPC_64) || defined(PIPE_ARCH_S390) || defined(PIPE_ARCH_SPARC) || defined(PIPE_ARCH_SPARC_64)
++
+ #define PIPE_ARCH_BIG_ENDIAN
+ #endif
+ 
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_gallium_state__trackers_clover_llvm_invocation.cpp b/MesaLib-dfbsd-meson/patches/patch-src_gallium_state__trackers_clover_llvm_invocation.cpp
new file mode 100644
index 0000000000..10ebcf46ac
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_gallium_state__trackers_clover_llvm_invocation.cpp
@@ -0,0 +1,40 @@
+$NetBSD: patch-src_gallium_state__trackers_clover_llvm_invocation.cpp,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+Patch from FreeBSD ports graphics/mesa-dri 17.1.0
+
+# fix errors like the following
+#
+# llvm/invocation.cpp:(.text+0x1275): undefined reference to `std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::c_str()
+ const'
+# /usr/bin/ld: ../../../../src/gallium/state_trackers/clover/.libs/libclover.a(libclllvm_la-invocation.o): relocation R_X86_64_PC32 against `_ZNKSt3__112bas
+ic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5c_strEv' can not be used when making a shared object; recompile with -fPIC
+# /usr/bin/ld: final link failed: Bad value
+#
+
+--- src/gallium/state_trackers/clover/llvm/invocation.cpp.orig	2018-09-07 21:18:07.000000000 +0000
++++ src/gallium/state_trackers/clover/llvm/invocation.cpp
+@@ -181,6 +181,10 @@ namespace {
+       return get_lang_standard_from_version_str(device_version);
+    }
+ 
++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
++   const char* cstr(const std::string& str) { return str.c_str(); }
++#endif
++
+    std::unique_ptr<clang::CompilerInstance>
+    create_compiler_instance(const device &dev,
+                             const std::vector<std::string> &opts,
+@@ -193,8 +197,13 @@ namespace {
+       // Parse the compiler options.  A file name should be present at the end
+       // and must have the .cl extension in order for the CompilerInvocation
+       // class to recognize it as an OpenCL source file.
++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
++      std::vector<const char *> copts(opts.size());
++      std::transform(opts.begin(), opts.end(), copts.begin(), cstr);
++#else
+       const std::vector<const char *> copts =
+          map(std::mem_fn(&std::string::c_str), opts);
++#endif
+ 
+       const target &target = dev.ir_target();
+       const std::string &device_clc_version = dev.device_clc_version();
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_gallium_state__trackers_clover_llvm_metadata.hpp b/MesaLib-dfbsd-meson/patches/patch-src_gallium_state__trackers_clover_llvm_metadata.hpp
new file mode 100644
index 0000000000..cc9ecdf93d
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_gallium_state__trackers_clover_llvm_metadata.hpp
@@ -0,0 +1,21 @@
+$NetBSD: patch-src_gallium_state__trackers_clover_llvm_metadata.hpp,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+From FreeBSD ports graphics/libGL mesa 13.0.5
+
+# Fix error: no matching constructor for initialization of 'std::vector<const ::llvm::MDNode *>' 
+#
+
+--- src/gallium/state_trackers/clover/llvm/metadata.hpp.orig	2017-02-13 11:55:49.000000000 +0000
++++ src/gallium/state_trackers/clover/llvm/metadata.hpp
+@@ -42,7 +42,11 @@ namespace clover {
+          get_kernel_nodes(const ::llvm::Module &mod) {
+             if (const ::llvm::NamedMDNode *n =
+                    mod.getNamedMetadata("opencl.kernels"))
++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
++               return { n->getOperand(0), n->getOperand(n->getNumOperands()) };
++#else
+                return { n->op_begin(), n->op_end() };
++#endif
+             else
+                return {};
+          }
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_gallium_state__trackers_clover_util_range.hpp b/MesaLib-dfbsd-meson/patches/patch-src_gallium_state__trackers_clover_util_range.hpp
new file mode 100644
index 0000000000..6ba36d1996
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_gallium_state__trackers_clover_util_range.hpp
@@ -0,0 +1,40 @@
+$NetBSD: patch-src_gallium_state__trackers_clover_util_range.hpp,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+From FreeBSD ports for mesa 17.1.10:
+
+From b95533b981af9a6687b41418e7cc2a5652fc2bdb Mon Sep 17 00:00:00 2001
+Date: Fri, 7 Mar 2014 15:16:08 +0100
+Subject: [PATCH 3/3] Work around for clang 3.4 which fails to build Clover
+
+See:
+  https://bugs.freedesktop.org/show_bug.cgi?id=74098#c3
+
+--- src/gallium/state_trackers/clover/util/range.hpp.orig	2017-09-25 16:56:19.000000000 +0000
++++ src/gallium/state_trackers/clover/util/range.hpp
+@@ -362,6 +362,14 @@ namespace clover {
+       return { i, i + n };
+    }
+ 
++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
++   namespace detail {
++      template<typename T>
++      using fixup_function_type =
++         typename std::conditional<std::is_function<T>::value, T &, T>::type;
++   }
++#endif
++
+    ///
+    /// Create a range by transforming the contents of a number of
+    /// source ranges \a rs element-wise using a provided functor \a f.
+@@ -369,7 +377,11 @@ namespace clover {
+    /// \sa adaptor_range.
+    ///
+    template<typename F, typename... Rs>
++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
++   adaptor_range<detail::fixup_function_type<F>, Rs...>
++#else
+    adaptor_range<F, Rs...>
++#endif
+    map(F &&f, Rs &&... rs) {
+       return { std::forward<F>(f), std::forward<Rs>(rs)... };
+    }
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_gallium_winsys_radeon_drm_radeon__drm__winsys.c b/MesaLib-dfbsd-meson/patches/patch-src_gallium_winsys_radeon_drm_radeon__drm__winsys.c
new file mode 100644
index 0000000000..521800ccd7
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_gallium_winsys_radeon_drm_radeon__drm__winsys.c
@@ -0,0 +1,18 @@
+$NetBSD: patch-src_gallium_winsys_radeon_drm_radeon__drm__winsys.c,v 1.1 2015/04/25 11:19:18 tnn Exp $
+
+Don't create pipe thread on NetBSD. It triggers some kernel bug.
+kern/49838.
+
+--- src/gallium/winsys/radeon/drm/radeon_drm_winsys.c.orig	2018-07-06 23:20:10.000000000 +0000
++++ src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
+@@ -906,8 +906,10 @@ radeon_drm_winsys_create(int fd, const s
+     /* TTM aligns the BO size to the CPU page size */
+     ws->info.gart_page_size = sysconf(_SC_PAGESIZE);
+ 
++#if !defined(NO_CS_QUEUE)
+     if (ws->num_cpus > 1 && debug_get_option_thread())
+         util_queue_init(&ws->cs_queue, "rcs", 8, 1, 0);
++#endif
+ 
+     /* Create the screen at the end. The winsys must be initialized
+      * completely.
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_gbm_Makefile.am b/MesaLib-dfbsd-meson/patches/patch-src_gbm_Makefile.am
new file mode 100644
index 0000000000..bc09de51da
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_gbm_Makefile.am
@@ -0,0 +1,12 @@
+$NetBSD: patch-src_gbm_Makefile.am,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+--- src/gbm/Makefile.am.orig	2017-11-20 14:25:47.000000000 +0000
++++ src/gbm/Makefile.am
+@@ -28,6 +28,7 @@ libgbm_la_LIBADD = \
+ 	$(top_builddir)/src/loader/libloader.la \
+ 	$(top_builddir)/src/util/libmesautil.la \
+ 	$(top_builddir)/src/util/libxmlconfig.la \
++	$(PTHREAD_LIBS) \
+ 	$(DLOPEN_LIBS)
+ 
+ if HAVE_PLATFORM_WAYLAND
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_glx_Makefile.am b/MesaLib-dfbsd-meson/patches/patch-src_glx_Makefile.am
new file mode 100644
index 0000000000..8b397f010e
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_glx_Makefile.am
@@ -0,0 +1,49 @@
+$NetBSD: patch-src_glx_Makefile.am,v 1.3 2019/01/19 23:21:43 tnn Exp $
+
+- We don't need libmesautil.la here. Those symbols seem to already be
+  included in libmesa.la.
+- force libtool to use clang++ to link libGL on OSX.
+  Otherwise we get:
+  Undefined symbols for architecture x86_64:
+  "std::terminate()", referenced from:
+      ___clang_call_terminate in libglx.a(glsl_parser.o)
+      ...
+
+--- src/glx/Makefile.am.orig	2019-01-17 11:26:23.000000000 +0000
++++ src/glx/Makefile.am
+@@ -89,10 +89,16 @@ libglx_la_SOURCES = \
+ 	singlepix.c \
+ 	vertarr.c
+ 
++if HAVE_APPLEDRI
++libglx_la_LIBADD = \
++	$(top_builddir)/src/loader/libloader.la \
++	$(top_builddir)/src/util/libxmlconfig.la
++else
+ libglx_la_LIBADD = \
+ 	$(top_builddir)/src/loader/libloader.la \
+ 	$(top_builddir)/src/util/libmesautil.la \
+ 	$(top_builddir)/src/util/libxmlconfig.la
++endif
+ 
+ if HAVE_DRISW
+ libglx_la_SOURCES += \
+@@ -136,6 +142,7 @@ libglx_la_SOURCES += \
+ 
+ SUBDIRS += apple
+ libglx_la_LIBADD += $(builddir)/apple/libappleglx.la
++libglx_la_LIBADD += $(top_builddir)/src/mesa/libmesa.la
+ endif
+ 
+ if HAVE_WINDOWSDRI
+@@ -187,6 +194,10 @@ lib@GL_LIB@_la_SOURCES =
+ lib@GL_LIB@_la_LIBADD = $(GL_LIBS)
+ lib@GL_LIB@_la_LDFLAGS = $(GL_LDFLAGS)
+ 
++if HAVE_APPLEDRI
++lib@GL_LIB@_la_SOURCES += apple_dummy.cpp
++endif
++
+ if HAVE_WINDOWSDRI
+ lib@GL_LIB@_la_LDFLAGS += -lgdi32 -lopengl32 -Wl,--disable-stdcall-fixup
+ endif
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_glx_apple_apple__glapi.c b/MesaLib-dfbsd-meson/patches/patch-src_glx_apple_apple__glapi.c
new file mode 100644
index 0000000000..fa323569e3
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_glx_apple_apple__glapi.c
@@ -0,0 +1,24 @@
+$NetBSD: patch-src_glx_apple_apple__glapi.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+https://bugs.freedesktop.org/show_bug.cgi?id=90311
+See also hacks.mk.
+
+--- src/glx/apple/apple_glapi.c.orig	2018-02-09 02:17:59.000000000 +0000
++++ src/glx/apple/apple_glapi.c
+@@ -39,6 +39,7 @@
+ #include <GL/gl.h>
+ 
+ #include "main/glheader.h"
++#include "main/remap.h"
+ #include "glapi.h"
+ #include "glapitable.h"
+ 
+@@ -53,6 +54,8 @@ static void _apple_glapi_create_table(vo
+     if (__applegl_api)
+         return;
+ 
++    _mesa_init_remap_table(); 
++
+     __ogl_framework_api = _glapi_create_table_from_handle(apple_cgl_get_dl_handle(), "gl");
+     assert(__ogl_framework_api);
+ 
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_glx_dri__common.h b/MesaLib-dfbsd-meson/patches/patch-src_glx_dri__common.h
new file mode 100644
index 0000000000..46647b3cf6
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_glx_dri__common.h
@@ -0,0 +1,17 @@
+$NetBSD: patch-src_glx_dri__common.h,v 1.1 2019/01/19 21:54:03 tnn Exp $
+
+Fix error on OSX.
+
+--- src/glx/dri_common.h.orig	2019-01-17 11:26:23.000000000 +0000
++++ src/glx/dri_common.h
+@@ -55,8 +55,10 @@ extern struct glx_config *driConvertConf
+ 
+ extern void driDestroyConfigs(const __DRIconfig **configs);
+ 
++#if !defined(GLX_USE_APPLEGL)
+ extern __GLXDRIdrawable *
+ driFetchDrawable(struct glx_context *gc, GLXDrawable glxDrawable);
++#endif
+ 
+ extern void
+ driReleaseDrawables(struct glx_context *gc);
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_glx_dri__glx.c b/MesaLib-dfbsd-meson/patches/patch-src_glx_dri__glx.c
new file mode 100644
index 0000000000..3bfc863be7
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_glx_dri__glx.c
@@ -0,0 +1,43 @@
+$NetBSD: patch-src_glx_dri__glx.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+atexit() is not a good idea in shared libraries.
+
+FreeBSD reported atexit bug for 10.6:
+https://bugs.freedesktop.org/show_bug.cgi?id=91869
+
+--- src/glx/dri_glx.c.orig	2018-01-18 21:30:28.000000000 +0000
++++ src/glx/dri_glx.c
+@@ -183,9 +183,21 @@ static struct driver_config_entry *drive
+ /* Called as an atexit function. Otherwise, this would have to be called with
+  * driver_config_mutex locked.
+  */
++#if defined(HAVE_NOATEXIT)
++static Bool e_next_ever_null = False;
++
++static void __attribute__((__destructor__))
++#else
+ static void
++#endif
+ clear_driver_config_cache()
+ {
++
++#if defined(HAVE_NOATEXIT)
++   if (!e_next_ever_null)
++      return;
++#endif
++
+    while (driver_config_cache) {
+       struct driver_config_entry *e = driver_config_cache;
+       driver_config_cache = e->next;
+@@ -276,7 +288,11 @@ glXGetDriverConfig(const char *driverNam
+    driver_config_cache = e;
+ 
+    if (!e->next)
++#if defined(HAVE_NOATEXIT)
++      e_next_ever_null = True;
++#else
+       atexit(clear_driver_config_cache);
++#endif
+ 
+ out:
+    pthread_mutex_unlock(&driver_config_mutex);
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_glx_glxclient.h b/MesaLib-dfbsd-meson/patches/patch-src_glx_glxclient.h
new file mode 100644
index 0000000000..0f308a50b0
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_glx_glxclient.h
@@ -0,0 +1,19 @@
+$NetBSD: patch-src_glx_glxclient.h,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+NetBSD only supports zero-initialized initial-exec tls variables in conjuction
+with dlopen(3) at the moment.
+
+--- src/glx/glxclient.h.orig	2017-02-13 11:55:49.000000000 +0000
++++ src/glx/glxclient.h
+@@ -661,7 +661,11 @@ extern void __glXSetCurrentContext(struc
+ extern __thread void *__glX_tls_Context
+    __attribute__ ((tls_model("initial-exec")));
+ 
++#if defined(__NetBSD__)
++#  define __glXGetCurrentContext() (likely(__glX_tls_Context) ? __glX_tls_Context : (void*)&dummyContext)
++#else
+ #  define __glXGetCurrentContext() __glX_tls_Context
++#endif
+ 
+ # else
+ 
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_glx_glxcurrent.c b/MesaLib-dfbsd-meson/patches/patch-src_glx_glxcurrent.c
new file mode 100644
index 0000000000..fcbe07312b
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_glx_glxcurrent.c
@@ -0,0 +1,40 @@
+$NetBSD: patch-src_glx_glxcurrent.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+Interim fix for toolchain/50277.
+
+NetBSD only supports zero-initialized initial-exec tls variables in conjuction
+with dlopen(3) at the moment.
+
+--- src/glx/glxcurrent.c.orig	2018-02-09 02:17:59.000000000 +0000
++++ src/glx/glxcurrent.c
+@@ -40,6 +40,18 @@
+ #include "glx_error.h"
+ 
+ /*
++ * MASSIVE KLUDGE!
++ * We need these to not be extern in libGL.so because of
++ * PR toolchain/50277
++ */
++#if defined(GLX_USE_TLS) && defined(__NetBSD__)
++_X_EXPORT __thread struct _glapi_table * _glapi_tls_Dispatch
++    __attribute__((tls_model("initial-exec"))) = NULL;
++_X_EXPORT __thread void * _glapi_tls_Context
++    __attribute__((tls_model("initial-exec")));
++#endif
++
++/*
+ ** We setup some dummy structures here so that the API can be used
+ ** even if no context is current.
+ */
+@@ -77,7 +89,11 @@ _X_HIDDEN pthread_mutex_t __glXmutex = P
+  * \c __glXGetCurrentContext can be implemented as trivial macro.
+  */
+ __thread void *__glX_tls_Context __attribute__ ((tls_model("initial-exec")))
++#if defined(__NetBSD__)
++   = NULL; /* non-zero initializers not supported with dlopen */
++#else
+    = &dummyContext;
++#endif
+ 
+ _X_HIDDEN void
+ __glXSetCurrentContext(struct glx_context * c)
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_glx_glxext.c b/MesaLib-dfbsd-meson/patches/patch-src_glx_glxext.c
new file mode 100644
index 0000000000..1ce9e9b86e
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_glx_glxext.c
@@ -0,0 +1,47 @@
+$NetBSD: patch-src_glx_glxext.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+* Patch from FreeBSD ports graphics/mesa-dri 18.0.0
+
+# work-around for https://bugs.freedesktop.org/show_bug.cgi?id=100627
+
+* Extended to DragonFly and NetBSD.  Other OSes might need this as well.
+
+* Added logging statements to note dri3 initialization being invoked.
+
+--- src/glx/glxext.c.orig	2017-12-08 13:49:11.000000000 +0000
++++ src/glx/glxext.c
+@@ -55,6 +55,7 @@
+ #include <xcb/xcb.h>
+ #include <xcb/glx.h>
+ 
++#include "dri_common.h"
+ 
+ #ifdef DEBUG
+ void __glXDumpDrawBuffer(struct glx_context * ctx);
+@@ -817,7 +818,11 @@ AllocAndFetchScreenConfigs(Display * dpy
+ #if defined(GLX_USE_DRM)
+ #if defined(HAVE_DRI3)
+       if (priv->dri3Display)
++         InfoMessageF("glxext.c: AllocAndFetchScreenConfigs: priv->dri3Display\n");
++      if (priv->dri3Display)
+          psc = (*priv->dri3Display->createScreen) (i, priv);
++      if (psc != NULL && priv->dri3Display)
++         InfoMessageF("glxext.c: AllocAndFetchScreenConfigs: psc set by priv->dri3Display\n");
+ #endif /* HAVE_DRI3 */
+       if (psc == NULL && priv->dri2Display)
+ 	 psc = (*priv->dri2Display->createScreen) (i, priv);
+@@ -920,8 +925,13 @@ __glXInitialize(Display * dpy)
+ #if defined(GLX_USE_DRM)
+    if (glx_direct && glx_accel) {
+ #if defined(HAVE_DRI3)
+-      if (!env_var_as_boolean("LIBGL_DRI3_DISABLE", false))
++#if ((defined(__FreeBSD__) || defined(__FreeBSD_kernel__)) && !defined(__DRM_NEXT__)) || defined(__DragonFly__) || defined(__NetBSD__)
++      if (env_var_as_boolean("LIBGL_DRI3_ENABLE", false))
++#endif
++      if (!env_var_as_boolean("LIBGL_DRI3_DISABLE", false)) {
++         InfoMessageF("glxext.c: __glxInitialize: dpyPriv->dri3Display = dri3_create_display\n");
+          dpyPriv->dri3Display = dri3_create_display(dpy);
++      }
+ #endif /* HAVE_DRI3 */
+       dpyPriv->dri2Display = dri2CreateDisplay(dpy);
+       dpyPriv->driDisplay = driCreateDisplay(dpy);
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_intel_Makefile.tools.am b/MesaLib-dfbsd-meson/patches/patch-src_intel_Makefile.tools.am
new file mode 100644
index 0000000000..cc2f67a2dc
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_intel_Makefile.tools.am
@@ -0,0 +1,14 @@
+$NetBSD: patch-src_intel_Makefile.tools.am,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+-lrt for shm_open in aubinator.c, a more portable alternative to memfd_create
+
+--- src/intel/Makefile.tools.am.orig	2018-09-07 21:18:07.000000000 +0000
++++ src/intel/Makefile.tools.am
+@@ -43,6 +43,7 @@ tools_aubinator_LDADD = \
+ 	$(PTHREAD_LIBS) \
+ 	$(DLOPEN_LIBS) \
+ 	$(ZLIB_LIBS) \
++	-lrt \
+ 	-lm
+ 
+ 
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_intel_compiler_brw__fs__bank__conflicts.cpp b/MesaLib-dfbsd-meson/patches/patch-src_intel_compiler_brw__fs__bank__conflicts.cpp
new file mode 100644
index 0000000000..da81a98c10
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_intel_compiler_brw__fs__bank__conflicts.cpp
@@ -0,0 +1,23 @@
+$NetBSD: patch-src_intel_compiler_brw__fs__bank__conflicts.cpp,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=225415
+FreeBSD Bugzilla: Bug 225415 graphics/mesa-dri: update to 18.0.0
+
+compiler/brw_fs_bank_conflicts.cpp:719:25: error: scalar initializer cannot be empty
+      vector_type s_p = {}, s_n = {};
+                        ^~
+compiler/brw_fs_bank_conflicts.cpp:719:35: error: scalar initializer cannot be empty
+      vector_type s_p = {}, s_n = {};
+                                  ^~
+
+--- src/intel/compiler/brw_fs_bank_conflicts.cpp.orig	2018-02-09 02:17:59.000000000 +0000
++++ src/intel/compiler/brw_fs_bank_conflicts.cpp
+@@ -716,7 +716,7 @@ namespace {
+                    const weight_vector_type &conflicts)
+    {
+       const unsigned m = DIV_ROUND_UP(conflicts.size, vector_width);
+-      vector_type s_p = {}, s_n = {};
++      vector_type s_p = {0}, s_n = {0};
+ 
+       for (unsigned r = 0; r < m; r++) {
+          s_p = adds(s_p, mask(bank_mask_p.v[r], conflicts.v[r]));
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_intel_isl_isl__tiled__memcpy.c b/MesaLib-dfbsd-meson/patches/patch-src_intel_isl_isl__tiled__memcpy.c
new file mode 100644
index 0000000000..8d7843f8e5
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_intel_isl_isl__tiled__memcpy.c
@@ -0,0 +1,22 @@
+$NetBSD: patch-src_mesa_drivers_dri_i965_intel__tiled__memcpy.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+From wip/MesaLib 13.0.1.
+
+--- src/intel/isl/isl_tiled_memcpy.c.orig	2019-01-22 16:42:57.000000000 +0000
++++ src/intel/isl/isl_tiled_memcpy.c
+@@ -64,6 +64,7 @@ ror(uint32_t n, uint32_t d)
+    return (n >> d) | (n << (32 - d));
+ }
+ 
++#if !defined(__NetBSD__)
+ static inline uint32_t
+ bswap32(uint32_t n)
+ {
+@@ -76,6 +77,7 @@ bswap32(uint32_t n)
+           (n << 24);
+ #endif
+ }
++#endif /* NetBSD */
+ 
+ /**
+  * Copy RGBA to BGRA - swap R and B.
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_intel_tools_aub__mem.c b/MesaLib-dfbsd-meson/patches/patch-src_intel_tools_aub__mem.c
new file mode 100644
index 0000000000..c2f9287a58
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_intel_tools_aub__mem.c
@@ -0,0 +1,43 @@
+$NetBSD: patch-src_intel_tools_aub__mem.c,v 1.1 2019/01/10 22:30:11 tnn Exp $
+
+* Partially implement memfd_create() via mkostemp()
+
+--- src/intel/tools/aub_mem.c.orig	2018-12-11 21:13:57.000000000 +0000
++++ src/intel/tools/aub_mem.c
+@@ -30,11 +30,36 @@
+ 
+ #ifndef HAVE_MEMFD_CREATE
+ #include <sys/syscall.h>
++#if defined(__FreeBSD__)
++#include <fcntl.h>
++#endif
+ 
+ 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
+ 
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_intel_tools_aubinator__error__decode.c b/MesaLib-dfbsd-meson/patches/patch-src_intel_tools_aubinator__error__decode.c
new file mode 100644
index 0000000000..f35b477226
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_intel_tools_aubinator__error__decode.c
@@ -0,0 +1,19 @@
+$NetBSD: patch-src_intel_tools_aubinator__error__decode.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+Patch from FreeBSD ports graphics/mesa-dri 17.1.0
+
+# expose getline in FreeBSD's stdio.h
+#
+
+--- src/intel/tools/aubinator_error_decode.c.orig	2017-05-25 07:13:13.000000000 +0000
++++ src/intel/tools/aubinator_error_decode.c
+@@ -22,6 +22,9 @@
+  *
+  */
+ 
++#if defined(__FreeBSD__) && __FreeBSD__ < 12
++#define _WITH_GETLINE
++#endif
+ #include <stdbool.h>
+ #include <stdio.h>
+ #include <stdlib.h>
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_intel_tools_error2aub.c b/MesaLib-dfbsd-meson/patches/patch-src_intel_tools_error2aub.c
new file mode 100644
index 0000000000..021e598a4f
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_intel_tools_error2aub.c
@@ -0,0 +1,19 @@
+$NetBSD$
+
+Patch from FreeBSD ports graphics/mesa-dri 18.2.0
+
+# expose getline in FreeBSD's stdio.h
+#
+
+--- src/intel/tools/error2aub.c.orig	2018-08-09 00:34:30.000000000 +0000
++++ src/intel/tools/error2aub.c
+@@ -26,6 +26,9 @@
+ #include <getopt.h>
+ #include <inttypes.h>
+ #include <signal.h>
++#if defined(__FreeBSD__) && __FreeBSD__ < 12
++#define _WITH_GETLINE
++#endif
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_intel_vulkan_anv__allocator.c b/MesaLib-dfbsd-meson/patches/patch-src_intel_vulkan_anv__allocator.c
new file mode 100644
index 0000000000..8f345bf651
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_intel_vulkan_anv__allocator.c
@@ -0,0 +1,62 @@
+$NetBSD: patch-src_intel_vulkan_anv__allocator.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+* Partially implement memfd_create() via mkostemp()
+* Ignore MAP_POPULATE if unsupported
+
+FreeBSD Bugzilla - Bug 225415: graphics/mesa-dri: update to 18.0.0
+https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=225415
+
+--- src/intel/vulkan/anv_allocator.c.orig	2018-02-09 02:17:59.000000000 +0000
++++ src/intel/vulkan/anv_allocator.c
+@@ -25,9 +25,21 @@
+ #include <unistd.h>
+ #include <limits.h>
+ #include <assert.h>
++#ifdef __linux__
+ #include <linux/memfd.h>
++#else
++#include <fcntl.h>
++#endif
+ #include <sys/mman.h>
+ 
++#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"
+@@ -113,7 +125,29 @@ struct anv_mmap_cleanup {
+ 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
+ 
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_intel_vulkan_anv__device.c b/MesaLib-dfbsd-meson/patches/patch-src_intel_vulkan_anv__device.c
new file mode 100644
index 0000000000..1a5cad3462
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_intel_vulkan_anv__device.c
@@ -0,0 +1,61 @@
+$NetBSD: patch-src_intel_vulkan_anv__device.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+* Without sysinfo() fall back to sysconf()
+* Define ETIME if missing
+
+FreeBSD Bugzilla - Bug 225415: graphics/mesa-dri: update to 18.0.0
+https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=225415
+
+https://reviews.freebsd.org/D17872
+
+* Define CLOCK_MONOTONIC_RAW if missing
+
+--- src/intel/vulkan/anv_device.c.orig	2019-02-02 23:08:03.000000000 +0000
++++ 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>
+@@ -44,6 +46,17 @@
+ 
+ #include "genxml/gen7_pack.h"
+ 
++#ifndef ETIME
++#define ETIME ETIMEDOUT
++#endif
++#ifndef CLOCK_MONOTONIC_RAW
++# ifdef CLOCK_MONOTONIC_FAST
++#  define CLOCK_MONOTONIC_RAW CLOCK_MONOTONIC_FAST
++# else
++#  define CLOCK_MONOTONIC_RAW CLOCK_MONOTONIC
++# endif
++#endif
++
+ static void
+ compiler_debug_log(void *data, const char *fmt, ...)
+ { }
+@@ -64,10 +77,18 @@ static uint64_t
+ anv_compute_heap_size(int fd, uint64_t gtt_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
++#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__)
++   uint64_t total_ram = sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGE_SIZE);
++#else
++   uint64_t total_ram = sysctlbyname(SYSCTL_MEMSIZE, &mem, &size, nullptr, 0);
++#endif
++#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.
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_intel_vulkan_anv__gem.c b/MesaLib-dfbsd-meson/patches/patch-src_intel_vulkan_anv__gem.c
new file mode 100644
index 0000000000..aa6716cc1a
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_intel_vulkan_anv__gem.c
@@ -0,0 +1,19 @@
+$NetBSD: patch-src_intel_vulkan_anv__gem.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+* Define ETIME if missing
+
+FreeBSD Bugzilla - Bug 225415: graphics/mesa-dri: update to 18.0.0
+https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=225415
+
+--- src/intel/vulkan/anv_gem.c.orig	2018-02-09 02:17:59.000000000 +0000
++++ 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>
+ 
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_intel_vulkan_anv__gem__stubs.c b/MesaLib-dfbsd-meson/patches/patch-src_intel_vulkan_anv__gem__stubs.c
new file mode 100644
index 0000000000..72ef0ef14f
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_intel_vulkan_anv__gem__stubs.c
@@ -0,0 +1,36 @@
+$NetBSD: patch-src_intel_vulkan_anv__gem__stubs.c,v 1.1 2019/01/10 22:30:11 tnn Exp $
+
+* Partially implement memfd_create() via mkostemp()
+
+--- src/intel/vulkan/anv_gem_stubs.c.orig	2018-12-11 21:13:57.000000000 +0000
++++ src/intel/vulkan/anv_gem_stubs.c
+@@ -31,7 +31,29 @@
+ 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
+ 
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_intel_vulkan_anv__queue.c b/MesaLib-dfbsd-meson/patches/patch-src_intel_vulkan_anv__queue.c
new file mode 100644
index 0000000000..5be2fd92e2
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_intel_vulkan_anv__queue.c
@@ -0,0 +1,25 @@
+$NetBSD: patch-src_intel_vulkan_anv__queue.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+* Define ETIME if missing
+* Drop header that was never used (modified for Linux inclusion)
+
+FreeBSD Bugzilla - Bug 225415: graphics/mesa-dri: update to 18.0.0
+https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=225415
+
+--- src/intel/vulkan/anv_queue.c.orig	2018-02-09 02:17:59.000000000 +0000
++++ src/intel/vulkan/anv_queue.c
+@@ -26,8 +26,14 @@
+  */
+ 
+ #include <fcntl.h>
++#include <errno.h>
++#ifndef ETIME
++#define ETIME ETIMEDOUT
++#endif
+ #include <unistd.h>
++#if defined(__linux__)
+ #include <sys/eventfd.h>
++#endif
+ 
+ #include "anv_private.h"
+ #include "vk_util.h"
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_mapi_entry__x86-64__tls.h b/MesaLib-dfbsd-meson/patches/patch-src_mapi_entry__x86-64__tls.h
new file mode 100644
index 0000000000..e97d2c480a
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_mapi_entry__x86-64__tls.h
@@ -0,0 +1,32 @@
+$NetBSD: patch-src_mapi_entry__x86-64__tls.h,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+NetBSD only supports zero-initialized initial-exec tls variables in conjuction
+with dlopen(3) at the moment.
+
+Fix --enable-glx-tls with clang. From FreeBSD.
+
+table_noop_array is only defined for shared-glapi.
+es1api and es2api are not going to be patched for NetBSD.
+
+--- src/mapi/entry_x86-64_tls.h.orig	2017-11-20 14:25:47.000000000 +0000
++++ src/mapi/entry_x86-64_tls.h
+@@ -43,10 +43,19 @@ __asm__(".text\n"
+ 
+ #ifndef __ILP32__
+ 
++#if defined(__NetBSD__) && defined(MAPI_MODE_GLAPI)
+ #define STUB_ASM_CODE(slot)                              \
+    "movq " ENTRY_CURRENT_TABLE "@GOTTPOFF(%rip), %rax\n\t"  \
+    "movq %fs:(%rax), %r11\n\t"                           \
++   "testq %r11, %r11\n\t"                                \
++   "cmoveq table_noop_array@GOTPCREL(%rip), %r11\n\t"    \
+    "jmp *(8 * " slot ")(%r11)"
++#else
++#define STUB_ASM_CODE(slot)                              \
++   "movq " ENTRY_CURRENT_TABLE "@GOTTPOFF(%rip), %rax\n\t"  \
++   "movq %fs:(%rax), %r11\n\t"                           \
++   "jmp *(8 * " slot ")(%r11)"
++#endif
+ 
+ #else
+ 
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_mapi_entry__x86__tls.h b/MesaLib-dfbsd-meson/patches/patch-src_mapi_entry__x86__tls.h
new file mode 100644
index 0000000000..d49dd05e30
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_mapi_entry__x86__tls.h
@@ -0,0 +1,40 @@
+$NetBSD: patch-src_mapi_entry__x86__tls.h,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+NetBSD only supports zero-initialized initial-exec tls variables in conjuction
+with dlopen(3) at the moment.
+
+Fix --enable-glx-tls with clang. From FreeBSD.
+
+table_noop_array is only defined for shared-glapi.
+es1api and es2api are not going to be patched for NetBSD.
+
+--- src/mapi/entry_x86_tls.h.orig	2018-01-18 21:30:29.000000000 +0000
++++ src/mapi/entry_x86_tls.h
+@@ -56,10 +56,27 @@ __asm__(".balign 16\n"
+    ".balign 16\n"                \
+    func ":"
+ 
++#if defined(__NetBSD__) && defined(MAPI_MODE_GLAPI)
++extern const mapi_func table_noop_array[];
+ #define STUB_ASM_CODE(slot)      \
+    "call x86_current_tls\n\t"    \
+    "movl %gs:(%eax), %eax\n\t"   \
++   "testl %eax, %eax\n\t"        \
++   "je 1f\n\t"                   \
++   "jmp *(4 * " slot ")(%eax)\n\t" \
++   "1:\n\t"                      \
++   "call 2f\n"                   \
++   "2:\n\t"                      \
++   "popl %eax\n\t"               \
++   "addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %eax\n\t" \
++   "movl table_noop_array@GOT(%eax), %eax\n\t" \
+    "jmp *(4 * " slot ")(%eax)"
++#else
++#define STUB_ASM_CODE(slot)      \
++   "call x86_current_tls\n\t"    \
++   "movl %gs:(%eax), %eax\n\t"   \
++   "jmp *(4 * " slot ")(%eax)"
++#endif
+ 
+ #define MAPI_TMP_STUB_ASM_GCC
+ #include "mapi_tmp.h"
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_mapi_glapi_gen_gl__gentable.py b/MesaLib-dfbsd-meson/patches/patch-src_mapi_glapi_gen_gl__gentable.py
new file mode 100644
index 0000000000..4145993160
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_mapi_glapi_gen_gl__gentable.py
@@ -0,0 +1,15 @@
+$NetBSD: patch-src_mapi_glapi_gen_gl__gentable.py,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+FreeBSD support.
+
+--- src/mapi/glapi/gen/gl_gentable.py.orig	2017-02-13 11:55:49.000000000 +0000
++++ src/mapi/glapi/gen/gl_gentable.py
+@@ -44,7 +44,7 @@ header = """/* GLXEXT is the define used
+ #endif
+ 
+ #if (defined(GLXEXT) && defined(HAVE_BACKTRACE)) \\
+-	|| (!defined(GLXEXT) && defined(DEBUG) && !defined(__CYGWIN__) && !defined(__MINGW32__) && !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(__DragonFly__))
++	|| (!defined(GLXEXT) && defined(DEBUG) && !defined(__CYGWIN__) && !defined(__MINGW32__) && !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(__FreeBSD__) && !defined(__DragonFly__))
+ #define USE_BACKTRACE
+ #endif
+ 
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_mapi_u__current.c b/MesaLib-dfbsd-meson/patches/patch-src_mapi_u__current.c
new file mode 100644
index 0000000000..b4fcb36097
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_mapi_u__current.c
@@ -0,0 +1,31 @@
+$NetBSD: patch-src_mapi_u__current.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+NetBSD only supports zero-initialized initial-exec tls variables in conjuction
+with dlopen(3) at the moment.
+
+--- src/mapi/u_current.c.orig	2015-09-02 17:06:23.000000000 +0000
++++ src/mapi/u_current.c
+@@ -101,7 +101,11 @@ extern void (*__glapi_noop_table[])(void
+ 
+ __thread struct _glapi_table *u_current_table
+     __attribute__((tls_model("initial-exec")))
++#if defined(__NetBSD__)
++    = NULL; /* non-zero initializers not supported with dlopen */
++#else
+     = (struct _glapi_table *) table_noop_array;
++#endif
+ 
+ __thread void *u_current_context
+     __attribute__((tls_model("initial-exec")));
+@@ -283,7 +287,11 @@ struct _glapi_table *
+ u_current_get_table_internal(void)
+ {
+ #if defined(GLX_USE_TLS)
++#  if defined(__NetBSD__)
++   return (likely(u_current_table) ? u_current_table : (struct _glapi_table *) table_noop_array);
++#  else
+    return u_current_table;
++#  endif
+ #else
+    if (ThreadSafe)
+       return (struct _glapi_table *) tss_get(u_current_table_tsd);
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_mapi_u__current.h b/MesaLib-dfbsd-meson/patches/patch-src_mapi_u__current.h
new file mode 100644
index 0000000000..4e17195c30
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_mapi_u__current.h
@@ -0,0 +1,16 @@
+$NetBSD: patch-src_mapi_u__current.h,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+NetBSD only supports zero-initialized initial-exec tls variables in conjuction
+with dlopen(3) at the moment.
+
+--- src/mapi/u_current.h.orig	2015-09-02 17:06:23.000000000 +0000
++++ src/mapi/u_current.h
+@@ -68,7 +68,7 @@ u_current_get_context_internal(void);
+ static inline const struct _glapi_table *
+ u_current_get_table(void)
+ {
+-#ifdef GLX_USE_TLS
++#if defined(GLX_USE_TLS) && !defined(__NetBSD__)
+    return u_current_table;
+ #else
+    return (likely(u_current_table) ?
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_mesa_drivers_dri_i915_intel__screen.c b/MesaLib-dfbsd-meson/patches/patch-src_mesa_drivers_dri_i915_intel__screen.c
new file mode 100644
index 0000000000..50bd15a505
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_mesa_drivers_dri_i915_intel__screen.c
@@ -0,0 +1,44 @@
+$NetBSD: patch-src_mesa_drivers_dri_i915_intel__screen.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+Move sys/sysctl.h include because on NetBSD, sysctl.h includes sys/param.h,
+and sys/param.h defines a one argument ALIGN.  Allows mesa to redefine
+to a two argument ALIGN.
+
+Fix build on older NetBSD w/o _SC_PHYS_PAGES.
+
+--- src/mesa/drivers/dri/i915/intel_screen.c.orig	2017-11-10 23:18:56.000000000 +0000
++++ src/mesa/drivers/dri/i915/intel_screen.c
+@@ -28,6 +28,11 @@
+ #include <errno.h>
+ #include <time.h>
+ #include <unistd.h>
++
++#if defined(HAVE_SYS_SYSCTL_H) && defined(__NetBSD__)
++# include <sys/sysctl.h>
++#endif
++
+ #include "main/glheader.h"
+ #include "main/context.h"
+ #include "main/framebuffer.h"
+@@ -739,6 +744,13 @@ i915_query_renderer_integer(__DRIscreen
+       const unsigned gpu_mappable_megabytes =
+          (aper_size / (1024 * 1024)) * 3 / 4;
+ 
++#if defined(HW_PHYSMEM64) && defined(__NetBSD__)
++      int mib[2] = { CTL_HW, HW_PHYSMEM64 };
++      uint64_t system_memory_bytes;
++      size_t len = sizeof(system_memory_bytes);
++      if (sysctl(mib, 2, &system_memory_bytes, &len, NULL, 0) != 0)
++         return -1;
++#else
+       const long system_memory_pages = sysconf(_SC_PHYS_PAGES);
+       const long system_page_size = sysconf(_SC_PAGE_SIZE);
+ 
+@@ -747,6 +759,7 @@ i915_query_renderer_integer(__DRIscreen
+ 
+       const uint64_t system_memory_bytes = (uint64_t) system_memory_pages
+          * (uint64_t) system_page_size;
++#endif
+ 
+       const unsigned system_memory_megabytes =
+          (unsigned) (system_memory_bytes / (1024 * 1024));
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_mesa_drivers_dri_i965_brw__bufmgr.c b/MesaLib-dfbsd-meson/patches/patch-src_mesa_drivers_dri_i965_brw__bufmgr.c
new file mode 100644
index 0000000000..4ee4d0055c
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_mesa_drivers_dri_i965_brw__bufmgr.c
@@ -0,0 +1,31 @@
+$NetBSD$
+
+From Ravenports
+
+graphics/mesa-dri: Disable soft-spinning of all buffers (#169)
+
+* It is broken with current DragonFly 5.4 and 5.5 kernels
+
+* This patch is a revert of Mesa's
+commit: a363bb2cd0e2a141f2c60be005009703bffcbe4e
+"i965: Allocate VMA in userspace for full-PPGTT systems."
+Date: Tue Apr 10 01:18:25 2018 -0700
+
+Discussion in
+
+https://bugs.dragonflybsd.org/issues/3171
+
+--- src/mesa/drivers/dri/i965/brw_bufmgr.c.orig	2019-02-02 23:08:03.000000000 +0000
++++ src/mesa/drivers/dri/i965/brw_bufmgr.c
+@@ -1721,7 +1721,11 @@ brw_bufmgr_init(struct gen_device_info *
+       bufmgr->initial_kflags |= EXEC_OBJECT_SUPPORTS_48B_ADDRESS;
+ 
+       /* Allocate VMA in userspace if we have softpin and full PPGTT. */
++#if defined(REVERT_I965_SOFTPIN)
++      if (false && gem_param(fd, I915_PARAM_HAS_EXEC_SOFTPIN) > 0 &&
++#else
+       if (gem_param(fd, I915_PARAM_HAS_EXEC_SOFTPIN) > 0 &&
++#endif
+           gem_param(fd, I915_PARAM_HAS_ALIASING_PPGTT) > 1) {
+          bufmgr->initial_kflags |= EXEC_OBJECT_PINNED;
+ 
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_mesa_drivers_dri_i965_brw__performance__query.c b/MesaLib-dfbsd-meson/patches/patch-src_mesa_drivers_dri_i965_brw__performance__query.c
new file mode 100644
index 0000000000..53a741526f
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_mesa_drivers_dri_i965_brw__performance__query.c
@@ -0,0 +1,61 @@
+$NetBSD: patch-src_mesa_drivers_dri_i965_brw__performance__query.c,v 1.2 2018/10/16 15:21:20 jperkin Exp $
+
+--- src/mesa/drivers/dri/i965/brw_performance_query.c.orig	2019-02-21 18:11:53.000000000 +0000
++++ src/mesa/drivers/dri/i965/brw_performance_query.c
+@@ -1797,6 +1797,9 @@ enumerate_sysfs_metrics(struct brw_conte
+    DIR *metricsdir = NULL;
+    struct dirent *metric_entry;
+    int len;
++#ifdef __sun
++   struct stat s;
++#endif
+ 
+    len = snprintf(buf, sizeof(buf), "%s/metrics", brw->perfquery.sysfs_dev_dir);
+    if (len < 0 || len >= sizeof(buf)) {
+@@ -1813,10 +1816,19 @@ enumerate_sysfs_metrics(struct brw_conte
+    while ((metric_entry = readdir(metricsdir))) {
+       struct hash_entry *entry;
+ 
++#if defined(__sun)
++      stat(metric_entry->d_name, &s);
++      if ((s.st_mode != S_IFDIR &&
++           s.st_mode != S_IFLNK) ||
++          metric_entry->d_name[0] == '.')
++         continue;
++#else
++
+       if ((metric_entry->d_type != DT_DIR &&
+            metric_entry->d_type != DT_LNK) ||
+           metric_entry->d_name[0] == '.')
+          continue;
++#endif
+ 
+       DBG("metric set: %s\n", metric_entry->d_name);
+       entry = _mesa_hash_table_search(brw->perfquery.oa_metrics_table,
+@@ -2056,6 +2068,9 @@ get_sysfs_dev_dir(struct brw_context *br
+    DIR *drmdir;
+    struct dirent *drm_entry;
+    int len;
++#ifdef __sun
++   struct stat s;
++#endif
+ 
+    brw->perfquery.sysfs_dev_dir[0] = '\0';
+ 
+@@ -2087,9 +2102,16 @@ get_sysfs_dev_dir(struct brw_context *br
+    }
+ 
+    while ((drm_entry = readdir(drmdir))) {
++#if defined(__sun)
++      stat(drm_entry->d_name, &s);
++      if ((s.st_mode == S_IFDIR ||
++           s.st_mode == S_IFLNK) &&
++          strncmp(drm_entry->d_name, "card", 4) == 0)
++#else
+       if ((drm_entry->d_type == DT_DIR ||
+            drm_entry->d_type == DT_LNK) &&
+           strncmp(drm_entry->d_name, "card", 4) == 0)
++#endif
+       {
+          len = snprintf(brw->perfquery.sysfs_dev_dir,
+                         sizeof(brw->perfquery.sysfs_dev_dir),
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_mesa_drivers_dri_i965_intel__screen.c b/MesaLib-dfbsd-meson/patches/patch-src_mesa_drivers_dri_i965_intel__screen.c
new file mode 100644
index 0000000000..d8f7aff9f4
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_mesa_drivers_dri_i965_intel__screen.c
@@ -0,0 +1,81 @@
+$NetBSD: patch-src_mesa_drivers_dri_i965_intel__screen.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+Move sys/sysctl.h include because on NetBSD, sysctl.h includes sys/param.h,
+and sys/param.h defines a one argument ALIGN.  Allows mesa to redefine
+to a two argument ALIGN.
+
+Fix build on older NetBSD w/o _SC_PHYS_PAGES.
+
+From FreeBSD ports graphics/mesa-dri 18.1.4
+
+# Partial revert of the following commit because the feature check fails on 10.x
+# which disables HW accel on gen4+ (the new check occurs for gen6+ as well)
+
+From 088449487ebcb72561d73ffb91c96302583445a8 Mon Sep 17 00:00:00 2001
+Date: Wed, 22 Mar 2017 15:20:51 -0700
+Subject: i965: Require Kernel 3.6 for Gen4-5 platforms.
+
+We've already required Kernel 3.6 on Gen6+ since Mesa 9.2 (May 2013,
+commit 92d2f5acfadea672417b6785710c9e8b7f605e41).  It seems reasonable
+to require it for Gen4-5 as well, bumping the requirement from 2.6.39.
+
+This is necessary for glClientWaitSync with a timeout to work, which
+is a feature we expose on Gen4-5.  Without it, we would fall back to an
+infinite wait, which is pretty bad.
+
+See kernel commit 172cf15d18889313bf2c3bfb81fcea08369274ef in 3.6+.
+
+--- src/mesa/drivers/dri/i965/intel_screen.c.orig	2017-11-10 23:18:56.000000000 +0000
++++ src/mesa/drivers/dri/i965/intel_screen.c
+@@ -27,6 +27,11 @@
+ #include <errno.h>
+ #include <time.h>
+ #include <unistd.h>
++
++#if defined(HAVE_SYS_SYSCTL_H) && defined(__NetBSD__)
++# include <sys/sysctl.h>
++#endif
++
+ #include "main/context.h"
+ #include "main/framebuffer.h"
+ #include "main/renderbuffer.h"
+@@ -1470,6 +1475,13 @@ brw_query_renderer_integer(__DRIscreen *
+       const unsigned gpu_mappable_megabytes =
+          screen->aperture_threshold / (1024 * 1024);
+ 
++#if defined(HW_PHYSMEM64) && defined(__NetBSD__)
++      int mib[2] = { CTL_HW, HW_PHYSMEM64 };
++      const uint64_t system_memory_bytes;
++      size_t len = sizeof(system_memory_bytes);
++      if (sysctl(mib, 2, &system_memory_bytes, &len, NULL, 0) != 0)
++         return -1;
++#else
+       const long system_memory_pages = sysconf(_SC_PHYS_PAGES);
+       const long system_page_size = sysconf(_SC_PAGE_SIZE);
+ 
+@@ -1478,6 +1490,7 @@ brw_query_renderer_integer(__DRIscreen *
+ 
+       const uint64_t system_memory_bytes = (uint64_t) system_memory_pages
+          * (uint64_t) system_page_size;
++#endif
+ 
+       const unsigned system_memory_megabytes =
+          (unsigned) (system_memory_bytes / (1024 * 1024));
+@@ -1840,10 +1853,17 @@ intel_init_bufmgr(struct intel_screen *s
+       return false;
+    }
+ 
++#if defined(__FreeBSD__)
++   if (!intel_get_boolean(screen, I915_PARAM_HAS_RELAXED_DELTA)) {
++      fprintf(stderr, "[%s: %u] Kernel 2.6.39 required.\n", __func__, __LINE__);
++      return false;
++   }
++#else
+    if (!intel_get_boolean(screen, I915_PARAM_HAS_EXEC_NO_RELOC)) {
+       fprintf(stderr, "[%s: %u] Kernel 3.9 required.\n", __func__, __LINE__);
+       return false;
+    }
++#endif
+ 
+    return true;
+ }
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_mesa_drivers_dri_swrast_swrast.c b/MesaLib-dfbsd-meson/patches/patch-src_mesa_drivers_dri_swrast_swrast.c
new file mode 100644
index 0000000000..a355983d7b
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_mesa_drivers_dri_swrast_swrast.c
@@ -0,0 +1,19 @@
+$NetBSD: patch-src_mesa_drivers_dri_swrast_swrast.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+Fix build on older NetBSD w/o _SC_PHYS_PAGES.
+
+--- src/mesa/drivers/dri/swrast/swrast.c.orig	2017-10-19 12:23:53.000000000 +0000
++++ src/mesa/drivers/dri/swrast/swrast.c
+@@ -151,6 +151,12 @@ swrast_query_renderer_integer(__DRIscree
+         size_t len = sizeof(system_memory_bytes);
+         if (sysctl(mib, 2, &system_memory_bytes, &len, NULL, 0) != 0)
+             return -1;
++#elif defined(HW_PHYSMEM64) && defined(__NetBSD__)
++        int mib[2] = { CTL_HW, HW_PHYSMEM64 };
++        uint64_t system_memory_bytes;
++        size_t len = sizeof(system_memory_bytes);
++        if (sysctl(mib, 2, &system_memory_bytes, &len, NULL, 0) != 0)
++            return -1;
+ #elif defined(_SC_PHYS_PAGES) && defined(_SC_PAGE_SIZE)
+       /* XXX: Do we want to return the full amount of system memory ? */
+       const long system_memory_pages = sysconf(_SC_PHYS_PAGES);
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_mesa_drivers_x11_Makefile.am b/MesaLib-dfbsd-meson/patches/patch-src_mesa_drivers_x11_Makefile.am
new file mode 100644
index 0000000000..6e9b38bd41
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_mesa_drivers_x11_Makefile.am
@@ -0,0 +1,15 @@
+$NetBSD: patch-src_mesa_drivers_x11_Makefile.am,v 1.1 2019/01/19 21:54:03 tnn Exp $
+
+We don't need libmesautil.la here. Those symbols seem to already be
+included in libmesa.la.
+
+--- src/mesa/drivers/x11/Makefile.am.orig	2019-01-17 11:26:23.000000000 +0000
++++ src/mesa/drivers/x11/Makefile.am
+@@ -68,7 +68,6 @@ GL_PATCH = 0
+ lib@GL_LIB@_la_LIBADD = \
+ 	$(top_builddir)/src/mesa/libmesa.la \
+ 	$(top_builddir)/src/mapi/glapi/libglapi.la \
+-	$(top_builddir)/src/util/libmesautil.la \
+ 	$(SHARED_GLAPI_LIB) \
+ 	$(GL_LIB_DEPS)
+ 
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_mesa_main_context.c b/MesaLib-dfbsd-meson/patches/patch-src_mesa_main_context.c
new file mode 100644
index 0000000000..255f0c83ca
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_mesa_main_context.c
@@ -0,0 +1,57 @@
+$NetBSD: patch-src_mesa_main_context.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+* Fix exit time segfault of qt5 application with modular xorg
+
+Bug 82246 (atexit) - Libraries should not call atexit()
+
+https://bugs.freedesktop.org/show_bug.cgi?id=82246
+
+FreeBSD reported atexit bug for 10.6:
+https://bugs.freedesktop.org/show_bug.cgi?id=91869
+
+--- src/mesa/main/context.c.orig	2017-11-20 14:25:47.000000000 +0000
++++ src/mesa/main/context.c
+@@ -354,11 +354,23 @@ mtx_t OneTimeLock = _MTX_INITIALIZER_NP;
+  * Calls all the various one-time-fini functions in Mesa
+  */
+ 
++#if defined(HAVE_NOATEXIT)
++static GLbitfield api_init_mask = 0x0;
++static void __attribute__((__destructor__))
++#else
+ static void
++#endif
+ one_time_fini(void)
+ {
++#if defined(HAVE_NOATEXIT)
++   if (api_init_mask) {
++      _mesa_destroy_shader_compiler();
++      _mesa_locale_fini();
++   }
++#else
+    _mesa_destroy_shader_compiler();
+    _mesa_locale_fini();
++#endif
+ }
+ 
+ /**
+@@ -373,7 +385,9 @@ one_time_fini(void)
+ static void
+ one_time_init( struct gl_context *ctx )
+ {
++#if !defined(HAVE_NOATEXIT)
+    static GLbitfield api_init_mask = 0x0;
++#endif
+ 
+    mtx_lock(&OneTimeLock);
+ 
+@@ -398,7 +412,9 @@ one_time_init( struct gl_context *ctx )
+          _mesa_ubyte_to_float_color_tab[i] = (float) i / 255.0F;
+       }
+ 
++#if !defined(HAVE_NOATEXIT)
+       atexit(one_time_fini);
++#endif
+ 
+ #if defined(DEBUG)
+       if (MESA_VERBOSE != 0) {
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_mesa_main_extensions.c b/MesaLib-dfbsd-meson/patches/patch-src_mesa_main_extensions.c
new file mode 100644
index 0000000000..f95e76ba3f
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_mesa_main_extensions.c
@@ -0,0 +1,31 @@
+$NetBSD: patch-src_mesa_main_extensions.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+atexit() is not a good idea in shared libraries.
+
+FreeBSD reported atexit bug for 10.6:
+https://bugs.freedesktop.org/show_bug.cgi?id=91869
+
+--- src/mesa/main/extensions.c.orig	2018-02-09 02:17:59.000000000 +0000
++++ src/mesa/main/extensions.c
+@@ -203,7 +203,11 @@ set_extension(struct gl_extensions *ext,
+  * This string is allocated early during the first context creation by
+  * _mesa_one_time_init_extension_overrides.
+  */
++#if defined(HAVE_NOATEXIT)
++static void __attribute__((__destructor__))
++#else
+ static void
++#endif
+ free_unknown_extensions_strings(void)
+ {
+    free(unrecognized_extensions);
+@@ -293,7 +297,9 @@ _mesa_one_time_init_extension_overrides(
+       free(env);
+    } else {
+       unrecognized_extensions = env;
++#if !defined(HAVE_NOATEXIT)
+       atexit(free_unknown_extensions_strings);
++#endif
+    }
+ }
+ 
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_mesa_main_macros.h b/MesaLib-dfbsd-meson/patches/patch-src_mesa_main_macros.h
new file mode 100644
index 0000000000..4c2ab4bb54
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_mesa_main_macros.h
@@ -0,0 +1,18 @@
+$NetBSD: patch-src_mesa_main_macros.h,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+ALIGN is also defined in sys/param.h on NetBSD.
+
+Extend undefining ALIGN to all other OSes.
+
+--- src/mesa/main/macros.h.orig	2017-11-10 23:18:56.000000000 +0000
++++ src/mesa/main/macros.h
+@@ -677,6 +677,9 @@ minify(unsigned value, unsigned levels)
+  *
+  * \sa ROUND_DOWN_TO()
+  */
++#ifdef ALIGN
++#undef ALIGN
++#endif
+ static inline uintptr_t
+ ALIGN(uintptr_t value, int32_t alignment)
+ {
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_mesa_main_shader__query.cpp b/MesaLib-dfbsd-meson/patches/patch-src_mesa_main_shader__query.cpp
new file mode 100644
index 0000000000..5947beff03
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_mesa_main_shader__query.cpp
@@ -0,0 +1,58 @@
+$NetBSD: patch-src_mesa_main_shader__query.cpp,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+https://bugs.freedesktop.org/show_bug.cgi?id=66346
+
+From c4a1fec68d2508ff0c4fc2831465aca8c4ca783a Mon Sep 17 00:00:00 2001
+From: Julien Isorce <j.isorce%samsung.com@localhost>
+Date: Wed, 22 Apr 2015 23:04:42 +0100
+Subject: [PATCH 1/2] shader_query: convert GLhandleARB to uintptr_t before
+ troncating to GLuint
+
+Fixes compiler error on OSX as GLhandleARB is defined as void* if __APPLE__.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=66346
+---
+ src/mesa/main/shader_query.cpp | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- src/mesa/main/shader_query.cpp.orig	2016-11-10 22:05:17.000000000 +0000
++++ src/mesa/main/shader_query.cpp
+@@ -70,7 +70,12 @@ _mesa_BindAttribLocation(GLuint program,
+    GET_CURRENT_CONTEXT(ctx);
+ 
+    struct gl_shader_program *const shProg =
++#if defined(__APPLE__)
++      _mesa_lookup_shader_program_err(ctx, (GLuint)(uintptr_t)program, "glBindAttribLocation");
++#else
+       _mesa_lookup_shader_program_err(ctx, program, "glBindAttribLocation");
++#endif
++
+    if (!shProg)
+       return;
+ 
+@@ -114,7 +119,12 @@ _mesa_GetActiveAttrib(GLuint program, GL
+       return;
+    }
+ 
++#if defined(__APPLE__)
++   shProg = _mesa_lookup_shader_program_err(ctx, (GLuint)(uintptr_t)program, "glGetActiveAttrib");
++#else
+    shProg = _mesa_lookup_shader_program_err(ctx, program, "glGetActiveAttrib");
++#endif
++
+    if (!shProg)
+       return;
+ 
+@@ -159,7 +169,12 @@ _mesa_GetAttribLocation(GLuint program,
+ {
+    GET_CURRENT_CONTEXT(ctx);
+    struct gl_shader_program *const shProg =
++
++#if defined(__APPLE__)
++      _mesa_lookup_shader_program_err(ctx, (GLuint)(uintptr_t)program, "glGetAttribLocation");
++#else
+       _mesa_lookup_shader_program_err(ctx, program, "glGetAttribLocation");
++#endif
+ 
+    if (!shProg) {
+       return -1;
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_mesa_x86_common__x86.c b/MesaLib-dfbsd-meson/patches/patch-src_mesa_x86_common__x86.c
new file mode 100644
index 0000000000..d3f37abba4
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_mesa_x86_common__x86.c
@@ -0,0 +1,24 @@
+$NetBSD: patch-src_mesa_x86_common__x86.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+DragonFly support.
+
+--- src/mesa/x86/common_x86.c.orig	2017-05-10 14:13:58.000000000 +0000
++++ src/mesa/x86/common_x86.c
+@@ -35,7 +35,7 @@
+  */
+ 
+ /* XXX these includes should probably go into imports.h or glheader.h */
+-#if defined(USE_SSE_ASM) && defined(__FreeBSD__)
++#if defined(USE_SSE_ASM) && (defined(__FreeBSD__) || defined(__DragonFly__))
+ #include <sys/types.h>
+ #include <sys/sysctl.h>
+ #endif
+@@ -125,7 +125,7 @@ static LONG WINAPI ExceptionFilter(LPEXC
+  */
+ void _mesa_check_os_sse_support( void )
+ {
+-#if defined(__FreeBSD__)
++#if defined(__FreeBSD__) || defined(__DragonFly__)
+    {
+       int ret, enabled;
+       unsigned int len;
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_util_Makefile.am b/MesaLib-dfbsd-meson/patches/patch-src_util_Makefile.am
new file mode 100644
index 0000000000..48facf1ec6
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_util_Makefile.am
@@ -0,0 +1,15 @@
+$NetBSD: patch-src_util_Makefile.am,v 1.1 2019/01/10 22:30:11 tnn Exp $
+
+handled with CONF_FILES
+
+--- src/util/Makefile.am.orig	2018-12-11 21:13:57.000000000 +0000
++++ src/util/Makefile.am
+@@ -75,7 +75,7 @@ libxmlconfig_la_CFLAGS = \
+ libxmlconfig_la_LIBADD = $(EXPAT_LIBS) -lm
+ 
+ drircdir = $(datadir)/drirc.d
+-drirc_DATA = 00-mesa-defaults.conf
++drirc_DATA = # 00-mesa-defaults.conf
+ 
+ u_atomic_test_LDADD = libmesautil.la
+ roundeven_test_LDADD = -lm
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_util_build__id.c b/MesaLib-dfbsd-meson/patches/patch-src_util_build__id.c
new file mode 100644
index 0000000000..501bb73520
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_util_build__id.c
@@ -0,0 +1,26 @@
+$NetBSD: patch-src_util_build__id.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+Patch combining DragonFly dports and FreeBSD ports graphics/mesa-dri 18.2.0
+
+--- src/util/build_id.c.orig	2018-09-07 21:18:07.000000000 +0000
++++ src/util/build_id.c
+@@ -35,7 +35,19 @@
+ #endif
+ 
+ #ifndef ElfW
++#if defined(__DragonFly__)
++#ifdef __LP64__
++#define ElfW(type) Elf64_##type
++#else
++#define ElfW(type) Elf32_##type
++#endif /* __LP64__ */
++#else
+ #define ElfW(type) Elf_##type
++#endif /* __DragonFly__ */
++#endif
++
++#if defined(__FreeBSD__) && __FreeBSD__ < 12
++typedef Elf_Note Elf_Nhdr;
+ #endif
+ 
+ struct build_id_note {
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_util_disk__cache.c b/MesaLib-dfbsd-meson/patches/patch-src_util_disk__cache.c
new file mode 100644
index 0000000000..8fd302e35c
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_util_disk__cache.c
@@ -0,0 +1,29 @@
+$NetBSD: patch-src_util_disk__cache.c,v 1.1 2018/10/16 15:21:20 jperkin Exp $
+
+Use fcntl() on SunOS.
+
+--- src/util/disk_cache.c.orig	2018-09-07 21:18:07.000000000 +0000
++++ src/util/disk_cache.c
+@@ -857,6 +857,9 @@ cache_put(void *job, int thread_index)
+    unsigned i = 0;
+    char *filename = NULL, *filename_tmp = NULL;
+    struct disk_cache_put_job *dc_job = (struct disk_cache_put_job *) job;
++#ifdef __sun
++   struct flock lock = {0};
++#endif
+ 
+    filename = get_cache_file(dc_job->cache, dc_job->key);
+    if (filename == NULL)
+@@ -895,7 +898,12 @@ cache_put(void *job, int thread_index)
+     * open with the flock held. So just let that file be responsible
+     * for writing the file.
+     */
++#ifdef __sun
++   lock.l_type = F_WRLCK;
++   err = fcntl(fd, F_SETLK, &lock);
++#else
+    err = flock(fd, LOCK_EX | LOCK_NB);
++#endif
+    if (err == -1)
+       goto done;
+ 
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_util_futex.h b/MesaLib-dfbsd-meson/patches/patch-src_util_futex.h
new file mode 100644
index 0000000000..5120686726
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_util_futex.h
@@ -0,0 +1,53 @@
+$NetBSD: patch-src_util_futex.h,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+Implement futex_wake() and futex_wait() via _umtx_op()
+
+FreeBSD Bugzilla - Bug 225415: graphics/mesa-dri: update to 18.0.0
+https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=225415
+
+--- src/util/futex.h.orig	2018-02-09 02:18:00.000000000 +0000
++++ src/util/futex.h
+@@ -29,10 +29,35 @@
+ #include <limits.h>
+ #include <stdint.h>
+ #include <unistd.h>
++#if defined(__FreeBSD__)
++#include <errno.h>
++# if __FreeBSD__ < 11
++#  include <machine/atomic.h>
++# endif
++#include <sys/umtx.h>
++#else
+ #include <linux/futex.h>
+ #include <sys/syscall.h>
++#endif
+ #include <sys/time.h>
+ 
++#if defined(__FreeBSD__)
++static inline int futex_wake(uint32_t *addr, int count)
++{
++   return _umtx_op(addr, UMTX_OP_WAKE, (uint32_t)count, NULL, NULL) == -1 ? errno : 0;
++}
++
++static inline int futex_wait(uint32_t *addr, int32_t value, struct timespec *timeout)
++{
++   void *uaddr = NULL, *uaddr2 = NULL;
++   if (timeout != NULL) {
++      const struct _umtx_time tmo = { ._timeout = *timeout, ._flags = UMTX_ABSTIME, ._clockid = CLOCK_MONOTONIC };
++      uaddr = (void *)(uintptr_t)sizeof(tmo);
++      uaddr2 = (void *)&tmo;
++   }
++   return _umtx_op(addr, UMTX_OP_WAIT_UINT, (uint32_t)value, uaddr, uaddr2) == -1 ? errno : 0;
++}
++#else
+ static inline long sys_futex(void *addr1, int op, int val1, const struct timespec *timeout, void *addr2, int val3)
+ {
+    return syscall(SYS_futex, addr1, op, val1, timeout, addr2, val3);
+@@ -50,6 +75,7 @@ static inline int futex_wait(uint32_t *a
+    return sys_futex(addr, FUTEX_WAIT_BITSET, value, timeout, NULL,
+                     FUTEX_BITSET_MATCH_ANY);
+ }
++#endif
+ 
+ #endif
+ 
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_util_os__time.c b/MesaLib-dfbsd-meson/patches/patch-src_util_os__time.c
new file mode 100644
index 0000000000..24699ad3d3
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_util_os__time.c
@@ -0,0 +1,18 @@
+$NetBSD$
+
+- Use monotonic clock for timeouts
+
+FreeBSD Bugzilla - Bug 225415  graphics/mesa-dri: update to 18.0.0
+https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=225415
+
+--- src/util/os_time.c.orig	2018-05-11 23:27:04.000000000 +0000
++++ src/util/os_time.c
+@@ -95,7 +95,7 @@ os_time_get_nano(void)
+ void
+ os_time_sleep(int64_t usecs)
+ {
+-#if defined(PIPE_OS_LINUX)
++#if (defined(HAVE_CLOCK_NANOSLEEP) && (defined(__FreeBSD__) || defined(__DragonFly__))) || defined(PIPE_OS_LINUX)
+    struct timespec time;
+    time.tv_sec = usecs / 1000000;
+    time.tv_nsec = (usecs % 1000000) * 1000;
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_util_ralloc.c b/MesaLib-dfbsd-meson/patches/patch-src_util_ralloc.c
new file mode 100644
index 0000000000..46f1e97651
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_util_ralloc.c
@@ -0,0 +1,25 @@
+$NetBSD: patch-src_util_ralloc.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+FreeBSD reported atexit bug for 10.6:
+https://bugs.freedesktop.org/show_bug.cgi?id=91869
+
+* Fix exit time segfault of qt5 application with modular xorg
+* Provide compat strnlen for older Darwin.
+
+--- src/util/ralloc.c.orig	2017-05-10 14:13:58.000000000 +0000
++++ src/util/ralloc.c
+@@ -368,7 +368,14 @@ ralloc_strndup(const void *ctx, const ch
+    if (unlikely(str == NULL))
+       return NULL;
+ 
++#if (defined(__APPLE__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0 < 1070)
++   for (n = 0; n < max; n++, str++) {
++     if (!*str)
++       break;
++   }
++#else
+    n = strnlen(str, max);
++#endif
+    ptr = ralloc_array(ctx, char, n + 1);
+    memcpy(ptr, str, n);
+    ptr[n] = '\0';
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_util_strndup.h b/MesaLib-dfbsd-meson/patches/patch-src_util_strndup.h
new file mode 100644
index 0000000000..bca6f2d575
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_util_strndup.h
@@ -0,0 +1,15 @@
+$NetBSD: patch-src_util_strndup.h,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+Provide compat strndup for older Darwin.
+
+--- src/util/strndup.h.orig	2017-05-10 14:13:58.000000000 +0000
++++ src/util/strndup.h
+@@ -24,7 +24,7 @@
+ #ifndef STRNDUP_H
+ #define STRNDUP_H
+ 
+-#if defined(_WIN32)
++#if defined(_WIN32) || (defined(__APPLE__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0 < 1070)
+ 
+ #include <stdlib.h> // size_t
+ #include <string.h>
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_util_u__atomic.h b/MesaLib-dfbsd-meson/patches/patch-src_util_u__atomic.h
new file mode 100644
index 0000000000..b81aef1e77
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_util_u__atomic.h
@@ -0,0 +1,15 @@
+$NetBSD: patch-src_util_u__atomic.h,v 1.2 2018/10/16 15:21:20 jperkin Exp $
+
+Fix SunOS atomic macros.
+
+--- src/util/u_atomic.h.orig	2018-09-07 21:18:07.000000000 +0000
++++ src/util/u_atomic.h
+@@ -20,7 +20,7 @@
+  * locally coded assembly, compiler intrinsic or ultimately a
+  * mutex-based implementation.
+  */
+-#if defined(__sun)
++#if defined(__sun) && !defined(__GNUC__)
+ #define PIPE_ATOMIC_OS_SOLARIS
+ #elif defined(_MSC_VER)
+ #define PIPE_ATOMIC_MSVC_INTRINSIC
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_util_u__queue.c b/MesaLib-dfbsd-meson/patches/patch-src_util_u__queue.c
new file mode 100644
index 0000000000..ccba44b511
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_util_u__queue.c
@@ -0,0 +1,70 @@
+$NetBSD: patch-src_util_u__queue.c,v 1.2 2019/01/10 22:30:11 tnn Exp $
+
+atexit() is not a good idea in shared libraries.
+
+FreeBSD reported atexit bug for 10.6:
+https://bugs.freedesktop.org/show_bug.cgi?id=91869
+
+--- src/util/u_queue.c.orig	2018-12-11 21:13:57.000000000 +0000
++++ src/util/u_queue.c
+@@ -46,11 +46,22 @@ static once_flag atexit_once_flag = ONCE
+ static struct list_head queue_list;
+ static mtx_t exit_mutex = _MTX_INITIALIZER_NP;
+ 
++#if defined(HAVE_NOATEXIT)
++static int global_init_called = 0;
++
++static void __attribute__((__destructor__))
++#else
+ static void
++#endif
+ atexit_handler(void)
+ {
+    struct util_queue *iter;
+ 
++#if defined(HAVE_NOATEXIT)
++   if (!global_init_called)
++      return;
++#endif
++
+    mtx_lock(&exit_mutex);
+    /* Wait for all queues to assert idle. */
+    LIST_FOR_EACH_ENTRY(iter, &queue_list, head) {
+@@ -63,7 +74,11 @@ static void
+ global_init(void)
+ {
+    LIST_INITHEAD(&queue_list);
++#if defined(HAVE_NOATEXIT)
++   global_init_called = 1;
++#else
+    atexit(atexit_handler);
++#endif
+ }
+ 
+ static void
+@@ -244,12 +259,25 @@ util_queue_thread_func(void *input)
+       /* Don't inherit the thread affinity from the parent thread.
+        * Set the full mask.
+        */
++#if defined(__NetBSD__)
++      cpuset_t *cpuset;
++      cpuset = cpuset_create();
++      if (cpuset != NULL) {
++         cpuset_zero(cpuset);
++         for (unsigned i = 0; i < cpuset_size(cpuset); i++)
++            cpuset_set(i, cpuset);
++
++         pthread_setaffinity_np(pthread_self(), cpuset_size(cpuset), cpuset);
++         cpuset_destroy(cpuset);
++      }
++#else
+       cpu_set_t cpuset;
+       CPU_ZERO(&cpuset);
+       for (unsigned i = 0; i < CPU_SETSIZE; i++)
+          CPU_SET(i, &cpuset);
+ 
+       pthread_setaffinity_np(pthread_self(), sizeof(cpuset), &cpuset);
++#endif
+    }
+ #endif
+ 
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_util_u__thread.h b/MesaLib-dfbsd-meson/patches/patch-src_util_u__thread.h
new file mode 100644
index 0000000000..115954f246
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_util_u__thread.h
@@ -0,0 +1,115 @@
+$NetBSD: patch-src_util_u__thread.h,v 1.2 2019/01/20 09:50:28 tnn Exp $
+
+handle NetBSD-style pthread_setaffinity_np(3)
+
+From FreeBSD ports / DragonFly dports
+
+- Implement setting thread name
+- Use monotonic clock for timeouts
+
+https://reviews.freebsd.org/D17872
+
+--- src/util/u_thread.h.orig	2018-12-11 21:13:57.000000000 +0000
++++ src/util/u_thread.h
+@@ -34,6 +34,13 @@
+ 
+ #ifdef HAVE_PTHREAD
+ #include <signal.h>
++#if defined(__DragonFly__) || defined(__FreeBSD__)
++#include <pthread_np.h>
++# if !defined(__DragonFly__)
++#  define cpu_set_t cpuset_t
++# endif
++#undef ALIGN /* Avoid conflict on FreeBSD in main/macros.h */
++#endif
+ #endif
+ 
+ static inline thrd_t u_thread_create(int (*routine)(void *), void *param)
+@@ -64,6 +71,8 @@ static inline void u_thread_setname( con
+       (__GLIBC__ >= 3 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 12)) && \
+       defined(__linux__)
+    pthread_setname_np(pthread_self(), name);
++#  elif defined(__DragonFly__) || defined(__FreeBSD__)
++   pthread_set_name_np(pthread_self(), name);
+ #  endif
+ #endif
+    (void)name;
+@@ -83,6 +92,17 @@ static inline void
+ util_pin_thread_to_L3(thrd_t thread, unsigned L3_index, unsigned cores_per_L3)
+ {
+ #if defined(HAVE_PTHREAD_SETAFFINITY)
++#if defined(__NetBSD__)
++   cpuset_t *cpuset;
++   cpuset = cpuset_create();
++   if (cpuset == NULL)
++      return;
++   cpuset_zero(cpuset);
++   for (unsigned i = 0; i < cores_per_L3; i++)
++      cpuset_set(L3_index * cores_per_L3 + i, cpuset);
++   pthread_setaffinity_np(thread, cpuset_size(cpuset), cpuset);
++   cpuset_destroy(cpuset);
++#else
+    cpu_set_t cpuset;
+ 
+    CPU_ZERO(&cpuset);
+@@ -90,6 +110,7 @@ util_pin_thread_to_L3(thrd_t thread, uns
+       CPU_SET(L3_index * cores_per_L3 + i, &cpuset);
+    pthread_setaffinity_np(thread, sizeof(cpuset), &cpuset);
+ #endif
++#endif
+ }
+ 
+ /**
+@@ -103,6 +124,35 @@ static inline int
+ util_get_L3_for_pinned_thread(thrd_t thread, unsigned cores_per_L3)
+ {
+ #if defined(HAVE_PTHREAD_SETAFFINITY)
++#if defined(__NetBSD__)
++   cpuset_t *cpuset;
++
++   cpuset = cpuset_create();
++   if (cpuset == NULL)
++      return -1;
++
++   if (pthread_getaffinity_np(thread, cpuset_size(cpuset), cpuset) == 0) {
++      int L3_index = -1;
++
++      for (unsigned i = 0; i < cpuset_size(cpuset); i++) {
++         if (cpuset_isset(i, cpuset)) {
++            int x = i / cores_per_L3;
++
++            if (L3_index != x) {
++               if (L3_index == -1)
++                  L3_index = x;
++               else {
++                  cpuset_destroy(cpuset);
++                  return -1; /* multiple L3s are set */
++               }
++            }
++         }
++      }
++      cpuset_destroy(cpuset);
++      return L3_index;
++   }
++   cpuset_destroy(cpuset);
++#else
+    cpu_set_t cpuset;
+ 
+    if (pthread_getaffinity_np(thread, sizeof(cpuset), &cpuset) == 0) {
+@@ -123,6 +173,7 @@ util_get_L3_for_pinned_thread(thrd_t thr
+       return L3_index;
+    }
+ #endif
++#endif
+    return -1;
+ }
+ 
+@@ -134,7 +185,7 @@ util_get_L3_for_pinned_thread(thrd_t thr
+ static inline int64_t
+ u_thread_get_time_nano(thrd_t thread)
+ {
+-#if defined(__linux__) && defined(HAVE_PTHREAD)
++#if (defined(__linux__) || defined(__DragonFly__) || defined(__FreeBSD__)) && defined(HAVE_PTHREAD)
+    struct timespec ts;
+    clockid_t cid;
+ 
diff --git a/MesaLib-dfbsd-meson/patches/patch-src_util_xmlconfig.c b/MesaLib-dfbsd-meson/patches/patch-src_util_xmlconfig.c
new file mode 100644
index 0000000000..b429692fea
--- /dev/null
+++ b/MesaLib-dfbsd-meson/patches/patch-src_util_xmlconfig.c
@@ -0,0 +1,31 @@
+$NetBSD: patch-src_util_xmlconfig.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $
+
+PR pkg/50202.
+Provide compat strndup for older Darwin.
+
+--- src/util/xmlconfig.c.orig	2018-09-07 21:18:07.000000000 +0000
++++ src/util/xmlconfig.c
+@@ -39,6 +39,23 @@
+ #include "xmlconfig.h"
+ #include "u_process.h"
+ 
++#if (defined(__APPLE__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0 < 1070)
++static char *
++strndup(const char *str, size_t n)
++{
++    size_t len;
++    char *copy;
++
++    for (len = 0; len < n && str[len]; len++)
++        continue;
++
++    if ((copy = (char *)malloc(len + 1)) == NULL)
++        return (NULL);
++    memcpy(copy, str, len);
++    copy[len] = '\0';
++    return (copy);
++}
++#endif
+ 
+ /** \brief Find an option in an option cache with the name as key */
+ static uint32_t


Home | Main Index | Thread Index | Old Index