MesaLib-dfbsd: Import MesaLib mesa3d git as wip/MesaLib-dfbsd

mesa3d git through
2019-02-02	wsi/display: add comment
COMMIT_ID=	808bf59cac793bc6c7de04eee4e23e6921a8a7b5
Includes fixes for netbsd radeonsi.
This commit is contained in:
David Shao 2019-02-23 20:19:10 -08:00
parent a54df52179
commit 75af6f1003
80 changed files with 3495 additions and 0 deletions

View File

@ -20,6 +20,7 @@ SUBDIR+= Geomyidae-git
SUBDIR+= GoogleEarth
SUBDIR+= I2util
SUBDIR+= LuaJIT21
SUBDIR+= MesaLib-dfbsd
SUBDIR+= MoleInvasion
SUBDIR+= OpenGLUT
SUBDIR+= OpenIPMI

5
MesaLib-dfbsd/DESCR Normal file
View File

@ -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.

131
MesaLib-dfbsd/Makefile Normal file
View File

@ -0,0 +1,131 @@
# $NetBSD: Makefile,v 1.18 2019/02/22 15:40:35 tnn Exp $
# 2019-02-02 wsi/display: add comment
COMMIT_ID= 808bf59cac793bc6c7de04eee4e23e6921a8a7b5
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
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_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
# 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
.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
.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"

104
MesaLib-dfbsd/PLIST Normal file
View File

@ -0,0 +1,104 @@
@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
@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
${PLIST.egl}lib/libEGL.la
lib/libGL.la
${PLIST.glesv1}lib/libGLESv1_CM.la
${PLIST.glesv2}lib/libGLESv2.la
${PLIST.osmesa}lib/libOSMesa.la
${PLIST.xvmc}${PLIST.nouveau}lib/libXvMCnouveau.so
${PLIST.xvmc}${PLIST.nouveau}lib/libXvMCnouveau.so.1
${PLIST.xvmc}${PLIST.nouveau}lib/libXvMCnouveau.so.1.0
${PLIST.xvmc}${PLIST.nouveau}lib/libXvMCnouveau.so.1.0.0
${PLIST.xvmc}${PLIST.r600}lib/libXvMCr600.so
${PLIST.xvmc}${PLIST.r600}lib/libXvMCr600.so.1
${PLIST.xvmc}${PLIST.r600}lib/libXvMCr600.so.1.0
${PLIST.xvmc}${PLIST.r600}lib/libXvMCr600.so.1.0.0
${PLIST.gbm}lib/libgbm.la
lib/libglapi.la
${PLIST.wayland}lib/libwayland-egl.la
${PLIST.xatracker}lib/libxatracker.la
${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/examples/mesa/00-mesa-defaults.conf

8
MesaLib-dfbsd/TODO Normal file
View File

@ -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.

View File

@ -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

87
MesaLib-dfbsd/builtin.mk Normal file
View File

@ -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

76
MesaLib-dfbsd/distinfo Normal file
View File

@ -0,0 +1,76 @@
$NetBSD: distinfo,v 1.16 2019/02/22 15:40:35 tnn Exp $
SHA1 (mesa-808bf59cac793bc6c7de04eee4e23e6921a8a7b5.tar.xz) = 781799c44fbc7e3d486a584c0da94015fbd84491
RMD160 (mesa-808bf59cac793bc6c7de04eee4e23e6921a8a7b5.tar.xz) = 38d2cccc855cf1dfc8b712624d04cefa63b08757
SHA512 (mesa-808bf59cac793bc6c7de04eee4e23e6921a8a7b5.tar.xz) = 1de951823e8b355370e705b79ec10ac9d66d12f6f16b205dd8b774f393f22c470435de6b36047b11381bc4cc654eb9b7bc7d6c30e60652a3d3e41e593398834b
Size (mesa-808bf59cac793bc6c7de04eee4e23e6921a8a7b5.tar.xz) = 10222844 bytes
SHA1 (patch-configure.ac) = ba9ded10c5a87275db29c9d008d917041b2e0c78
SHA1 (patch-include_GL_internal_dri__interface.h) = 146d2f3f3e50fc1947e8941301d9cf9d90a035e2
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_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) = a154669340b36125561749ca305ba47a5e1bf110
SHA1 (patch-src_gallium_drivers_radeonsi_si__pipe.c) = 24a37091733e938199dfefe98d0f21796162a7ea
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) = 69ded51aa20ed3a8a2b1515b90eceac1fadf1db4
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__performance__query.c) = 1250b3477c4b8013b928772b7dc7f24e8c4b67aa
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

34
MesaLib-dfbsd/dri.mk Normal file
View File

@ -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

324
MesaLib-dfbsd/options.mk Normal file
View File

@ -0,0 +1,324 @@
# $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+= noatexit
PKG_SUPPORTED_OPTIONS+= vulkan
PKG_SUPPORTED_OPTIONS+= no_cs_queue
PKG_SUPPORTED_OPTIONS+= revert_threaded_context
PKG_SUPPORTED_OPTIONS+= revert_copy_clear
# 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
.include "../../mk/bsd.options.mk"
# gallium
PLIST_VARS+= freedreno i915 i965 nouveau r300 r600 radeonsi \
swrast svga vc4 virgl vulkan
# 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
.if ${OPSYS} != "Darwin"
CONFIGURE_ARGS+= --enable-egl
CONFIGURE_ARGS+= --enable-gbm
PLIST.egl= yes
PLIST.gbm= yes
.else
CONFIGURE_ARGS+= --disable-egl
CONFIGURE_ARGS+= --disable-gbm
.endif
.if !empty(PKG_OPTIONS:Mosmesa)
CONFIGURE_ARGS+= --enable-osmesa
PLIST.osmesa= yes
.endif
.if !empty(PKG_OPTIONS:Mglesv1)
CONFIGURE_ARGS+= --enable-gles1
PLIST.glesv1= yes
.else
CONFIGURE_ARGS+= --disable-gles1
.endif
.if !empty(PKG_OPTIONS:Mglesv2)
CONFIGURE_ARGS+= --enable-gles2
PLIST.glesv2= yes
.else
CONFIGURE_ARGS+= --disable-gles2
.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
PLIST.swrast_dri= yes
DRI_DRIVERS+= swrast
.if ${OPSYS} != "Darwin"
PLIST.swrast= yes
GALLIUM_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
PLIST.i915= yes
# GALLIUM_DRIVERS+= i915
DRI_DRIVERS+= i915
PLIST.i965= yes
DRI_DRIVERS+= i965
.endif
# Vulkan support
.if !empty(PKG_OPTIONS:Mvulkan)
VULKAN_DRIVERS+= intel
VULKAN_DRIVERS+= radeon
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
# 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
#.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
.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"
.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"
.endif
.endif # vdpau
# XA is useful for accelerating xf86-video-vmware
.if !empty(PKG_OPTIONS:Mxa)
CONFIGURE_ARGS+= --enable-xa
PLIST.xatracker= yes
.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
.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
.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,}
.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
# 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
.endif
.if !empty(PKG_OPTIONS:Mxvmc)
.include "../../x11/libXvMC/buildlink3.mk"
PLIST.xvmc= yes
.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

View File

@ -0,0 +1,127 @@
$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-01-17 11:26:22.000000000 +0000
+++ configure.ac
@@ -726,7 +726,7 @@ dnl
dnl OSX linker does not support build-id
dnl
case "$host_os" in
-darwin*)
+darwin* | solaris*)
LD_BUILD_ID=""
;;
*)
@@ -931,7 +931,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])
@@ -941,6 +941,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"
@@ -966,7 +969,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"
;;
* )
@@ -982,8 +985,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;
@@ -995,7 +1002,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],
@@ -1278,7 +1288,7 @@ fi
AC_SUBST(LIBSENSORS_LIBS)
case "$host_os" in
-linux*)
+linux* | freebsd* | dragonfly*)
dri3_default=yes
;;
*)
@@ -1908,7 +1918,7 @@ if test x"$enable_dri3" = xyes; then
dri3_modifier_modules="xcb-dri3 >= $XCBDRI3_MODIFIERS_REQUIRED xcb-present >= $XCBPRESENT_MODIFIERS_REQUIRED"
PKG_CHECK_MODULES([XCB_DRI3_MODIFIERS], [$dri3_modifier_modules], [have_dri3_modifiers=yes], [have_dri3_modifiers=no])
- if test "x$have_dri3_modifiers" == xyes; then
+ if test "x$have_dri3_modifiers" = xyes; then
DEFINES="$DEFINES -DHAVE_DRI3_MODIFIERS"
fi
fi
@@ -2505,8 +2515,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)
@@ -2941,7 +2949,7 @@ if test "x$enable_llvm" = xyes; then
dnl the LLVM library propagated in the Libs.private of the respective .pc
dnl file which ensures complete dependency information when statically
dnl linking.
- if test "x$enable_glx" == xgallium-xlib; then
+ if test "x$enable_glx" = xgallium-xlib; then
GL_PC_LIB_PRIV="$GL_PC_LIB_PRIV $LLVM_LIBS"
fi
if test "x$enable_gallium_osmesa" = xyes; then

View File

@ -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 2017-11-20 14:25:47.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 <stdint.h>

View File

@ -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);

View File

@ -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)
{

View File

@ -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

View File

@ -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)

View File

@ -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();

View File

@ -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;

View File

@ -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)

View File

@ -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;

View File

@ -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;

View File

@ -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;
}

View File

@ -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"

View File

@ -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);

View File

@ -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;

View File

@ -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);

View File

@ -0,0 +1,181 @@
$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-02 23:08:03.000000000 +0000
+++ src/gallium/drivers/radeonsi/si_compute_blit.c
@@ -33,10 +33,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;
}
@@ -179,6 +186,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;
@@ -257,6 +310,7 @@ void si_clear_buffer(struct si_context *
offset += aligned_size;
size -= aligned_size;
}
+#endif
/* Handle non-dword alignment. */
if (size) {
@@ -274,6 +328,58 @@ 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
enum si_coherency coher;
if (dst->flags & SI_RESOURCE_FLAG_SO_FILLED_SIZE)
@@ -283,6 +389,7 @@ static void si_pipe_clear_buffer(struct
si_clear_buffer((struct si_context*)ctx, dst, offset, size, (uint32_t*)clear_value,
clear_value_size, coher);
+#endif
}
void si_copy_buffer(struct si_context *sctx,
@@ -295,6 +402,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 &&
@@ -307,6 +425,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,

View File

@ -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-02 23:08:03.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)
@@ -373,7 +375,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;
@@ -388,7 +394,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->b.emit_string_marker = si_emit_string_marker;
sctx->b.set_debug_callback = si_set_debug_callback;
@@ -622,6 +632,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)
{
@@ -652,6 +663,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
@@ -847,7 +859,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);
@@ -1116,7 +1132,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);

View File

@ -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);

View File

@ -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"

View File

@ -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

View File

@ -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();

View File

@ -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 {};
}

View File

@ -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)... };
}

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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

View File

@ -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)

View File

@ -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);

View File

@ -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

View File

@ -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]));

View File

@ -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.

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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

View File

@ -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__)
+ 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.

View File

@ -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>

View File

@ -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

View File

@ -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"

View File

@ -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

View File

@ -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"

View File

@ -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

View File

@ -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);

View File

@ -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) ?

View File

@ -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));

View File

@ -0,0 +1,72 @@
$NetBSD: patch-src_mesa_drivers_dri_i965_brw__performance__query.c,v 1.2 2018/10/16 15:21:20 jperkin Exp $
Prevents libdrm i915_drm.h header from being used.
libdrm 2.4.88 does not have certain symbols defined in its i915_drm.h.
--- src/mesa/drivers/dri/i965/brw_performance_query.c.orig 2018-09-07 21:18:07.000000000 +0000
+++ src/mesa/drivers/dri/i965/brw_performance_query.c
@@ -56,7 +56,7 @@
#include <sys/ioctl.h>
#include <xf86drm.h>
-#include <i915_drm.h>
+#include "drm-uapi/i915_drm.h"
#include "main/hash.h"
#include "main/macros.h"
@@ -1796,6 +1796,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)) {
@@ -1812,10 +1815,18 @@ 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,
@@ -2057,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';
@@ -2088,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),

View File

@ -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;
}

View File

@ -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);

View File

@ -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)

View File

@ -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) {

View File

@ -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
}
}

View File

@ -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)
{

View File

@ -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>
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;

View File

@ -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;

View File

@ -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

View File

@ -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 {

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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';

View File

@ -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>

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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