From 75af6f100393720ca92848ea2c9bfb80cb6b0d6b Mon Sep 17 00:00:00 2001 From: David Shao Date: Sat, 23 Feb 2019 20:19:10 -0800 Subject: [PATCH] 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. --- Makefile | 1 + MesaLib-dfbsd/DESCR | 5 + MesaLib-dfbsd/Makefile | 131 +++++++ MesaLib-dfbsd/PLIST | 104 ++++++ MesaLib-dfbsd/TODO | 8 + MesaLib-dfbsd/buildlink3.mk | 50 +++ MesaLib-dfbsd/builtin.mk | 87 +++++ MesaLib-dfbsd/distinfo | 76 ++++ MesaLib-dfbsd/dri.mk | 34 ++ MesaLib-dfbsd/options.mk | 324 ++++++++++++++++++ MesaLib-dfbsd/patches/patch-configure.ac | 127 +++++++ ...patch-include_GL_internal_dri__interface.h | 27 ++ .../patches/patch-src_amd_common_ac__debug.c | 19 + .../patch-src_amd_vulkan_radv__device.c | 23 ++ ...md_vulkan_winsys_amdgpu_radv__amdgpu__cs.c | 19 + ...patch-src_compiler_builtin__type__macros.h | 25 ++ ...src_compiler_glsl_glsl__parser__extras.cpp | 18 + ...patch-src_egl_drivers_dri2_platform__drm.c | 18 + ...patch-src_egl_drivers_dri2_platform__x11.c | 60 ++++ .../patches/patch-src_egl_main_eglglobals.c | 53 +++ ...gallium_auxiliary_drivers_trace_tr__dump.c | 50 +++ ..._auxiliary_pipe-loader_pipe__loader__drm.c | 127 +++++++ ..._gallium_auxiliary_util_u__format__tests.c | 17 + ...lium_drivers_freedreno_freedreno__screen.c | 34 ++ ...lium_drivers_nouveau_nouveau__vp3__video.c | 18 + ...gallium_drivers_nouveau_nv50_nv84__video.c | 18 + ...llium_drivers_radeonsi_si__compute__blit.c | 181 ++++++++++ ...ch-src_gallium_drivers_radeonsi_si__pipe.c | 93 +++++ ...lium_drivers_radeonsi_si__state__shaders.c | 21 ++ ...atch-src_gallium_drivers_vc4_vc4__bufmgr.c | 18 + ...patch-src_gallium_include_pipe_p__config.h | 31 ++ ...state__trackers_clover_llvm_invocation.cpp | 40 +++ ...m_state__trackers_clover_llvm_metadata.hpp | 21 ++ ...lium_state__trackers_clover_util_range.hpp | 40 +++ ...um_winsys_radeon_drm_radeon__drm__winsys.c | 18 + .../patches/patch-src_gbm_Makefile.am | 12 + .../patches/patch-src_glx_Makefile.am | 49 +++ .../patch-src_glx_apple_apple__glapi.c | 24 ++ .../patches/patch-src_glx_dri__common.h | 17 + .../patches/patch-src_glx_dri__glx.c | 43 +++ .../patches/patch-src_glx_glxclient.h | 19 + .../patches/patch-src_glx_glxcurrent.c | 40 +++ MesaLib-dfbsd/patches/patch-src_glx_glxext.c | 47 +++ .../patches/patch-src_intel_Makefile.tools.am | 14 + ...ntel_compiler_brw__fs__bank__conflicts.cpp | 23 ++ .../patch-src_intel_isl_isl__tiled__memcpy.c | 22 ++ .../patches/patch-src_intel_tools_aub__mem.c | 43 +++ ...src_intel_tools_aubinator__error__decode.c | 19 + .../patches/patch-src_intel_tools_error2aub.c | 19 + .../patch-src_intel_vulkan_anv__allocator.c | 62 ++++ .../patch-src_intel_vulkan_anv__device.c | 61 ++++ .../patches/patch-src_intel_vulkan_anv__gem.c | 19 + .../patch-src_intel_vulkan_anv__gem__stubs.c | 36 ++ .../patch-src_intel_vulkan_anv__queue.c | 25 ++ .../patch-src_mapi_entry__x86-64__tls.h | 32 ++ .../patches/patch-src_mapi_entry__x86__tls.h | 40 +++ .../patch-src_mapi_glapi_gen_gl__gentable.py | 15 + .../patches/patch-src_mapi_u__current.c | 31 ++ .../patches/patch-src_mapi_u__current.h | 16 + ...-src_mesa_drivers_dri_i915_intel__screen.c | 44 +++ ...drivers_dri_i965_brw__performance__query.c | 72 ++++ ...-src_mesa_drivers_dri_i965_intel__screen.c | 81 +++++ ...patch-src_mesa_drivers_dri_swrast_swrast.c | 19 + .../patch-src_mesa_drivers_x11_Makefile.am | 15 + .../patches/patch-src_mesa_main_context.c | 57 +++ .../patches/patch-src_mesa_main_extensions.c | 31 ++ .../patches/patch-src_mesa_main_macros.h | 18 + .../patch-src_mesa_main_shader__query.cpp | 58 ++++ .../patches/patch-src_mesa_x86_common__x86.c | 24 ++ .../patches/patch-src_util_Makefile.am | 15 + .../patches/patch-src_util_build__id.c | 26 ++ .../patches/patch-src_util_disk__cache.c | 29 ++ MesaLib-dfbsd/patches/patch-src_util_futex.h | 53 +++ .../patches/patch-src_util_os__time.c | 18 + MesaLib-dfbsd/patches/patch-src_util_ralloc.c | 25 ++ .../patches/patch-src_util_strndup.h | 15 + .../patches/patch-src_util_u__atomic.h | 15 + .../patches/patch-src_util_u__queue.c | 70 ++++ .../patches/patch-src_util_u__thread.h | 115 +++++++ .../patches/patch-src_util_xmlconfig.c | 31 ++ 80 files changed, 3495 insertions(+) create mode 100644 MesaLib-dfbsd/DESCR create mode 100644 MesaLib-dfbsd/Makefile create mode 100644 MesaLib-dfbsd/PLIST create mode 100644 MesaLib-dfbsd/TODO create mode 100644 MesaLib-dfbsd/buildlink3.mk create mode 100644 MesaLib-dfbsd/builtin.mk create mode 100644 MesaLib-dfbsd/distinfo create mode 100644 MesaLib-dfbsd/dri.mk create mode 100644 MesaLib-dfbsd/options.mk create mode 100644 MesaLib-dfbsd/patches/patch-configure.ac create mode 100644 MesaLib-dfbsd/patches/patch-include_GL_internal_dri__interface.h create mode 100644 MesaLib-dfbsd/patches/patch-src_amd_common_ac__debug.c create mode 100644 MesaLib-dfbsd/patches/patch-src_amd_vulkan_radv__device.c create mode 100644 MesaLib-dfbsd/patches/patch-src_amd_vulkan_winsys_amdgpu_radv__amdgpu__cs.c create mode 100644 MesaLib-dfbsd/patches/patch-src_compiler_builtin__type__macros.h create mode 100644 MesaLib-dfbsd/patches/patch-src_compiler_glsl_glsl__parser__extras.cpp create mode 100644 MesaLib-dfbsd/patches/patch-src_egl_drivers_dri2_platform__drm.c create mode 100644 MesaLib-dfbsd/patches/patch-src_egl_drivers_dri2_platform__x11.c create mode 100644 MesaLib-dfbsd/patches/patch-src_egl_main_eglglobals.c create mode 100644 MesaLib-dfbsd/patches/patch-src_gallium_auxiliary_drivers_trace_tr__dump.c create mode 100644 MesaLib-dfbsd/patches/patch-src_gallium_auxiliary_pipe-loader_pipe__loader__drm.c create mode 100644 MesaLib-dfbsd/patches/patch-src_gallium_auxiliary_util_u__format__tests.c create mode 100644 MesaLib-dfbsd/patches/patch-src_gallium_drivers_freedreno_freedreno__screen.c create mode 100644 MesaLib-dfbsd/patches/patch-src_gallium_drivers_nouveau_nouveau__vp3__video.c create mode 100644 MesaLib-dfbsd/patches/patch-src_gallium_drivers_nouveau_nv50_nv84__video.c create mode 100644 MesaLib-dfbsd/patches/patch-src_gallium_drivers_radeonsi_si__compute__blit.c create mode 100644 MesaLib-dfbsd/patches/patch-src_gallium_drivers_radeonsi_si__pipe.c create mode 100644 MesaLib-dfbsd/patches/patch-src_gallium_drivers_radeonsi_si__state__shaders.c create mode 100644 MesaLib-dfbsd/patches/patch-src_gallium_drivers_vc4_vc4__bufmgr.c create mode 100644 MesaLib-dfbsd/patches/patch-src_gallium_include_pipe_p__config.h create mode 100644 MesaLib-dfbsd/patches/patch-src_gallium_state__trackers_clover_llvm_invocation.cpp create mode 100644 MesaLib-dfbsd/patches/patch-src_gallium_state__trackers_clover_llvm_metadata.hpp create mode 100644 MesaLib-dfbsd/patches/patch-src_gallium_state__trackers_clover_util_range.hpp create mode 100644 MesaLib-dfbsd/patches/patch-src_gallium_winsys_radeon_drm_radeon__drm__winsys.c create mode 100644 MesaLib-dfbsd/patches/patch-src_gbm_Makefile.am create mode 100644 MesaLib-dfbsd/patches/patch-src_glx_Makefile.am create mode 100644 MesaLib-dfbsd/patches/patch-src_glx_apple_apple__glapi.c create mode 100644 MesaLib-dfbsd/patches/patch-src_glx_dri__common.h create mode 100644 MesaLib-dfbsd/patches/patch-src_glx_dri__glx.c create mode 100644 MesaLib-dfbsd/patches/patch-src_glx_glxclient.h create mode 100644 MesaLib-dfbsd/patches/patch-src_glx_glxcurrent.c create mode 100644 MesaLib-dfbsd/patches/patch-src_glx_glxext.c create mode 100644 MesaLib-dfbsd/patches/patch-src_intel_Makefile.tools.am create mode 100644 MesaLib-dfbsd/patches/patch-src_intel_compiler_brw__fs__bank__conflicts.cpp create mode 100644 MesaLib-dfbsd/patches/patch-src_intel_isl_isl__tiled__memcpy.c create mode 100644 MesaLib-dfbsd/patches/patch-src_intel_tools_aub__mem.c create mode 100644 MesaLib-dfbsd/patches/patch-src_intel_tools_aubinator__error__decode.c create mode 100644 MesaLib-dfbsd/patches/patch-src_intel_tools_error2aub.c create mode 100644 MesaLib-dfbsd/patches/patch-src_intel_vulkan_anv__allocator.c create mode 100644 MesaLib-dfbsd/patches/patch-src_intel_vulkan_anv__device.c create mode 100644 MesaLib-dfbsd/patches/patch-src_intel_vulkan_anv__gem.c create mode 100644 MesaLib-dfbsd/patches/patch-src_intel_vulkan_anv__gem__stubs.c create mode 100644 MesaLib-dfbsd/patches/patch-src_intel_vulkan_anv__queue.c create mode 100644 MesaLib-dfbsd/patches/patch-src_mapi_entry__x86-64__tls.h create mode 100644 MesaLib-dfbsd/patches/patch-src_mapi_entry__x86__tls.h create mode 100644 MesaLib-dfbsd/patches/patch-src_mapi_glapi_gen_gl__gentable.py create mode 100644 MesaLib-dfbsd/patches/patch-src_mapi_u__current.c create mode 100644 MesaLib-dfbsd/patches/patch-src_mapi_u__current.h create mode 100644 MesaLib-dfbsd/patches/patch-src_mesa_drivers_dri_i915_intel__screen.c create mode 100644 MesaLib-dfbsd/patches/patch-src_mesa_drivers_dri_i965_brw__performance__query.c create mode 100644 MesaLib-dfbsd/patches/patch-src_mesa_drivers_dri_i965_intel__screen.c create mode 100644 MesaLib-dfbsd/patches/patch-src_mesa_drivers_dri_swrast_swrast.c create mode 100644 MesaLib-dfbsd/patches/patch-src_mesa_drivers_x11_Makefile.am create mode 100644 MesaLib-dfbsd/patches/patch-src_mesa_main_context.c create mode 100644 MesaLib-dfbsd/patches/patch-src_mesa_main_extensions.c create mode 100644 MesaLib-dfbsd/patches/patch-src_mesa_main_macros.h create mode 100644 MesaLib-dfbsd/patches/patch-src_mesa_main_shader__query.cpp create mode 100644 MesaLib-dfbsd/patches/patch-src_mesa_x86_common__x86.c create mode 100644 MesaLib-dfbsd/patches/patch-src_util_Makefile.am create mode 100644 MesaLib-dfbsd/patches/patch-src_util_build__id.c create mode 100644 MesaLib-dfbsd/patches/patch-src_util_disk__cache.c create mode 100644 MesaLib-dfbsd/patches/patch-src_util_futex.h create mode 100644 MesaLib-dfbsd/patches/patch-src_util_os__time.c create mode 100644 MesaLib-dfbsd/patches/patch-src_util_ralloc.c create mode 100644 MesaLib-dfbsd/patches/patch-src_util_strndup.h create mode 100644 MesaLib-dfbsd/patches/patch-src_util_u__atomic.h create mode 100644 MesaLib-dfbsd/patches/patch-src_util_u__queue.c create mode 100644 MesaLib-dfbsd/patches/patch-src_util_u__thread.h create mode 100644 MesaLib-dfbsd/patches/patch-src_util_xmlconfig.c diff --git a/Makefile b/Makefile index e4e253f231..48a3abc5f8 100644 --- a/Makefile +++ b/Makefile @@ -20,6 +20,7 @@ SUBDIR+= Geomyidae-git SUBDIR+= GoogleEarth SUBDIR+= I2util SUBDIR+= LuaJIT21 +SUBDIR+= MesaLib-dfbsd SUBDIR+= MoleInvasion SUBDIR+= OpenGLUT SUBDIR+= OpenIPMI diff --git a/MesaLib-dfbsd/DESCR b/MesaLib-dfbsd/DESCR new file mode 100644 index 0000000000..8a8cccf5b9 --- /dev/null +++ b/MesaLib-dfbsd/DESCR @@ -0,0 +1,5 @@ +MesaLib is a 3-D graphics library with an API which is very similar to +that of OpenGL*. To the extent that Mesa utilizes the OpenGL command syntax +or state machine, it is being used with authorization from Silicon Graphics, +Inc. However, the author makes no claim that Mesa is in any way a +compatible replacement for OpenGL or associated with Silicon Graphics, Inc. diff --git a/MesaLib-dfbsd/Makefile b/MesaLib-dfbsd/Makefile new file mode 100644 index 0000000000..8e55d8e514 --- /dev/null +++ b/MesaLib-dfbsd/Makefile @@ -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" diff --git a/MesaLib-dfbsd/PLIST b/MesaLib-dfbsd/PLIST new file mode 100644 index 0000000000..a018a44e63 --- /dev/null +++ b/MesaLib-dfbsd/PLIST @@ -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 diff --git a/MesaLib-dfbsd/TODO b/MesaLib-dfbsd/TODO new file mode 100644 index 0000000000..5589abaf3e --- /dev/null +++ b/MesaLib-dfbsd/TODO @@ -0,0 +1,8 @@ +Copy port to graphics/MesaLib, do not install from wip. + +* See what can be done on NetBSD build for glesv1 and glesv2 +* See if libLLVM 3.9+ on FreeBSD can build nouveau +* Test OSX quartz, check if bug 90311 patch needs regen +* Test Solaris +* Test Linux +* Fully port Vulkan support from FreeBSD ports. diff --git a/MesaLib-dfbsd/buildlink3.mk b/MesaLib-dfbsd/buildlink3.mk new file mode 100644 index 0000000000..939ef86eb8 --- /dev/null +++ b/MesaLib-dfbsd/buildlink3.mk @@ -0,0 +1,50 @@ +# $NetBSD: buildlink3.mk,v 1.2 2018/10/10 11:03:02 maya Exp $ + +BUILDLINK_TREE+= MesaLib + +.if !defined(MESALIB_BUILDLINK3_MK) +MESALIB_BUILDLINK3_MK:= + +BUILDLINK_API_DEPENDS.MesaLib+= MesaLib>=3.4.2 +BUILDLINK_ABI_DEPENDS.MesaLib+= MesaLib>=7.11.2 +BUILDLINK_PKGSRCDIR.MesaLib?= ../../graphics/MesaLib + +.include "../../mk/bsd.fast.prefs.mk" + +.if ${X11_TYPE} == "modular" +BUILDLINK_ABI_DEPENDS.MesaLib+= MesaLib>=10.5.3 +# This is needed to avoid linking conflicting libstdc++ versions +. if defined(USE_LANGUAGES) && !empty(USE_LANGUAGES:Mc++) +GCC_REQD+= 4.2 +. endif +.endif + +# See . +.if ${X11_TYPE} == "native" && !empty(MACHINE_PLATFORM:MDarwin-[9].*-*) +BUILDLINK_LDFLAGS.MesaLib+= -Wl,-dylib_file,/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib +.endif + +pkgbase:= MesaLib +.include "../../mk/pkg-build-options.mk" + +.if ${X11_TYPE} == "native" && ${OPSYS} != "Cygwin" && exists(${X11BASE}/lib/pkgconfig/dri.pc) +PKG_BUILD_OPTIONS.MesaLib+= dri +.endif + +.if !empty(PKG_BUILD_OPTIONS.MesaLib:Mdri) +. include "../../graphics/MesaLib/dri.mk" +.endif + +.if ${X11_TYPE} == "modular" && !empty(PKG_BUILD_OPTIONS.MesaLib:Mdri) || \ + ${X11_TYPE} == "native" && exists(${X11BASE}/include/EGL/egl.h) +MESALIB_SUPPORTS_EGL= yes +.else +MESALIB_SUPPORTS_EGL= no +.endif + +.include "../../mk/pthread.buildlink3.mk" + +.include "../../x11/libXext/buildlink3.mk" +.endif # MESALIB_BUILDLINK3_MK + +BUILDLINK_TREE+= -MesaLib diff --git a/MesaLib-dfbsd/builtin.mk b/MesaLib-dfbsd/builtin.mk new file mode 100644 index 0000000000..f9bab9d959 --- /dev/null +++ b/MesaLib-dfbsd/builtin.mk @@ -0,0 +1,87 @@ +# $NetBSD: builtin.mk,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +BUILTIN_PKG:= MesaLib + +BUILTIN_FIND_FILES_VAR:= H_MESALIB PC_GL +BUILTIN_FIND_FILES.H_MESALIB= ${X11BASE}/include/GL/glx.h +BUILTIN_FIND_FILES.PC_GL= ${X11BASE}/lib/pkgconfig/gl.pc +BUILTIN_FIND_FILES.PC_GL+= ${X11BASE}/lib${LIBABISUFFIX}/pkgconfig/gl.pc + +.include "../../mk/buildlink3/bsd.builtin.mk" + +### +### Determine if there is a built-in implementation of the package and +### set IS_BUILTIN. 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. 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. appropriate ("yes" or "no"). +### +.if !defined(USE_BUILTIN.MesaLib) +. if ${PREFER.MesaLib} == "pkgsrc" +USE_BUILTIN.MesaLib= no +. else +USE_BUILTIN.MesaLib= ${IS_BUILTIN.MesaLib} +. if defined(BUILTIN_PKG.MesaLib) && \ + !empty(IS_BUILTIN.MesaLib:M[yY][eE][sS]) +USE_BUILTIN.MesaLib= yes +. for dep in ${BUILDLINK_API_DEPENDS.MesaLib} +. if !empty(USE_BUILTIN.MesaLib:M[yY][eE][sS]) +USE_BUILTIN.MesaLib!= \ + if ${PKG_ADMIN} pmatch ${dep:Q} ${BUILTIN_PKG.MesaLib}; then \ + ${ECHO} yes; \ + else \ + ${ECHO} no; \ + fi +. endif +. endfor +. endif +. endif # PREFER.MesaLib +.endif +MAKEVARS+= USE_BUILTIN.MesaLib + +### +### The section below only applies if we are not including this file +### solely to determine whether a built-in implementation exists. +### +CHECK_BUILTIN.MesaLib?= no +.if !empty(CHECK_BUILTIN.MesaLib:M[nN][oO]) + +. if !empty(USE_BUILTIN.MesaLib:M[nN][oO]) +. include "../../mk/pthread.buildlink3.mk" +. include "../../mk/pthread.builtin.mk" +BUILTIN_PKG:= MesaLib +. endif + +. include "../../mk/x11.builtin.mk" + +.endif # CHECK_BUILTIN.MesaLib diff --git a/MesaLib-dfbsd/distinfo b/MesaLib-dfbsd/distinfo new file mode 100644 index 0000000000..2ef85cfa77 --- /dev/null +++ b/MesaLib-dfbsd/distinfo @@ -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 diff --git a/MesaLib-dfbsd/dri.mk b/MesaLib-dfbsd/dri.mk new file mode 100644 index 0000000000..b5bf454044 --- /dev/null +++ b/MesaLib-dfbsd/dri.mk @@ -0,0 +1,34 @@ +# $NetBSD: dri.mk,v 1.1 2018/10/07 23:49:31 ryoon Exp $ +# +# Currently, this is for convenience only. +# +.if !defined(DRI_MK) +DRI_MK= # defined + +. if !defined(USE_BUILTIN.MesaLib) +CHECK_BUILTIN.MesaLib:= yes +. include "../../graphics/MesaLib/builtin.mk" +CHECK_BUILTIN.MesaLib:= no +. endif + +. if !empty(USE_BUILTIN.MesaLib:M[Nn][Oo]) +. if ${OPSYS} != "Darwin" +BUILDLINK_API_DEPENDS.libdrm+= libdrm>=2.4.60 +. endif +. if ${OPSYS} == "Linux" +BUILDLINK_API_DEPENDS.libxcb+= libxcb>=1.9.3 +. endif +. endif +. include "../../textproc/expat/buildlink3.mk" +. include "../../x11/xorgproto/buildlink3.mk" +# XXX these do not have builtin.mk +. if ${X11_TYPE} == "modular" +. include "../../x11/libxshmfence/buildlink3.mk" +. endif +. include "../../x11/libXdamage/buildlink3.mk" +. include "../../x11/libXfixes/buildlink3.mk" +. include "../../x11/libXxf86vm/buildlink3.mk" +. if ${OPSYS} != "Darwin" +. include "../../x11/libdrm/buildlink3.mk" +. endif +.endif diff --git a/MesaLib-dfbsd/options.mk b/MesaLib-dfbsd/options.mk new file mode 100644 index 0000000000..5f18b1b5c6 --- /dev/null +++ b/MesaLib-dfbsd/options.mk @@ -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 diff --git a/MesaLib-dfbsd/patches/patch-configure.ac b/MesaLib-dfbsd/patches/patch-configure.ac new file mode 100644 index 0000000000..5f64f7cb08 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-configure.ac @@ -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 ++ #else + #define _GNU_SOURCE + #include ++ #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 ++ #include ]) + + 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 diff --git a/MesaLib-dfbsd/patches/patch-include_GL_internal_dri__interface.h b/MesaLib-dfbsd/patches/patch-include_GL_internal_dri__interface.h new file mode 100644 index 0000000000..f1e6881180 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-include_GL_internal_dri__interface.h @@ -0,0 +1,27 @@ +$NetBSD: patch-include_GL_internal_dri__interface.h,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +From FreeBSD ports graphics/mesa-dri 17.2.4. + +GCC on 9.x doesn't allow types to be overwritten, these types are defined +in drm.h also, which causes build issues in xorg-server. + +--- include/GL/internal/dri_interface.h.orig 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 ++#else + #ifdef HAVE_LIBDRM + #include + #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 + diff --git a/MesaLib-dfbsd/patches/patch-src_amd_common_ac__debug.c b/MesaLib-dfbsd/patches/patch-src_amd_common_ac__debug.c new file mode 100644 index 0000000000..ec2e68097e --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_amd_common_ac__debug.c @@ -0,0 +1,19 @@ +$NetBSD: patch-src_amd_common_ac__debug.c,v 1.2 2019/01/20 09:50:28 tnn Exp $ + +#if'out some debug code on SunOS. There is no open_memstream(3) + +--- src/amd/common/ac_debug.c.orig 2019-01-17 11:26:22.000000000 +0000 ++++ src/amd/common/ac_debug.c +@@ -571,10 +571,12 @@ void ac_parse_ib_chunk(FILE *f, uint32_t + + char *out; + size_t outsize; ++#if defined(HAVE_OPEN_MEMSTREAM) + FILE *memf = open_memstream(&out, &outsize); + ib.f = memf; + ac_do_parse_ib(memf, &ib); + fclose(memf); ++#endif + + if (out) { + format_ib_output(f, out); diff --git a/MesaLib-dfbsd/patches/patch-src_amd_vulkan_radv__device.c b/MesaLib-dfbsd/patches/patch-src_amd_vulkan_radv__device.c new file mode 100644 index 0000000000..024fc9d848 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_amd_vulkan_radv__device.c @@ -0,0 +1,23 @@ +$NetBSD$ + +From graphics/mesa-dri: update to 18.3.1 + +https://reviews.freebsd.org/D17872 + +--- src/amd/vulkan/radv_device.c.orig 2018-12-11 21:13:57.000000000 +0000 ++++ src/amd/vulkan/radv_device.c +@@ -50,6 +50,14 @@ + #include "util/debug.h" + #include "util/mesa-sha1.h" + ++#ifndef CLOCK_MONOTONIC_RAW ++# ifdef CLOCK_MONOTONIC_FAST ++# define CLOCK_MONOTONIC_RAW CLOCK_MONOTONIC_FAST ++# else ++# define CLOCK_MONOTONIC_RAW CLOCK_MONOTONIC ++# endif ++#endif ++ + static int + radv_device_get_cache_uuid(enum radeon_family family, void *uuid) + { diff --git a/MesaLib-dfbsd/patches/patch-src_amd_vulkan_winsys_amdgpu_radv__amdgpu__cs.c b/MesaLib-dfbsd/patches/patch-src_amd_vulkan_winsys_amdgpu_radv__amdgpu__cs.c new file mode 100644 index 0000000000..047dac279f --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_amd_vulkan_winsys_amdgpu_radv__amdgpu__cs.c @@ -0,0 +1,19 @@ +$NetBSD: patch-src_amd_vulkan_winsys_amdgpu_radv__amdgpu__cs.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +Define ETIME if missing + +https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=225415 +FreeBSD Bugzilla: Bug 225415 graphics/mesa-dri: update to 18.0.0 + +--- src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c.orig 2018-02-09 02:17:57.000000000 +0000 ++++ src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c +@@ -33,6 +33,9 @@ + #include "radv_amdgpu_bo.h" + #include "sid.h" + ++#ifndef ETIME ++#define ETIME ETIMEDOUT ++#endif + + enum { + VIRTUAL_BUFFER_HASH_TABLE_SIZE = 1024 diff --git a/MesaLib-dfbsd/patches/patch-src_compiler_builtin__type__macros.h b/MesaLib-dfbsd/patches/patch-src_compiler_builtin__type__macros.h new file mode 100644 index 0000000000..6e1063880a --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_compiler_builtin__type__macros.h @@ -0,0 +1,25 @@ +$NetBSD: patch-src_compiler_builtin__type__macros.h,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +Workaround netbsd headers. + +--- src/compiler/builtin_type_macros.h.orig 2018-09-07 21:18:07.000000000 +0000 ++++ src/compiler/builtin_type_macros.h +@@ -28,6 +28,18 @@ + * language version or extension might provide them. + */ + ++#ifdef __NetBSD__ /* XXX https://mail-index.netbsd.org/tech-userlevel/2018/09/08/msg011381.html */ ++#undef uint8_t ++#undef uint16_t ++#undef uint32_t ++#undef uint64_t ++#undef int8_t ++#undef int16_t ++#undef int32_t ++#undef int64_t ++#endif ++ ++ + DECL_TYPE(error, GL_INVALID_ENUM, GLSL_TYPE_ERROR, 0, 0) + DECL_TYPE(void, GL_INVALID_ENUM, GLSL_TYPE_VOID, 0, 0) + diff --git a/MesaLib-dfbsd/patches/patch-src_compiler_glsl_glsl__parser__extras.cpp b/MesaLib-dfbsd/patches/patch-src_compiler_glsl_glsl__parser__extras.cpp new file mode 100644 index 0000000000..c926fe10a6 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_compiler_glsl_glsl__parser__extras.cpp @@ -0,0 +1,18 @@ +$NetBSD: patch-src_compiler_glsl_glsl__parser__extras.cpp,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +atexit() is not a good idea in a library; use destructor attribute. + +--- src/compiler/glsl/glsl_parser_extras.cpp.orig 2017-09-25 16:56:18.000000000 +0000 ++++ src/compiler/glsl/glsl_parser_extras.cpp +@@ -2224,7 +2224,11 @@ extern "C" { + * programs would be invalid. So this should happen at approximately + * program exit. + */ ++#if defined(HAVE_NOATEXIT) ++void __attribute__((__destructor__)) ++#else + void ++#endif + _mesa_destroy_shader_compiler(void) + { + _mesa_destroy_shader_compiler_caches(); diff --git a/MesaLib-dfbsd/patches/patch-src_egl_drivers_dri2_platform__drm.c b/MesaLib-dfbsd/patches/patch-src_egl_drivers_dri2_platform__drm.c new file mode 100644 index 0000000000..3920bed657 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_egl_drivers_dri2_platform__drm.c @@ -0,0 +1,18 @@ +$NetBSD: patch-src_egl_drivers_dri2_platform__drm.c,v 1.2 2019/01/20 09:50:28 tnn Exp $ + +netbsd-5 build fix + +--- src/egl/drivers/dri2/platform_drm.c.orig 2019-01-17 11:26:22.000000000 +0000 ++++ src/egl/drivers/dri2/platform_drm.c +@@ -725,7 +725,11 @@ dri2_initialize_drm(_EGLDriver *drv, _EG + } + dri2_dpy->own_device = true; + } else { ++#ifdef F_DUPFD_CLOEXEC + dri2_dpy->fd = fcntl(gbm_device_get_fd(gbm), F_DUPFD_CLOEXEC, 3); ++#else ++ dri2_dpy->fd = -1; ++#endif + if (dri2_dpy->fd < 0) { + err = "DRI2: failed to fcntl() existing gbm device"; + goto cleanup; diff --git a/MesaLib-dfbsd/patches/patch-src_egl_drivers_dri2_platform__x11.c b/MesaLib-dfbsd/patches/patch-src_egl_drivers_dri2_platform__x11.c new file mode 100644 index 0000000000..51335d375f --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_egl_drivers_dri2_platform__x11.c @@ -0,0 +1,60 @@ +$NetBSD: patch-src_egl_drivers_dri2_platform__x11.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +Provide compat strndup for older Darwin. + +* From FreeBSD ports 18.0.0: +work-around for https://bugs.freedesktop.org/show_bug.cgi?id=100627 + +Mon Apr 10 19:14:48 2017 UTC +DRI3 remains enabled at compile time, but it is now disabled at +runtime for stock FreeBSD. Set LIBGL_DRI3_ENABLE in the +environment to enable DRI3. +This change was made to work around a problem in libEGL, +which fails to fall back to using DRI2 when run on a system +without DRI3 support. + +* Added logging statement to note dri3 initialization being invoked. + +--- src/egl/drivers/dri2/platform_x11.c.orig 2018-02-09 02:17:57.000000000 +0000 ++++ src/egl/drivers/dri2/platform_x11.c +@@ -608,6 +608,23 @@ dri2_x11_local_authenticate(struct dri2_ + return EGL_TRUE; + } + ++#if (defined(__APPLE__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0 < 1070) ++static char * ++strndup(const char *s, int length) ++{ ++ char *d; ++ ++ d = malloc(length + 1); ++ if (d == NULL) ++ return NULL; ++ ++ memcpy(d, s, length); ++ d[length] = '\0'; ++ ++ return d; ++} ++#endif ++ + static EGLBoolean + dri2_x11_connect(struct dri2_egl_display *dri2_dpy) + { +@@ -1466,8 +1483,15 @@ dri2_initialize_x11(_EGLDriver *drv, _EG + + if (!disp->Options.ForceSoftware) { + #ifdef HAVE_DRI3 +- if (!env_var_as_boolean("LIBGL_DRI3_DISABLE", false)) ++#if ((defined(__FreeBSD__) || defined(__FreeBSD_kernel__)) && !defined(__DRM_NEXT__)) || defined(__DragonFly__) || defined(__NetBSD__) ++ if (env_var_as_boolean("LIBGL_DRI3_ENABLE", false)) ++#endif ++ if (!env_var_as_boolean("LIBGL_DRI3_DISABLE", false)) { ++ _eglLog(_EGL_INFO, "platform_x11.c: calling dri2_initialize_x11_dri3\n"); + initialized = dri2_initialize_x11_dri3(drv, disp); ++ if (initialized) ++ _eglLog(_EGL_INFO, "platform_x11.c: initialized by dri2_initialize_x11_dri3\n"); ++ } + #endif + + if (!initialized) diff --git a/MesaLib-dfbsd/patches/patch-src_egl_main_eglglobals.c b/MesaLib-dfbsd/patches/patch-src_egl_main_eglglobals.c new file mode 100644 index 0000000000..26495a9f2f --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_egl_main_eglglobals.c @@ -0,0 +1,53 @@ +$NetBSD: patch-src_egl_main_eglglobals.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +atexit() is not a good idea in shared libraries. + +FreeBSD reported atexit bug for 10.6: +https://bugs.freedesktop.org/show_bug.cgi?id=91869 + +--- src/egl/main/eglglobals.c.orig 2018-01-18 21:30:28.000000000 +0000 ++++ src/egl/main/eglglobals.c +@@ -85,11 +85,22 @@ struct _egl_global _eglGlobal = + .debugTypesEnabled = _EGL_DEBUG_BIT_CRITICAL | _EGL_DEBUG_BIT_ERROR, + }; + ++#if defined(HAVE_NOATEXIT) ++static EGLBoolean registered = EGL_FALSE; + ++static void __attribute__((__destructor__)) ++#else + static void ++#endif + _eglAtExit(void) + { + EGLint i; ++ ++#if defined(HAVE_NOATEXIT) ++ if (!registered) ++ return; ++#endif ++ + for (i = _eglGlobal.NumAtExitCalls - 1; i >= 0; i--) + _eglGlobal.AtExitCalls[i](); + } +@@ -99,14 +110,20 @@ void + _eglAddAtExitCall(void (*func)(void)) + { + if (func) { ++#if !defined(HAVE_NOATEXIT) + static EGLBoolean registered = EGL_FALSE; ++#endif + + mtx_lock(_eglGlobal.Mutex); + ++#if defined(HAVE_NOATEXIT) ++ registered = EGL_TRUE; ++#else + if (!registered) { + atexit(_eglAtExit); + registered = EGL_TRUE; + } ++#endif + + assert(_eglGlobal.NumAtExitCalls < ARRAY_SIZE(_eglGlobal.AtExitCalls)); + _eglGlobal.AtExitCalls[_eglGlobal.NumAtExitCalls++] = func; diff --git a/MesaLib-dfbsd/patches/patch-src_gallium_auxiliary_drivers_trace_tr__dump.c b/MesaLib-dfbsd/patches/patch-src_gallium_auxiliary_drivers_trace_tr__dump.c new file mode 100644 index 0000000000..9935beb299 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_gallium_auxiliary_drivers_trace_tr__dump.c @@ -0,0 +1,50 @@ +$NetBSD: patch-src_gallium_auxiliary_drivers_trace_tr__dump.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +atexit() is not a good idea in shared libraries. + +FreeBSD reported atexit bug for 10.6: +https://bugs.freedesktop.org/show_bug.cgi?id=91869 + +--- src/gallium/auxiliary/driver_trace/tr_dump.c.orig 2018-09-07 21:18:07.000000000 +0000 ++++ src/gallium/auxiliary/driver_trace/tr_dump.c +@@ -63,7 +63,6 @@ static mtx_t call_mutex = _MTX_INITIALIZ + static long unsigned call_no = 0; + static boolean dumping = FALSE; + +- + static inline void + trace_dump_write(const char *buf, size_t size) + { +@@ -171,9 +170,20 @@ trace_dump_trace_flush(void) + } + } + ++#if defined(HAVE_NOATEXIT) ++static boolean trace_dump_has_begun = FALSE; ++ ++static void __attribute__((__destructor__)) ++#else + static void ++#endif + trace_dump_trace_close(void) + { ++#if defined(HAVE_NOATEXIT) ++ if (!trace_dump_has_begun) ++ return; ++#endif ++ + if (stream) { + trace_dump_writes("\n"); + if (close_stream) { +@@ -233,7 +243,11 @@ trace_dump_trace_begin(void) + * screen multiple times, so we only write tag and close at exit + * time. + */ ++#if defined(HAVE_NOATEXIT) ++ trace_dump_has_begun = TRUE; ++#else + atexit(trace_dump_trace_close); ++#endif + } + + return TRUE; diff --git a/MesaLib-dfbsd/patches/patch-src_gallium_auxiliary_pipe-loader_pipe__loader__drm.c b/MesaLib-dfbsd/patches/patch-src_gallium_auxiliary_pipe-loader_pipe__loader__drm.c new file mode 100644 index 0000000000..d9d3b98897 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_gallium_auxiliary_pipe-loader_pipe__loader__drm.c @@ -0,0 +1,127 @@ +$NetBSD: patch-src_gallium_auxiliary_pipe-loader_pipe__loader__drm.c,v 1.2 2019/01/10 22:30:11 tnn Exp $ + +* From FreeBSD ports / DragonFly dports graphics/mesa-dri + +Revert the following commit. + +FreeBSD and DragonFly don't have the required render nodes. + +------- + +From 69a1b9959e59653da262185c4e2cf57d24939b19 Mon Sep 17 00:00:00 2001 +Date: Mon, 29 Jun 2015 12:36:45 +0100 +Subject: pipe-loader: drop support for non-render node devices + +Render nodes have been around for quite some time. Removing support via +the master/primary node allows us to clean up the conditional +compilation and simplify the build greatly. + +For example currently we the pipe-loader, which explicitly links against +xcb and friends (for X auth) if found at compile-time. That +would cause problems as one will be forced to use X/xcb, even if it's a +headless system that is used for opencl. + +v2: Clarify the linking topic in the commit message. + +* Extended for NetBSD. + +--- src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c.orig 2018-12-11 21:13:57.000000000 +0000 ++++ src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c +@@ -229,6 +229,16 @@ pipe_loader_drm_probe_fd(struct pipe_loa + return ret; + } + ++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) || defined(__NetBSD__) ++static int ++open_drm_minor(int minor) ++{ ++ char path[PATH_MAX]; ++ snprintf(path, sizeof(path), DRM_DEV_NAME, DRM_DIR_NAME, minor); ++ return open(path, O_RDWR, 0); ++} ++#endif ++ + static int + open_drm_render_node_minor(int minor) + { +@@ -241,7 +251,19 @@ open_drm_render_node_minor(int minor) + int + pipe_loader_drm_probe(struct pipe_loader_device **devs, int ndev) + { ++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) || defined(__NetBSD__) ++ int i, k, fd, num_render_node_devs; ++ int j = 0; ++ ++ struct { ++ unsigned vendor_id; ++ unsigned chip_id; ++ } render_node_devs[DRM_RENDER_NODE_MAX_NODES]; ++ ++ /* Look for render nodes first */ ++#else + int i, j, fd; ++#endif + + for (i = DRM_RENDER_NODE_MIN_MINOR, j = 0; + i <= DRM_RENDER_NODE_MAX_MINOR; i++) { +@@ -256,6 +278,11 @@ pipe_loader_drm_probe(struct pipe_loader + continue; + } + ++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) || defined(__NetBSD__) ++ render_node_devs[j].vendor_id = dev->u.pci.vendor_id; ++ render_node_devs[j].chip_id = dev->u.pci.chip_id; ++ ++#endif + if (j < ndev) { + devs[j] = dev; + } else { +@@ -265,6 +292,48 @@ pipe_loader_drm_probe(struct pipe_loader + j++; + } + ++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) || defined(__NetBSD__) ++ num_render_node_devs = j; ++ ++ /* Next look for drm devices. */ ++ for (i = 0; i < DRM_MAX_MINOR; i++) { ++ struct pipe_loader_device *dev; ++ boolean duplicate = FALSE; ++ fd = open_drm_minor(i); ++ if (fd < 0) ++ continue; ++ ++ if (!pipe_loader_drm_probe_fd(&dev, fd)) { ++ close(fd); ++ continue; ++ } ++ ++ /* Check to make sure we aren't already accessing this device via ++ * render nodes. ++ */ ++ for (k = 0; k < num_render_node_devs; k++) { ++ if (dev->u.pci.vendor_id == render_node_devs[k].vendor_id && ++ dev->u.pci.chip_id == render_node_devs[k].chip_id) { ++ close(fd); ++ dev->ops->release(&dev); ++ duplicate = TRUE; ++ break; ++ } ++ } ++ ++ if (duplicate) ++ continue; ++ ++ if (j < ndev) { ++ devs[j] = dev; ++ } else { ++ dev->ops->release(&dev); ++ } ++ ++ j++; ++ } ++ ++#endif + return j; + } + diff --git a/MesaLib-dfbsd/patches/patch-src_gallium_auxiliary_util_u__format__tests.c b/MesaLib-dfbsd/patches/patch-src_gallium_auxiliary_util_u__format__tests.c new file mode 100644 index 0000000000..cb05bb04c2 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_gallium_auxiliary_util_u__format__tests.c @@ -0,0 +1,17 @@ +$NetBSD: patch-src_gallium_auxiliary_util_u__format__tests.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +On old NetBSD, NAN in math.h is __nanf.__val. Which is not constant. + +--- src/gallium/auxiliary/util/u_format_tests.c.orig 2019-01-04 23:59:59.000000000 +0000 ++++ src/gallium/auxiliary/util/u_format_tests.c +@@ -28,6 +28,10 @@ + + #include + #include ++#if defined(__NetBSD__) && __NetBSD_Version__ < 600000000 ++#undef NAN ++#define NAN __builtin_nanf("") ++#endif + + #include "pipe/p_config.h" + #include "util/u_memory.h" diff --git a/MesaLib-dfbsd/patches/patch-src_gallium_drivers_freedreno_freedreno__screen.c b/MesaLib-dfbsd/patches/patch-src_gallium_drivers_freedreno_freedreno__screen.c new file mode 100644 index 0000000000..8732e9e5dc --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_gallium_drivers_freedreno_freedreno__screen.c @@ -0,0 +1,34 @@ +$NetBSD$ + +From FreeBSD ports graphics/mesa-dri 18.1.4. + +- Without sysinfo() fall back to sysconf() + +--- src/gallium/drivers/freedreno/freedreno_screen.c.orig 2018-07-13 18:41:27.000000000 +0000 ++++ src/gallium/drivers/freedreno/freedreno_screen.c +@@ -43,7 +43,11 @@ + #include + #include + #include ++#ifdef __GLIBC__ + #include ++#else ++#include ++#endif + + #include "freedreno_screen.h" + #include "freedreno_resource.h" +@@ -837,9 +841,13 @@ fd_screen_create(struct fd_device *dev) + screen->priority_mask = (1 << val) - 1; + } + ++#ifdef __GLIBC__ + struct sysinfo si; + sysinfo(&si); + screen->ram_size = si.totalram; ++#else ++ screen->ram_size = sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGE_SIZE); ++#endif + + DBG("Pipe Info:"); + DBG(" GPU-id: %d", screen->gpu_id); diff --git a/MesaLib-dfbsd/patches/patch-src_gallium_drivers_nouveau_nouveau__vp3__video.c b/MesaLib-dfbsd/patches/patch-src_gallium_drivers_nouveau_nouveau__vp3__video.c new file mode 100644 index 0000000000..91ad33c971 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_gallium_drivers_nouveau_nouveau__vp3__video.c @@ -0,0 +1,18 @@ +$NetBSD: patch-src_gallium_drivers_nouveau_nouveau__vp3__video.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +Fix build on platforms without close-on-exec. + +--- src/gallium/drivers/nouveau/nouveau_vp3_video.c.orig 2017-02-13 11:55:49.000000000 +0000 ++++ src/gallium/drivers/nouveau/nouveau_vp3_video.c +@@ -294,7 +294,11 @@ nouveau_vp3_load_firmware(struct nouveau + if (nouveau_bo_map(dec->fw_bo, NOUVEAU_BO_WR, dec->client)) + return 1; + ++#ifdef O_CLOEXEC + fd = open(path, O_RDONLY | O_CLOEXEC); ++#else ++ fd = open(path, O_RDONLY); ++#endif + if (fd < 0) { + fprintf(stderr, "opening firmware file %s failed: %m\n", path); + return 1; diff --git a/MesaLib-dfbsd/patches/patch-src_gallium_drivers_nouveau_nv50_nv84__video.c b/MesaLib-dfbsd/patches/patch-src_gallium_drivers_nouveau_nv50_nv84__video.c new file mode 100644 index 0000000000..883e4426e9 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_gallium_drivers_nouveau_nv50_nv84__video.c @@ -0,0 +1,18 @@ +$NetBSD: patch-src_gallium_drivers_nouveau_nv50_nv84__video.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +Fix build on platforms without close-on-exec. + +--- src/gallium/drivers/nouveau/nv50/nv84_video.c.orig 2015-03-21 00:51:18.000000000 +0000 ++++ src/gallium/drivers/nouveau/nv50/nv84_video.c +@@ -34,7 +34,11 @@ + static int + nv84_copy_firmware(const char *path, void *dest, ssize_t len) + { ++#ifdef O_CLOEXEC + int fd = open(path, O_RDONLY | O_CLOEXEC); ++#else ++ int fd = open(path, O_RDONLY); ++#endif + ssize_t r; + if (fd < 0) { + fprintf(stderr, "opening firmware file %s failed: %m\n", path); diff --git a/MesaLib-dfbsd/patches/patch-src_gallium_drivers_radeonsi_si__compute__blit.c b/MesaLib-dfbsd/patches/patch-src_gallium_drivers_radeonsi_si__compute__blit.c new file mode 100644 index 0000000000..641d124346 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_gallium_drivers_radeonsi_si__compute__blit.c @@ -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, diff --git a/MesaLib-dfbsd/patches/patch-src_gallium_drivers_radeonsi_si__pipe.c b/MesaLib-dfbsd/patches/patch-src_gallium_drivers_radeonsi_si__pipe.c new file mode 100644 index 0000000000..7552001921 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_gallium_drivers_radeonsi_si__pipe.c @@ -0,0 +1,93 @@ +$NetBSD$ + +Option to revert: + +2017-05-15 radeonsi: enable threaded_context +Commit: 1c8f7d3be6ffb3567041f1e11a037fa7e75e4c28 + +https://cgit.freedesktop.org/mesa/mesa/commit/?id=1c8f7d3be6ffb3567041f1e11a037fa7e75e4c28 + +2018-10-16 radeonsi: use compute shaders for clear_buffer & copy_buffer +Commit: 9b331e462e5021d994859756d46cd2519d9c9c6e + +https://cgit.freedesktop.org/mesa/mesa/commit/?id=9b331e462e5021d994859756d46cd2519d9c9c6e + +--- src/gallium/drivers/radeonsi/si_pipe.c.orig 2019-02-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); diff --git a/MesaLib-dfbsd/patches/patch-src_gallium_drivers_radeonsi_si__state__shaders.c b/MesaLib-dfbsd/patches/patch-src_gallium_drivers_radeonsi_si__state__shaders.c new file mode 100644 index 0000000000..9905344d81 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_gallium_drivers_radeonsi_si__state__shaders.c @@ -0,0 +1,21 @@ +$NetBSD: patch-src_gallium_drivers_radeonsi_si__state__shaders.c,v 1.3 2019/01/20 09:50:28 tnn Exp $ + +#if'out some debug code on SunOS. There is no open_memstream(3) + +--- src/gallium/drivers/radeonsi/si_state_shaders.c.orig 2019-01-17 11:26:22.000000000 +0000 ++++ src/gallium/drivers/radeonsi/si_state_shaders.c +@@ -1721,12 +1721,14 @@ static void si_build_shader_variant(stru + } + + if (shader->compiler_ctx_state.is_debug_context) { ++#if defined(HAVE_OPEN_MEMSTREAM) + FILE *f = open_memstream(&shader->shader_log, + &shader->shader_log_size); + if (f) { + si_shader_dump(sscreen, shader, NULL, sel->type, f, false); + fclose(f); + } ++#endif + } + + si_shader_init_pm4_state(sscreen, shader); diff --git a/MesaLib-dfbsd/patches/patch-src_gallium_drivers_vc4_vc4__bufmgr.c b/MesaLib-dfbsd/patches/patch-src_gallium_drivers_vc4_vc4__bufmgr.c new file mode 100644 index 0000000000..2eec8e3d7f --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_gallium_drivers_vc4_vc4__bufmgr.c @@ -0,0 +1,18 @@ +$NetBSD: patch-src_gallium_drivers_vc4_vc4__bufmgr.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +Patch from FreeBSD ports graphics/mesa-dri 17.1.0 + +# define ETIME as ETIMEOUT same as in intel driver + +--- src/gallium/drivers/vc4/vc4_bufmgr.c.orig 2017-05-25 07:13:13.000000000 +0000 ++++ src/gallium/drivers/vc4/vc4_bufmgr.c +@@ -27,6 +27,9 @@ + #include + #include + #include ++#ifndef ETIME ++#define ETIME ETIMEDOUT ++#endif + + #include "util/u_hash_table.h" + #include "util/u_memory.h" diff --git a/MesaLib-dfbsd/patches/patch-src_gallium_include_pipe_p__config.h b/MesaLib-dfbsd/patches/patch-src_gallium_include_pipe_p__config.h new file mode 100644 index 0000000000..b66a74e446 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_gallium_include_pipe_p__config.h @@ -0,0 +1,31 @@ +$NetBSD: patch-src_gallium_include_pipe_p__config.h,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +* Patches for Sparc from FreeBSD ports for mesa-dri 17.2.3. + +* Definitions for DragonFly already in upstream source. + +--- src/gallium/include/pipe/p_config.h.orig 2017-10-19 12:23:53.000000000 +0000 ++++ src/gallium/include/pipe/p_config.h +@@ -77,6 +77,12 @@ + #define PIPE_CC_ICL + #endif + ++#if defined(__sparc__) || defined(__sparc64__) ++#define PIPE_ARCH_SPARC ++#if defined(__sparc64__) ++#define PIPE_ARCH_SPARC_64 ++#endif ++#endif + + /* + * Processor architecture +@@ -131,7 +137,8 @@ + + #if defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64) || defined(PIPE_ARCH_ARM) || defined(PIPE_ARCH_AARCH64) + #define PIPE_ARCH_LITTLE_ENDIAN +-#elif defined(PIPE_ARCH_PPC) || defined(PIPE_ARCH_PPC_64) || defined(PIPE_ARCH_S390) ++#elif defined(PIPE_ARCH_PPC) || defined(PIPE_ARCH_PPC_64) || defined(PIPE_ARCH_S390) || defined(PIPE_ARCH_SPARC) || defined(PIPE_ARCH_SPARC_64) ++ + #define PIPE_ARCH_BIG_ENDIAN + #endif + diff --git a/MesaLib-dfbsd/patches/patch-src_gallium_state__trackers_clover_llvm_invocation.cpp b/MesaLib-dfbsd/patches/patch-src_gallium_state__trackers_clover_llvm_invocation.cpp new file mode 100644 index 0000000000..10ebcf46ac --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_gallium_state__trackers_clover_llvm_invocation.cpp @@ -0,0 +1,40 @@ +$NetBSD: patch-src_gallium_state__trackers_clover_llvm_invocation.cpp,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +Patch from FreeBSD ports graphics/mesa-dri 17.1.0 + +# fix errors like the following +# +# llvm/invocation.cpp:(.text+0x1275): undefined reference to `std::__1::basic_string, std::__1::allocator >::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 + create_compiler_instance(const device &dev, + const std::vector &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 copts(opts.size()); ++ std::transform(opts.begin(), opts.end(), copts.begin(), cstr); ++#else + const std::vector copts = + map(std::mem_fn(&std::string::c_str), opts); ++#endif + + const target &target = dev.ir_target(); + const std::string &device_clc_version = dev.device_clc_version(); diff --git a/MesaLib-dfbsd/patches/patch-src_gallium_state__trackers_clover_llvm_metadata.hpp b/MesaLib-dfbsd/patches/patch-src_gallium_state__trackers_clover_llvm_metadata.hpp new file mode 100644 index 0000000000..cc9ecdf93d --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_gallium_state__trackers_clover_llvm_metadata.hpp @@ -0,0 +1,21 @@ +$NetBSD: patch-src_gallium_state__trackers_clover_llvm_metadata.hpp,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +From FreeBSD ports graphics/libGL mesa 13.0.5 + +# Fix error: no matching constructor for initialization of 'std::vector' +# + +--- src/gallium/state_trackers/clover/llvm/metadata.hpp.orig 2017-02-13 11:55:49.000000000 +0000 ++++ src/gallium/state_trackers/clover/llvm/metadata.hpp +@@ -42,7 +42,11 @@ namespace clover { + get_kernel_nodes(const ::llvm::Module &mod) { + if (const ::llvm::NamedMDNode *n = + mod.getNamedMetadata("opencl.kernels")) ++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) ++ return { n->getOperand(0), n->getOperand(n->getNumOperands()) }; ++#else + return { n->op_begin(), n->op_end() }; ++#endif + else + return {}; + } diff --git a/MesaLib-dfbsd/patches/patch-src_gallium_state__trackers_clover_util_range.hpp b/MesaLib-dfbsd/patches/patch-src_gallium_state__trackers_clover_util_range.hpp new file mode 100644 index 0000000000..6ba36d1996 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_gallium_state__trackers_clover_util_range.hpp @@ -0,0 +1,40 @@ +$NetBSD: patch-src_gallium_state__trackers_clover_util_range.hpp,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +From FreeBSD ports for mesa 17.1.10: + +From b95533b981af9a6687b41418e7cc2a5652fc2bdb Mon Sep 17 00:00:00 2001 +Date: Fri, 7 Mar 2014 15:16:08 +0100 +Subject: [PATCH 3/3] Work around for clang 3.4 which fails to build Clover + +See: + https://bugs.freedesktop.org/show_bug.cgi?id=74098#c3 + +--- src/gallium/state_trackers/clover/util/range.hpp.orig 2017-09-25 16:56:19.000000000 +0000 ++++ src/gallium/state_trackers/clover/util/range.hpp +@@ -362,6 +362,14 @@ namespace clover { + return { i, i + n }; + } + ++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) ++ namespace detail { ++ template ++ using fixup_function_type = ++ typename std::conditional::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 ++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) ++ adaptor_range, Rs...> ++#else + adaptor_range ++#endif + map(F &&f, Rs &&... rs) { + return { std::forward(f), std::forward(rs)... }; + } diff --git a/MesaLib-dfbsd/patches/patch-src_gallium_winsys_radeon_drm_radeon__drm__winsys.c b/MesaLib-dfbsd/patches/patch-src_gallium_winsys_radeon_drm_radeon__drm__winsys.c new file mode 100644 index 0000000000..521800ccd7 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_gallium_winsys_radeon_drm_radeon__drm__winsys.c @@ -0,0 +1,18 @@ +$NetBSD: patch-src_gallium_winsys_radeon_drm_radeon__drm__winsys.c,v 1.1 2015/04/25 11:19:18 tnn Exp $ + +Don't create pipe thread on NetBSD. It triggers some kernel bug. +kern/49838. + +--- src/gallium/winsys/radeon/drm/radeon_drm_winsys.c.orig 2018-07-06 23:20:10.000000000 +0000 ++++ src/gallium/winsys/radeon/drm/radeon_drm_winsys.c +@@ -906,8 +906,10 @@ radeon_drm_winsys_create(int fd, const s + /* TTM aligns the BO size to the CPU page size */ + ws->info.gart_page_size = sysconf(_SC_PAGESIZE); + ++#if !defined(NO_CS_QUEUE) + if (ws->num_cpus > 1 && debug_get_option_thread()) + util_queue_init(&ws->cs_queue, "rcs", 8, 1, 0); ++#endif + + /* Create the screen at the end. The winsys must be initialized + * completely. diff --git a/MesaLib-dfbsd/patches/patch-src_gbm_Makefile.am b/MesaLib-dfbsd/patches/patch-src_gbm_Makefile.am new file mode 100644 index 0000000000..bc09de51da --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_gbm_Makefile.am @@ -0,0 +1,12 @@ +$NetBSD: patch-src_gbm_Makefile.am,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +--- src/gbm/Makefile.am.orig 2017-11-20 14:25:47.000000000 +0000 ++++ src/gbm/Makefile.am +@@ -28,6 +28,7 @@ libgbm_la_LIBADD = \ + $(top_builddir)/src/loader/libloader.la \ + $(top_builddir)/src/util/libmesautil.la \ + $(top_builddir)/src/util/libxmlconfig.la \ ++ $(PTHREAD_LIBS) \ + $(DLOPEN_LIBS) + + if HAVE_PLATFORM_WAYLAND diff --git a/MesaLib-dfbsd/patches/patch-src_glx_Makefile.am b/MesaLib-dfbsd/patches/patch-src_glx_Makefile.am new file mode 100644 index 0000000000..8b397f010e --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_glx_Makefile.am @@ -0,0 +1,49 @@ +$NetBSD: patch-src_glx_Makefile.am,v 1.3 2019/01/19 23:21:43 tnn Exp $ + +- We don't need libmesautil.la here. Those symbols seem to already be + included in libmesa.la. +- force libtool to use clang++ to link libGL on OSX. + Otherwise we get: + Undefined symbols for architecture x86_64: + "std::terminate()", referenced from: + ___clang_call_terminate in libglx.a(glsl_parser.o) + ... + +--- src/glx/Makefile.am.orig 2019-01-17 11:26:23.000000000 +0000 ++++ src/glx/Makefile.am +@@ -89,10 +89,16 @@ libglx_la_SOURCES = \ + singlepix.c \ + vertarr.c + ++if HAVE_APPLEDRI ++libglx_la_LIBADD = \ ++ $(top_builddir)/src/loader/libloader.la \ ++ $(top_builddir)/src/util/libxmlconfig.la ++else + libglx_la_LIBADD = \ + $(top_builddir)/src/loader/libloader.la \ + $(top_builddir)/src/util/libmesautil.la \ + $(top_builddir)/src/util/libxmlconfig.la ++endif + + if HAVE_DRISW + libglx_la_SOURCES += \ +@@ -136,6 +142,7 @@ libglx_la_SOURCES += \ + + SUBDIRS += apple + libglx_la_LIBADD += $(builddir)/apple/libappleglx.la ++libglx_la_LIBADD += $(top_builddir)/src/mesa/libmesa.la + endif + + if HAVE_WINDOWSDRI +@@ -187,6 +194,10 @@ lib@GL_LIB@_la_SOURCES = + lib@GL_LIB@_la_LIBADD = $(GL_LIBS) + lib@GL_LIB@_la_LDFLAGS = $(GL_LDFLAGS) + ++if HAVE_APPLEDRI ++lib@GL_LIB@_la_SOURCES += apple_dummy.cpp ++endif ++ + if HAVE_WINDOWSDRI + lib@GL_LIB@_la_LDFLAGS += -lgdi32 -lopengl32 -Wl,--disable-stdcall-fixup + endif diff --git a/MesaLib-dfbsd/patches/patch-src_glx_apple_apple__glapi.c b/MesaLib-dfbsd/patches/patch-src_glx_apple_apple__glapi.c new file mode 100644 index 0000000000..fa323569e3 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_glx_apple_apple__glapi.c @@ -0,0 +1,24 @@ +$NetBSD: patch-src_glx_apple_apple__glapi.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +https://bugs.freedesktop.org/show_bug.cgi?id=90311 +See also hacks.mk. + +--- src/glx/apple/apple_glapi.c.orig 2018-02-09 02:17:59.000000000 +0000 ++++ src/glx/apple/apple_glapi.c +@@ -39,6 +39,7 @@ + #include + + #include "main/glheader.h" ++#include "main/remap.h" + #include "glapi.h" + #include "glapitable.h" + +@@ -53,6 +54,8 @@ static void _apple_glapi_create_table(vo + if (__applegl_api) + return; + ++ _mesa_init_remap_table(); ++ + __ogl_framework_api = _glapi_create_table_from_handle(apple_cgl_get_dl_handle(), "gl"); + assert(__ogl_framework_api); + diff --git a/MesaLib-dfbsd/patches/patch-src_glx_dri__common.h b/MesaLib-dfbsd/patches/patch-src_glx_dri__common.h new file mode 100644 index 0000000000..46647b3cf6 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_glx_dri__common.h @@ -0,0 +1,17 @@ +$NetBSD: patch-src_glx_dri__common.h,v 1.1 2019/01/19 21:54:03 tnn Exp $ + +Fix error on OSX. + +--- src/glx/dri_common.h.orig 2019-01-17 11:26:23.000000000 +0000 ++++ src/glx/dri_common.h +@@ -55,8 +55,10 @@ extern struct glx_config *driConvertConf + + extern void driDestroyConfigs(const __DRIconfig **configs); + ++#if !defined(GLX_USE_APPLEGL) + extern __GLXDRIdrawable * + driFetchDrawable(struct glx_context *gc, GLXDrawable glxDrawable); ++#endif + + extern void + driReleaseDrawables(struct glx_context *gc); diff --git a/MesaLib-dfbsd/patches/patch-src_glx_dri__glx.c b/MesaLib-dfbsd/patches/patch-src_glx_dri__glx.c new file mode 100644 index 0000000000..3bfc863be7 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_glx_dri__glx.c @@ -0,0 +1,43 @@ +$NetBSD: patch-src_glx_dri__glx.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +atexit() is not a good idea in shared libraries. + +FreeBSD reported atexit bug for 10.6: +https://bugs.freedesktop.org/show_bug.cgi?id=91869 + +--- src/glx/dri_glx.c.orig 2018-01-18 21:30:28.000000000 +0000 ++++ src/glx/dri_glx.c +@@ -183,9 +183,21 @@ static struct driver_config_entry *drive + /* Called as an atexit function. Otherwise, this would have to be called with + * driver_config_mutex locked. + */ ++#if defined(HAVE_NOATEXIT) ++static Bool e_next_ever_null = False; ++ ++static void __attribute__((__destructor__)) ++#else + static void ++#endif + clear_driver_config_cache() + { ++ ++#if defined(HAVE_NOATEXIT) ++ if (!e_next_ever_null) ++ return; ++#endif ++ + while (driver_config_cache) { + struct driver_config_entry *e = driver_config_cache; + driver_config_cache = e->next; +@@ -276,7 +288,11 @@ glXGetDriverConfig(const char *driverNam + driver_config_cache = e; + + if (!e->next) ++#if defined(HAVE_NOATEXIT) ++ e_next_ever_null = True; ++#else + atexit(clear_driver_config_cache); ++#endif + + out: + pthread_mutex_unlock(&driver_config_mutex); diff --git a/MesaLib-dfbsd/patches/patch-src_glx_glxclient.h b/MesaLib-dfbsd/patches/patch-src_glx_glxclient.h new file mode 100644 index 0000000000..0f308a50b0 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_glx_glxclient.h @@ -0,0 +1,19 @@ +$NetBSD: patch-src_glx_glxclient.h,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +NetBSD only supports zero-initialized initial-exec tls variables in conjuction +with dlopen(3) at the moment. + +--- src/glx/glxclient.h.orig 2017-02-13 11:55:49.000000000 +0000 ++++ src/glx/glxclient.h +@@ -661,7 +661,11 @@ extern void __glXSetCurrentContext(struc + extern __thread void *__glX_tls_Context + __attribute__ ((tls_model("initial-exec"))); + ++#if defined(__NetBSD__) ++# define __glXGetCurrentContext() (likely(__glX_tls_Context) ? __glX_tls_Context : (void*)&dummyContext) ++#else + # define __glXGetCurrentContext() __glX_tls_Context ++#endif + + # else + diff --git a/MesaLib-dfbsd/patches/patch-src_glx_glxcurrent.c b/MesaLib-dfbsd/patches/patch-src_glx_glxcurrent.c new file mode 100644 index 0000000000..fcbe07312b --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_glx_glxcurrent.c @@ -0,0 +1,40 @@ +$NetBSD: patch-src_glx_glxcurrent.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +Interim fix for toolchain/50277. + +NetBSD only supports zero-initialized initial-exec tls variables in conjuction +with dlopen(3) at the moment. + +--- src/glx/glxcurrent.c.orig 2018-02-09 02:17:59.000000000 +0000 ++++ src/glx/glxcurrent.c +@@ -40,6 +40,18 @@ + #include "glx_error.h" + + /* ++ * MASSIVE KLUDGE! ++ * We need these to not be extern in libGL.so because of ++ * PR toolchain/50277 ++ */ ++#if defined(GLX_USE_TLS) && defined(__NetBSD__) ++_X_EXPORT __thread struct _glapi_table * _glapi_tls_Dispatch ++ __attribute__((tls_model("initial-exec"))) = NULL; ++_X_EXPORT __thread void * _glapi_tls_Context ++ __attribute__((tls_model("initial-exec"))); ++#endif ++ ++/* + ** We setup some dummy structures here so that the API can be used + ** even if no context is current. + */ +@@ -77,7 +89,11 @@ _X_HIDDEN pthread_mutex_t __glXmutex = P + * \c __glXGetCurrentContext can be implemented as trivial macro. + */ + __thread void *__glX_tls_Context __attribute__ ((tls_model("initial-exec"))) ++#if defined(__NetBSD__) ++ = NULL; /* non-zero initializers not supported with dlopen */ ++#else + = &dummyContext; ++#endif + + _X_HIDDEN void + __glXSetCurrentContext(struct glx_context * c) diff --git a/MesaLib-dfbsd/patches/patch-src_glx_glxext.c b/MesaLib-dfbsd/patches/patch-src_glx_glxext.c new file mode 100644 index 0000000000..1ce9e9b86e --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_glx_glxext.c @@ -0,0 +1,47 @@ +$NetBSD: patch-src_glx_glxext.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +* Patch from FreeBSD ports graphics/mesa-dri 18.0.0 + +# work-around for https://bugs.freedesktop.org/show_bug.cgi?id=100627 + +* Extended to DragonFly and NetBSD. Other OSes might need this as well. + +* Added logging statements to note dri3 initialization being invoked. + +--- src/glx/glxext.c.orig 2017-12-08 13:49:11.000000000 +0000 ++++ src/glx/glxext.c +@@ -55,6 +55,7 @@ + #include + #include + ++#include "dri_common.h" + + #ifdef DEBUG + void __glXDumpDrawBuffer(struct glx_context * ctx); +@@ -817,7 +818,11 @@ AllocAndFetchScreenConfigs(Display * dpy + #if defined(GLX_USE_DRM) + #if defined(HAVE_DRI3) + if (priv->dri3Display) ++ InfoMessageF("glxext.c: AllocAndFetchScreenConfigs: priv->dri3Display\n"); ++ if (priv->dri3Display) + psc = (*priv->dri3Display->createScreen) (i, priv); ++ if (psc != NULL && priv->dri3Display) ++ InfoMessageF("glxext.c: AllocAndFetchScreenConfigs: psc set by priv->dri3Display\n"); + #endif /* HAVE_DRI3 */ + if (psc == NULL && priv->dri2Display) + psc = (*priv->dri2Display->createScreen) (i, priv); +@@ -920,8 +925,13 @@ __glXInitialize(Display * dpy) + #if defined(GLX_USE_DRM) + if (glx_direct && glx_accel) { + #if defined(HAVE_DRI3) +- if (!env_var_as_boolean("LIBGL_DRI3_DISABLE", false)) ++#if ((defined(__FreeBSD__) || defined(__FreeBSD_kernel__)) && !defined(__DRM_NEXT__)) || defined(__DragonFly__) || defined(__NetBSD__) ++ if (env_var_as_boolean("LIBGL_DRI3_ENABLE", false)) ++#endif ++ if (!env_var_as_boolean("LIBGL_DRI3_DISABLE", false)) { ++ InfoMessageF("glxext.c: __glxInitialize: dpyPriv->dri3Display = dri3_create_display\n"); + dpyPriv->dri3Display = dri3_create_display(dpy); ++ } + #endif /* HAVE_DRI3 */ + dpyPriv->dri2Display = dri2CreateDisplay(dpy); + dpyPriv->driDisplay = driCreateDisplay(dpy); diff --git a/MesaLib-dfbsd/patches/patch-src_intel_Makefile.tools.am b/MesaLib-dfbsd/patches/patch-src_intel_Makefile.tools.am new file mode 100644 index 0000000000..cc2f67a2dc --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_intel_Makefile.tools.am @@ -0,0 +1,14 @@ +$NetBSD: patch-src_intel_Makefile.tools.am,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +-lrt for shm_open in aubinator.c, a more portable alternative to memfd_create + +--- src/intel/Makefile.tools.am.orig 2018-09-07 21:18:07.000000000 +0000 ++++ src/intel/Makefile.tools.am +@@ -43,6 +43,7 @@ tools_aubinator_LDADD = \ + $(PTHREAD_LIBS) \ + $(DLOPEN_LIBS) \ + $(ZLIB_LIBS) \ ++ -lrt \ + -lm + + diff --git a/MesaLib-dfbsd/patches/patch-src_intel_compiler_brw__fs__bank__conflicts.cpp b/MesaLib-dfbsd/patches/patch-src_intel_compiler_brw__fs__bank__conflicts.cpp new file mode 100644 index 0000000000..da81a98c10 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_intel_compiler_brw__fs__bank__conflicts.cpp @@ -0,0 +1,23 @@ +$NetBSD: patch-src_intel_compiler_brw__fs__bank__conflicts.cpp,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=225415 +FreeBSD Bugzilla: Bug 225415 graphics/mesa-dri: update to 18.0.0 + +compiler/brw_fs_bank_conflicts.cpp:719:25: error: scalar initializer cannot be empty + vector_type s_p = {}, s_n = {}; + ^~ +compiler/brw_fs_bank_conflicts.cpp:719:35: error: scalar initializer cannot be empty + vector_type s_p = {}, s_n = {}; + ^~ + +--- src/intel/compiler/brw_fs_bank_conflicts.cpp.orig 2018-02-09 02:17:59.000000000 +0000 ++++ src/intel/compiler/brw_fs_bank_conflicts.cpp +@@ -716,7 +716,7 @@ namespace { + const weight_vector_type &conflicts) + { + const unsigned m = DIV_ROUND_UP(conflicts.size, vector_width); +- vector_type s_p = {}, s_n = {}; ++ vector_type s_p = {0}, s_n = {0}; + + for (unsigned r = 0; r < m; r++) { + s_p = adds(s_p, mask(bank_mask_p.v[r], conflicts.v[r])); diff --git a/MesaLib-dfbsd/patches/patch-src_intel_isl_isl__tiled__memcpy.c b/MesaLib-dfbsd/patches/patch-src_intel_isl_isl__tiled__memcpy.c new file mode 100644 index 0000000000..8d7843f8e5 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_intel_isl_isl__tiled__memcpy.c @@ -0,0 +1,22 @@ +$NetBSD: patch-src_mesa_drivers_dri_i965_intel__tiled__memcpy.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +From wip/MesaLib 13.0.1. + +--- src/intel/isl/isl_tiled_memcpy.c.orig 2019-01-22 16:42:57.000000000 +0000 ++++ src/intel/isl/isl_tiled_memcpy.c +@@ -64,6 +64,7 @@ ror(uint32_t n, uint32_t d) + return (n >> d) | (n << (32 - d)); + } + ++#if !defined(__NetBSD__) + static inline uint32_t + bswap32(uint32_t n) + { +@@ -76,6 +77,7 @@ bswap32(uint32_t n) + (n << 24); + #endif + } ++#endif /* NetBSD */ + + /** + * Copy RGBA to BGRA - swap R and B. diff --git a/MesaLib-dfbsd/patches/patch-src_intel_tools_aub__mem.c b/MesaLib-dfbsd/patches/patch-src_intel_tools_aub__mem.c new file mode 100644 index 0000000000..c2f9287a58 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_intel_tools_aub__mem.c @@ -0,0 +1,43 @@ +$NetBSD: patch-src_intel_tools_aub__mem.c,v 1.1 2019/01/10 22:30:11 tnn Exp $ + +* Partially implement memfd_create() via mkostemp() + +--- src/intel/tools/aub_mem.c.orig 2018-12-11 21:13:57.000000000 +0000 ++++ src/intel/tools/aub_mem.c +@@ -30,11 +30,36 @@ + + #ifndef HAVE_MEMFD_CREATE + #include ++#if defined(__FreeBSD__) ++#include ++#endif + + static inline int + memfd_create(const char *name, unsigned int flags) + { ++#if defined(__linux__) + return syscall(SYS_memfd_create, name, flags); ++#elif defined(__FreeBSD__) ++ return shm_open(SHM_ANON, flags | O_RDWR | O_CREAT, 0600); ++#else /* DragonFly, NetBSD, OpenBSD, Solaris */ ++ char template[] = "/tmp/shmfd-XXXXXX"; ++#ifdef HAVE_MKOSTEMP ++ int fd = mkostemp(template, flags); ++#else ++ int fd = mkstemp(template); ++ if (flags & O_CLOEXEC) { ++ int flags = fcntl(fd, F_GETFD); ++ if (flags != -1) { ++ flags |= FD_CLOEXEC; ++ (void) fcntl(fd, F_SETFD, &flags); ++ } ++ } ++#endif /* HAVE_MKOSTEMP */ ++ if (fd >= 0) ++ unlink(template); ++ ++ return fd; ++#endif /* __linux__ */ + } + #endif + diff --git a/MesaLib-dfbsd/patches/patch-src_intel_tools_aubinator__error__decode.c b/MesaLib-dfbsd/patches/patch-src_intel_tools_aubinator__error__decode.c new file mode 100644 index 0000000000..f35b477226 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_intel_tools_aubinator__error__decode.c @@ -0,0 +1,19 @@ +$NetBSD: patch-src_intel_tools_aubinator__error__decode.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +Patch from FreeBSD ports graphics/mesa-dri 17.1.0 + +# expose getline in FreeBSD's stdio.h +# + +--- src/intel/tools/aubinator_error_decode.c.orig 2017-05-25 07:13:13.000000000 +0000 ++++ src/intel/tools/aubinator_error_decode.c +@@ -22,6 +22,9 @@ + * + */ + ++#if defined(__FreeBSD__) && __FreeBSD__ < 12 ++#define _WITH_GETLINE ++#endif + #include + #include + #include diff --git a/MesaLib-dfbsd/patches/patch-src_intel_tools_error2aub.c b/MesaLib-dfbsd/patches/patch-src_intel_tools_error2aub.c new file mode 100644 index 0000000000..021e598a4f --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_intel_tools_error2aub.c @@ -0,0 +1,19 @@ +$NetBSD$ + +Patch from FreeBSD ports graphics/mesa-dri 18.2.0 + +# expose getline in FreeBSD's stdio.h +# + +--- src/intel/tools/error2aub.c.orig 2018-08-09 00:34:30.000000000 +0000 ++++ src/intel/tools/error2aub.c +@@ -26,6 +26,9 @@ + #include + #include + #include ++#if defined(__FreeBSD__) && __FreeBSD__ < 12 ++#define _WITH_GETLINE ++#endif + #include + #include + #include diff --git a/MesaLib-dfbsd/patches/patch-src_intel_vulkan_anv__allocator.c b/MesaLib-dfbsd/patches/patch-src_intel_vulkan_anv__allocator.c new file mode 100644 index 0000000000..8f345bf651 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_intel_vulkan_anv__allocator.c @@ -0,0 +1,62 @@ +$NetBSD: patch-src_intel_vulkan_anv__allocator.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +* Partially implement memfd_create() via mkostemp() +* Ignore MAP_POPULATE if unsupported + +FreeBSD Bugzilla - Bug 225415: graphics/mesa-dri: update to 18.0.0 +https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=225415 + +--- src/intel/vulkan/anv_allocator.c.orig 2018-02-09 02:17:59.000000000 +0000 ++++ src/intel/vulkan/anv_allocator.c +@@ -25,9 +25,21 @@ + #include + #include + #include ++#ifdef __linux__ + #include ++#else ++#include ++#endif + #include + ++#ifndef MAP_POPULATE ++#define MAP_POPULATE 0 ++#endif ++ ++#ifndef MFD_CLOEXEC ++#define MFD_CLOEXEC O_CLOEXEC ++#endif ++ + #include "anv_private.h" + + #include "util/hash_table.h" +@@ -113,7 +125,29 @@ struct anv_mmap_cleanup { + static inline int + memfd_create(const char *name, unsigned int flags) + { ++#if defined(__linux__) + return syscall(SYS_memfd_create, name, flags); ++#elif defined(__FreeBSD__) ++ return shm_open(SHM_ANON, flags | O_RDWR | O_CREAT, 0600); ++#else /* DragonFly, NetBSD, OpenBSD, Solaris */ ++ char template[] = "/tmp/shmfd-XXXXXX"; ++#ifdef HAVE_MKOSTEMP ++ int fd = mkostemp(template, flags); ++#else ++ int fd = mkstemp(template); ++ if (flags & O_CLOEXEC) { ++ int flags = fcntl(fd, F_GETFD); ++ if (flags != -1) { ++ flags |= FD_CLOEXEC; ++ (void) fcntl(fd, F_SETFD, &flags); ++ } ++ } ++#endif /* HAVE_MKOSTEMP */ ++ if (fd >= 0) ++ unlink(template); ++ ++ return fd; ++#endif /* __linux__ */ + } + #endif + diff --git a/MesaLib-dfbsd/patches/patch-src_intel_vulkan_anv__device.c b/MesaLib-dfbsd/patches/patch-src_intel_vulkan_anv__device.c new file mode 100644 index 0000000000..c317e99e25 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_intel_vulkan_anv__device.c @@ -0,0 +1,61 @@ +$NetBSD: patch-src_intel_vulkan_anv__device.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +* Without sysinfo() fall back to sysconf() +* Define ETIME if missing + +FreeBSD Bugzilla - Bug 225415: graphics/mesa-dri: update to 18.0.0 +https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=225415 + +https://reviews.freebsd.org/D17872 + +* Define CLOCK_MONOTONIC_RAW if missing + +--- src/intel/vulkan/anv_device.c.orig 2019-02-02 23:08:03.000000000 +0000 ++++ src/intel/vulkan/anv_device.c +@@ -25,7 +25,9 @@ + #include + #include + #include ++#ifdef __GLIBC__ + #include ++#endif + #include + #include + #include +@@ -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. diff --git a/MesaLib-dfbsd/patches/patch-src_intel_vulkan_anv__gem.c b/MesaLib-dfbsd/patches/patch-src_intel_vulkan_anv__gem.c new file mode 100644 index 0000000000..aa6716cc1a --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_intel_vulkan_anv__gem.c @@ -0,0 +1,19 @@ +$NetBSD: patch-src_intel_vulkan_anv__gem.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +* Define ETIME if missing + +FreeBSD Bugzilla - Bug 225415: graphics/mesa-dri: update to 18.0.0 +https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=225415 + +--- src/intel/vulkan/anv_gem.c.orig 2018-02-09 02:17:59.000000000 +0000 ++++ src/intel/vulkan/anv_gem.c +@@ -26,6 +26,9 @@ + #include + #include + #include ++#ifndef ETIME ++#define ETIME ETIMEDOUT ++#endif + #include + #include + diff --git a/MesaLib-dfbsd/patches/patch-src_intel_vulkan_anv__gem__stubs.c b/MesaLib-dfbsd/patches/patch-src_intel_vulkan_anv__gem__stubs.c new file mode 100644 index 0000000000..72ef0ef14f --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_intel_vulkan_anv__gem__stubs.c @@ -0,0 +1,36 @@ +$NetBSD: patch-src_intel_vulkan_anv__gem__stubs.c,v 1.1 2019/01/10 22:30:11 tnn Exp $ + +* Partially implement memfd_create() via mkostemp() + +--- src/intel/vulkan/anv_gem_stubs.c.orig 2018-12-11 21:13:57.000000000 +0000 ++++ src/intel/vulkan/anv_gem_stubs.c +@@ -31,7 +31,29 @@ + static inline int + memfd_create(const char *name, unsigned int flags) + { ++#if defined(__linux__) + return syscall(SYS_memfd_create, name, flags); ++#elif defined(__FreeBSD__) ++ return shm_open(SHM_ANON, flags | O_RDWR | O_CREAT, 0600); ++#else /* DragonFly, NetBSD, OpenBSD, Solaris */ ++ char template[] = "/tmp/shmfd-XXXXXX"; ++#ifdef HAVE_MKOSTEMP ++ int fd = mkostemp(template, flags); ++#else ++ int fd = mkstemp(template); ++ if (flags & O_CLOEXEC) { ++ int flags = fcntl(fd, F_GETFD); ++ if (flags != -1) { ++ flags |= FD_CLOEXEC; ++ (void) fcntl(fd, F_SETFD, &flags); ++ } ++ } ++#endif /* HAVE_MKOSTEMP */ ++ if (fd >= 0) ++ unlink(template); ++ ++ return fd; ++#endif /* __linux__ */ + } + #endif + diff --git a/MesaLib-dfbsd/patches/patch-src_intel_vulkan_anv__queue.c b/MesaLib-dfbsd/patches/patch-src_intel_vulkan_anv__queue.c new file mode 100644 index 0000000000..5be2fd92e2 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_intel_vulkan_anv__queue.c @@ -0,0 +1,25 @@ +$NetBSD: patch-src_intel_vulkan_anv__queue.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +* Define ETIME if missing +* Drop header that was never used (modified for Linux inclusion) + +FreeBSD Bugzilla - Bug 225415: graphics/mesa-dri: update to 18.0.0 +https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=225415 + +--- src/intel/vulkan/anv_queue.c.orig 2018-02-09 02:17:59.000000000 +0000 ++++ src/intel/vulkan/anv_queue.c +@@ -26,8 +26,14 @@ + */ + + #include ++#include ++#ifndef ETIME ++#define ETIME ETIMEDOUT ++#endif + #include ++#if defined(__linux__) + #include ++#endif + + #include "anv_private.h" + #include "vk_util.h" diff --git a/MesaLib-dfbsd/patches/patch-src_mapi_entry__x86-64__tls.h b/MesaLib-dfbsd/patches/patch-src_mapi_entry__x86-64__tls.h new file mode 100644 index 0000000000..e97d2c480a --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_mapi_entry__x86-64__tls.h @@ -0,0 +1,32 @@ +$NetBSD: patch-src_mapi_entry__x86-64__tls.h,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +NetBSD only supports zero-initialized initial-exec tls variables in conjuction +with dlopen(3) at the moment. + +Fix --enable-glx-tls with clang. From FreeBSD. + +table_noop_array is only defined for shared-glapi. +es1api and es2api are not going to be patched for NetBSD. + +--- src/mapi/entry_x86-64_tls.h.orig 2017-11-20 14:25:47.000000000 +0000 ++++ src/mapi/entry_x86-64_tls.h +@@ -43,10 +43,19 @@ __asm__(".text\n" + + #ifndef __ILP32__ + ++#if defined(__NetBSD__) && defined(MAPI_MODE_GLAPI) + #define STUB_ASM_CODE(slot) \ + "movq " ENTRY_CURRENT_TABLE "@GOTTPOFF(%rip), %rax\n\t" \ + "movq %fs:(%rax), %r11\n\t" \ ++ "testq %r11, %r11\n\t" \ ++ "cmoveq table_noop_array@GOTPCREL(%rip), %r11\n\t" \ + "jmp *(8 * " slot ")(%r11)" ++#else ++#define STUB_ASM_CODE(slot) \ ++ "movq " ENTRY_CURRENT_TABLE "@GOTTPOFF(%rip), %rax\n\t" \ ++ "movq %fs:(%rax), %r11\n\t" \ ++ "jmp *(8 * " slot ")(%r11)" ++#endif + + #else + diff --git a/MesaLib-dfbsd/patches/patch-src_mapi_entry__x86__tls.h b/MesaLib-dfbsd/patches/patch-src_mapi_entry__x86__tls.h new file mode 100644 index 0000000000..d49dd05e30 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_mapi_entry__x86__tls.h @@ -0,0 +1,40 @@ +$NetBSD: patch-src_mapi_entry__x86__tls.h,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +NetBSD only supports zero-initialized initial-exec tls variables in conjuction +with dlopen(3) at the moment. + +Fix --enable-glx-tls with clang. From FreeBSD. + +table_noop_array is only defined for shared-glapi. +es1api and es2api are not going to be patched for NetBSD. + +--- src/mapi/entry_x86_tls.h.orig 2018-01-18 21:30:29.000000000 +0000 ++++ src/mapi/entry_x86_tls.h +@@ -56,10 +56,27 @@ __asm__(".balign 16\n" + ".balign 16\n" \ + func ":" + ++#if defined(__NetBSD__) && defined(MAPI_MODE_GLAPI) ++extern const mapi_func table_noop_array[]; + #define STUB_ASM_CODE(slot) \ + "call x86_current_tls\n\t" \ + "movl %gs:(%eax), %eax\n\t" \ ++ "testl %eax, %eax\n\t" \ ++ "je 1f\n\t" \ ++ "jmp *(4 * " slot ")(%eax)\n\t" \ ++ "1:\n\t" \ ++ "call 2f\n" \ ++ "2:\n\t" \ ++ "popl %eax\n\t" \ ++ "addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %eax\n\t" \ ++ "movl table_noop_array@GOT(%eax), %eax\n\t" \ + "jmp *(4 * " slot ")(%eax)" ++#else ++#define STUB_ASM_CODE(slot) \ ++ "call x86_current_tls\n\t" \ ++ "movl %gs:(%eax), %eax\n\t" \ ++ "jmp *(4 * " slot ")(%eax)" ++#endif + + #define MAPI_TMP_STUB_ASM_GCC + #include "mapi_tmp.h" diff --git a/MesaLib-dfbsd/patches/patch-src_mapi_glapi_gen_gl__gentable.py b/MesaLib-dfbsd/patches/patch-src_mapi_glapi_gen_gl__gentable.py new file mode 100644 index 0000000000..4145993160 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_mapi_glapi_gen_gl__gentable.py @@ -0,0 +1,15 @@ +$NetBSD: patch-src_mapi_glapi_gen_gl__gentable.py,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +FreeBSD support. + +--- src/mapi/glapi/gen/gl_gentable.py.orig 2017-02-13 11:55:49.000000000 +0000 ++++ src/mapi/glapi/gen/gl_gentable.py +@@ -44,7 +44,7 @@ header = """/* GLXEXT is the define used + #endif + + #if (defined(GLXEXT) && defined(HAVE_BACKTRACE)) \\ +- || (!defined(GLXEXT) && defined(DEBUG) && !defined(__CYGWIN__) && !defined(__MINGW32__) && !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(__DragonFly__)) ++ || (!defined(GLXEXT) && defined(DEBUG) && !defined(__CYGWIN__) && !defined(__MINGW32__) && !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(__FreeBSD__) && !defined(__DragonFly__)) + #define USE_BACKTRACE + #endif + diff --git a/MesaLib-dfbsd/patches/patch-src_mapi_u__current.c b/MesaLib-dfbsd/patches/patch-src_mapi_u__current.c new file mode 100644 index 0000000000..b4fcb36097 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_mapi_u__current.c @@ -0,0 +1,31 @@ +$NetBSD: patch-src_mapi_u__current.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +NetBSD only supports zero-initialized initial-exec tls variables in conjuction +with dlopen(3) at the moment. + +--- src/mapi/u_current.c.orig 2015-09-02 17:06:23.000000000 +0000 ++++ src/mapi/u_current.c +@@ -101,7 +101,11 @@ extern void (*__glapi_noop_table[])(void + + __thread struct _glapi_table *u_current_table + __attribute__((tls_model("initial-exec"))) ++#if defined(__NetBSD__) ++ = NULL; /* non-zero initializers not supported with dlopen */ ++#else + = (struct _glapi_table *) table_noop_array; ++#endif + + __thread void *u_current_context + __attribute__((tls_model("initial-exec"))); +@@ -283,7 +287,11 @@ struct _glapi_table * + u_current_get_table_internal(void) + { + #if defined(GLX_USE_TLS) ++# if defined(__NetBSD__) ++ return (likely(u_current_table) ? u_current_table : (struct _glapi_table *) table_noop_array); ++# else + return u_current_table; ++# endif + #else + if (ThreadSafe) + return (struct _glapi_table *) tss_get(u_current_table_tsd); diff --git a/MesaLib-dfbsd/patches/patch-src_mapi_u__current.h b/MesaLib-dfbsd/patches/patch-src_mapi_u__current.h new file mode 100644 index 0000000000..4e17195c30 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_mapi_u__current.h @@ -0,0 +1,16 @@ +$NetBSD: patch-src_mapi_u__current.h,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +NetBSD only supports zero-initialized initial-exec tls variables in conjuction +with dlopen(3) at the moment. + +--- src/mapi/u_current.h.orig 2015-09-02 17:06:23.000000000 +0000 ++++ src/mapi/u_current.h +@@ -68,7 +68,7 @@ u_current_get_context_internal(void); + static inline const struct _glapi_table * + u_current_get_table(void) + { +-#ifdef GLX_USE_TLS ++#if defined(GLX_USE_TLS) && !defined(__NetBSD__) + return u_current_table; + #else + return (likely(u_current_table) ? diff --git a/MesaLib-dfbsd/patches/patch-src_mesa_drivers_dri_i915_intel__screen.c b/MesaLib-dfbsd/patches/patch-src_mesa_drivers_dri_i915_intel__screen.c new file mode 100644 index 0000000000..50bd15a505 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_mesa_drivers_dri_i915_intel__screen.c @@ -0,0 +1,44 @@ +$NetBSD: patch-src_mesa_drivers_dri_i915_intel__screen.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +Move sys/sysctl.h include because on NetBSD, sysctl.h includes sys/param.h, +and sys/param.h defines a one argument ALIGN. Allows mesa to redefine +to a two argument ALIGN. + +Fix build on older NetBSD w/o _SC_PHYS_PAGES. + +--- src/mesa/drivers/dri/i915/intel_screen.c.orig 2017-11-10 23:18:56.000000000 +0000 ++++ src/mesa/drivers/dri/i915/intel_screen.c +@@ -28,6 +28,11 @@ + #include + #include + #include ++ ++#if defined(HAVE_SYS_SYSCTL_H) && defined(__NetBSD__) ++# include ++#endif ++ + #include "main/glheader.h" + #include "main/context.h" + #include "main/framebuffer.h" +@@ -739,6 +744,13 @@ i915_query_renderer_integer(__DRIscreen + const unsigned gpu_mappable_megabytes = + (aper_size / (1024 * 1024)) * 3 / 4; + ++#if defined(HW_PHYSMEM64) && defined(__NetBSD__) ++ int mib[2] = { CTL_HW, HW_PHYSMEM64 }; ++ uint64_t system_memory_bytes; ++ size_t len = sizeof(system_memory_bytes); ++ if (sysctl(mib, 2, &system_memory_bytes, &len, NULL, 0) != 0) ++ return -1; ++#else + const long system_memory_pages = sysconf(_SC_PHYS_PAGES); + const long system_page_size = sysconf(_SC_PAGE_SIZE); + +@@ -747,6 +759,7 @@ i915_query_renderer_integer(__DRIscreen + + const uint64_t system_memory_bytes = (uint64_t) system_memory_pages + * (uint64_t) system_page_size; ++#endif + + const unsigned system_memory_megabytes = + (unsigned) (system_memory_bytes / (1024 * 1024)); diff --git a/MesaLib-dfbsd/patches/patch-src_mesa_drivers_dri_i965_brw__performance__query.c b/MesaLib-dfbsd/patches/patch-src_mesa_drivers_dri_i965_brw__performance__query.c new file mode 100644 index 0000000000..2511b9da14 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_mesa_drivers_dri_i965_brw__performance__query.c @@ -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 + + #include +-#include ++#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), diff --git a/MesaLib-dfbsd/patches/patch-src_mesa_drivers_dri_i965_intel__screen.c b/MesaLib-dfbsd/patches/patch-src_mesa_drivers_dri_i965_intel__screen.c new file mode 100644 index 0000000000..d8f7aff9f4 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_mesa_drivers_dri_i965_intel__screen.c @@ -0,0 +1,81 @@ +$NetBSD: patch-src_mesa_drivers_dri_i965_intel__screen.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +Move sys/sysctl.h include because on NetBSD, sysctl.h includes sys/param.h, +and sys/param.h defines a one argument ALIGN. Allows mesa to redefine +to a two argument ALIGN. + +Fix build on older NetBSD w/o _SC_PHYS_PAGES. + +From FreeBSD ports graphics/mesa-dri 18.1.4 + +# Partial revert of the following commit because the feature check fails on 10.x +# which disables HW accel on gen4+ (the new check occurs for gen6+ as well) + +From 088449487ebcb72561d73ffb91c96302583445a8 Mon Sep 17 00:00:00 2001 +Date: Wed, 22 Mar 2017 15:20:51 -0700 +Subject: i965: Require Kernel 3.6 for Gen4-5 platforms. + +We've already required Kernel 3.6 on Gen6+ since Mesa 9.2 (May 2013, +commit 92d2f5acfadea672417b6785710c9e8b7f605e41). It seems reasonable +to require it for Gen4-5 as well, bumping the requirement from 2.6.39. + +This is necessary for glClientWaitSync with a timeout to work, which +is a feature we expose on Gen4-5. Without it, we would fall back to an +infinite wait, which is pretty bad. + +See kernel commit 172cf15d18889313bf2c3bfb81fcea08369274ef in 3.6+. + +--- src/mesa/drivers/dri/i965/intel_screen.c.orig 2017-11-10 23:18:56.000000000 +0000 ++++ src/mesa/drivers/dri/i965/intel_screen.c +@@ -27,6 +27,11 @@ + #include + #include + #include ++ ++#if defined(HAVE_SYS_SYSCTL_H) && defined(__NetBSD__) ++# include ++#endif ++ + #include "main/context.h" + #include "main/framebuffer.h" + #include "main/renderbuffer.h" +@@ -1470,6 +1475,13 @@ brw_query_renderer_integer(__DRIscreen * + const unsigned gpu_mappable_megabytes = + screen->aperture_threshold / (1024 * 1024); + ++#if defined(HW_PHYSMEM64) && defined(__NetBSD__) ++ int mib[2] = { CTL_HW, HW_PHYSMEM64 }; ++ const uint64_t system_memory_bytes; ++ size_t len = sizeof(system_memory_bytes); ++ if (sysctl(mib, 2, &system_memory_bytes, &len, NULL, 0) != 0) ++ return -1; ++#else + const long system_memory_pages = sysconf(_SC_PHYS_PAGES); + const long system_page_size = sysconf(_SC_PAGE_SIZE); + +@@ -1478,6 +1490,7 @@ brw_query_renderer_integer(__DRIscreen * + + const uint64_t system_memory_bytes = (uint64_t) system_memory_pages + * (uint64_t) system_page_size; ++#endif + + const unsigned system_memory_megabytes = + (unsigned) (system_memory_bytes / (1024 * 1024)); +@@ -1840,10 +1853,17 @@ intel_init_bufmgr(struct intel_screen *s + return false; + } + ++#if defined(__FreeBSD__) ++ if (!intel_get_boolean(screen, I915_PARAM_HAS_RELAXED_DELTA)) { ++ fprintf(stderr, "[%s: %u] Kernel 2.6.39 required.\n", __func__, __LINE__); ++ return false; ++ } ++#else + if (!intel_get_boolean(screen, I915_PARAM_HAS_EXEC_NO_RELOC)) { + fprintf(stderr, "[%s: %u] Kernel 3.9 required.\n", __func__, __LINE__); + return false; + } ++#endif + + return true; + } diff --git a/MesaLib-dfbsd/patches/patch-src_mesa_drivers_dri_swrast_swrast.c b/MesaLib-dfbsd/patches/patch-src_mesa_drivers_dri_swrast_swrast.c new file mode 100644 index 0000000000..a355983d7b --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_mesa_drivers_dri_swrast_swrast.c @@ -0,0 +1,19 @@ +$NetBSD: patch-src_mesa_drivers_dri_swrast_swrast.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +Fix build on older NetBSD w/o _SC_PHYS_PAGES. + +--- src/mesa/drivers/dri/swrast/swrast.c.orig 2017-10-19 12:23:53.000000000 +0000 ++++ src/mesa/drivers/dri/swrast/swrast.c +@@ -151,6 +151,12 @@ swrast_query_renderer_integer(__DRIscree + size_t len = sizeof(system_memory_bytes); + if (sysctl(mib, 2, &system_memory_bytes, &len, NULL, 0) != 0) + return -1; ++#elif defined(HW_PHYSMEM64) && defined(__NetBSD__) ++ int mib[2] = { CTL_HW, HW_PHYSMEM64 }; ++ uint64_t system_memory_bytes; ++ size_t len = sizeof(system_memory_bytes); ++ if (sysctl(mib, 2, &system_memory_bytes, &len, NULL, 0) != 0) ++ return -1; + #elif defined(_SC_PHYS_PAGES) && defined(_SC_PAGE_SIZE) + /* XXX: Do we want to return the full amount of system memory ? */ + const long system_memory_pages = sysconf(_SC_PHYS_PAGES); diff --git a/MesaLib-dfbsd/patches/patch-src_mesa_drivers_x11_Makefile.am b/MesaLib-dfbsd/patches/patch-src_mesa_drivers_x11_Makefile.am new file mode 100644 index 0000000000..6e9b38bd41 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_mesa_drivers_x11_Makefile.am @@ -0,0 +1,15 @@ +$NetBSD: patch-src_mesa_drivers_x11_Makefile.am,v 1.1 2019/01/19 21:54:03 tnn Exp $ + +We don't need libmesautil.la here. Those symbols seem to already be +included in libmesa.la. + +--- src/mesa/drivers/x11/Makefile.am.orig 2019-01-17 11:26:23.000000000 +0000 ++++ src/mesa/drivers/x11/Makefile.am +@@ -68,7 +68,6 @@ GL_PATCH = 0 + lib@GL_LIB@_la_LIBADD = \ + $(top_builddir)/src/mesa/libmesa.la \ + $(top_builddir)/src/mapi/glapi/libglapi.la \ +- $(top_builddir)/src/util/libmesautil.la \ + $(SHARED_GLAPI_LIB) \ + $(GL_LIB_DEPS) + diff --git a/MesaLib-dfbsd/patches/patch-src_mesa_main_context.c b/MesaLib-dfbsd/patches/patch-src_mesa_main_context.c new file mode 100644 index 0000000000..255f0c83ca --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_mesa_main_context.c @@ -0,0 +1,57 @@ +$NetBSD: patch-src_mesa_main_context.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +* Fix exit time segfault of qt5 application with modular xorg + +Bug 82246 (atexit) - Libraries should not call atexit() + +https://bugs.freedesktop.org/show_bug.cgi?id=82246 + +FreeBSD reported atexit bug for 10.6: +https://bugs.freedesktop.org/show_bug.cgi?id=91869 + +--- src/mesa/main/context.c.orig 2017-11-20 14:25:47.000000000 +0000 ++++ src/mesa/main/context.c +@@ -354,11 +354,23 @@ mtx_t OneTimeLock = _MTX_INITIALIZER_NP; + * Calls all the various one-time-fini functions in Mesa + */ + ++#if defined(HAVE_NOATEXIT) ++static GLbitfield api_init_mask = 0x0; ++static void __attribute__((__destructor__)) ++#else + static void ++#endif + one_time_fini(void) + { ++#if defined(HAVE_NOATEXIT) ++ if (api_init_mask) { ++ _mesa_destroy_shader_compiler(); ++ _mesa_locale_fini(); ++ } ++#else + _mesa_destroy_shader_compiler(); + _mesa_locale_fini(); ++#endif + } + + /** +@@ -373,7 +385,9 @@ one_time_fini(void) + static void + one_time_init( struct gl_context *ctx ) + { ++#if !defined(HAVE_NOATEXIT) + static GLbitfield api_init_mask = 0x0; ++#endif + + mtx_lock(&OneTimeLock); + +@@ -398,7 +412,9 @@ one_time_init( struct gl_context *ctx ) + _mesa_ubyte_to_float_color_tab[i] = (float) i / 255.0F; + } + ++#if !defined(HAVE_NOATEXIT) + atexit(one_time_fini); ++#endif + + #if defined(DEBUG) + if (MESA_VERBOSE != 0) { diff --git a/MesaLib-dfbsd/patches/patch-src_mesa_main_extensions.c b/MesaLib-dfbsd/patches/patch-src_mesa_main_extensions.c new file mode 100644 index 0000000000..f95e76ba3f --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_mesa_main_extensions.c @@ -0,0 +1,31 @@ +$NetBSD: patch-src_mesa_main_extensions.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +atexit() is not a good idea in shared libraries. + +FreeBSD reported atexit bug for 10.6: +https://bugs.freedesktop.org/show_bug.cgi?id=91869 + +--- src/mesa/main/extensions.c.orig 2018-02-09 02:17:59.000000000 +0000 ++++ src/mesa/main/extensions.c +@@ -203,7 +203,11 @@ set_extension(struct gl_extensions *ext, + * This string is allocated early during the first context creation by + * _mesa_one_time_init_extension_overrides. + */ ++#if defined(HAVE_NOATEXIT) ++static void __attribute__((__destructor__)) ++#else + static void ++#endif + free_unknown_extensions_strings(void) + { + free(unrecognized_extensions); +@@ -293,7 +297,9 @@ _mesa_one_time_init_extension_overrides( + free(env); + } else { + unrecognized_extensions = env; ++#if !defined(HAVE_NOATEXIT) + atexit(free_unknown_extensions_strings); ++#endif + } + } + diff --git a/MesaLib-dfbsd/patches/patch-src_mesa_main_macros.h b/MesaLib-dfbsd/patches/patch-src_mesa_main_macros.h new file mode 100644 index 0000000000..4c2ab4bb54 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_mesa_main_macros.h @@ -0,0 +1,18 @@ +$NetBSD: patch-src_mesa_main_macros.h,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +ALIGN is also defined in sys/param.h on NetBSD. + +Extend undefining ALIGN to all other OSes. + +--- src/mesa/main/macros.h.orig 2017-11-10 23:18:56.000000000 +0000 ++++ src/mesa/main/macros.h +@@ -677,6 +677,9 @@ minify(unsigned value, unsigned levels) + * + * \sa ROUND_DOWN_TO() + */ ++#ifdef ALIGN ++#undef ALIGN ++#endif + static inline uintptr_t + ALIGN(uintptr_t value, int32_t alignment) + { diff --git a/MesaLib-dfbsd/patches/patch-src_mesa_main_shader__query.cpp b/MesaLib-dfbsd/patches/patch-src_mesa_main_shader__query.cpp new file mode 100644 index 0000000000..5947beff03 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_mesa_main_shader__query.cpp @@ -0,0 +1,58 @@ +$NetBSD: patch-src_mesa_main_shader__query.cpp,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +https://bugs.freedesktop.org/show_bug.cgi?id=66346 + +From c4a1fec68d2508ff0c4fc2831465aca8c4ca783a Mon Sep 17 00:00:00 2001 +From: Julien Isorce +Date: Wed, 22 Apr 2015 23:04:42 +0100 +Subject: [PATCH 1/2] shader_query: convert GLhandleARB to uintptr_t before + troncating to GLuint + +Fixes compiler error on OSX as GLhandleARB is defined as void* if __APPLE__. + +https://bugs.freedesktop.org/show_bug.cgi?id=66346 +--- + src/mesa/main/shader_query.cpp | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- src/mesa/main/shader_query.cpp.orig 2016-11-10 22:05:17.000000000 +0000 ++++ src/mesa/main/shader_query.cpp +@@ -70,7 +70,12 @@ _mesa_BindAttribLocation(GLuint program, + GET_CURRENT_CONTEXT(ctx); + + struct gl_shader_program *const shProg = ++#if defined(__APPLE__) ++ _mesa_lookup_shader_program_err(ctx, (GLuint)(uintptr_t)program, "glBindAttribLocation"); ++#else + _mesa_lookup_shader_program_err(ctx, program, "glBindAttribLocation"); ++#endif ++ + if (!shProg) + return; + +@@ -114,7 +119,12 @@ _mesa_GetActiveAttrib(GLuint program, GL + return; + } + ++#if defined(__APPLE__) ++ shProg = _mesa_lookup_shader_program_err(ctx, (GLuint)(uintptr_t)program, "glGetActiveAttrib"); ++#else + shProg = _mesa_lookup_shader_program_err(ctx, program, "glGetActiveAttrib"); ++#endif ++ + if (!shProg) + return; + +@@ -159,7 +169,12 @@ _mesa_GetAttribLocation(GLuint program, + { + GET_CURRENT_CONTEXT(ctx); + struct gl_shader_program *const shProg = ++ ++#if defined(__APPLE__) ++ _mesa_lookup_shader_program_err(ctx, (GLuint)(uintptr_t)program, "glGetAttribLocation"); ++#else + _mesa_lookup_shader_program_err(ctx, program, "glGetAttribLocation"); ++#endif + + if (!shProg) { + return -1; diff --git a/MesaLib-dfbsd/patches/patch-src_mesa_x86_common__x86.c b/MesaLib-dfbsd/patches/patch-src_mesa_x86_common__x86.c new file mode 100644 index 0000000000..d3f37abba4 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_mesa_x86_common__x86.c @@ -0,0 +1,24 @@ +$NetBSD: patch-src_mesa_x86_common__x86.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +DragonFly support. + +--- src/mesa/x86/common_x86.c.orig 2017-05-10 14:13:58.000000000 +0000 ++++ src/mesa/x86/common_x86.c +@@ -35,7 +35,7 @@ + */ + + /* XXX these includes should probably go into imports.h or glheader.h */ +-#if defined(USE_SSE_ASM) && defined(__FreeBSD__) ++#if defined(USE_SSE_ASM) && (defined(__FreeBSD__) || defined(__DragonFly__)) + #include + #include + #endif +@@ -125,7 +125,7 @@ static LONG WINAPI ExceptionFilter(LPEXC + */ + void _mesa_check_os_sse_support( void ) + { +-#if defined(__FreeBSD__) ++#if defined(__FreeBSD__) || defined(__DragonFly__) + { + int ret, enabled; + unsigned int len; diff --git a/MesaLib-dfbsd/patches/patch-src_util_Makefile.am b/MesaLib-dfbsd/patches/patch-src_util_Makefile.am new file mode 100644 index 0000000000..48facf1ec6 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_util_Makefile.am @@ -0,0 +1,15 @@ +$NetBSD: patch-src_util_Makefile.am,v 1.1 2019/01/10 22:30:11 tnn Exp $ + +handled with CONF_FILES + +--- src/util/Makefile.am.orig 2018-12-11 21:13:57.000000000 +0000 ++++ src/util/Makefile.am +@@ -75,7 +75,7 @@ libxmlconfig_la_CFLAGS = \ + libxmlconfig_la_LIBADD = $(EXPAT_LIBS) -lm + + drircdir = $(datadir)/drirc.d +-drirc_DATA = 00-mesa-defaults.conf ++drirc_DATA = # 00-mesa-defaults.conf + + u_atomic_test_LDADD = libmesautil.la + roundeven_test_LDADD = -lm diff --git a/MesaLib-dfbsd/patches/patch-src_util_build__id.c b/MesaLib-dfbsd/patches/patch-src_util_build__id.c new file mode 100644 index 0000000000..501bb73520 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_util_build__id.c @@ -0,0 +1,26 @@ +$NetBSD: patch-src_util_build__id.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +Patch combining DragonFly dports and FreeBSD ports graphics/mesa-dri 18.2.0 + +--- src/util/build_id.c.orig 2018-09-07 21:18:07.000000000 +0000 ++++ src/util/build_id.c +@@ -35,7 +35,19 @@ + #endif + + #ifndef ElfW ++#if defined(__DragonFly__) ++#ifdef __LP64__ ++#define ElfW(type) Elf64_##type ++#else ++#define ElfW(type) Elf32_##type ++#endif /* __LP64__ */ ++#else + #define ElfW(type) Elf_##type ++#endif /* __DragonFly__ */ ++#endif ++ ++#if defined(__FreeBSD__) && __FreeBSD__ < 12 ++typedef Elf_Note Elf_Nhdr; + #endif + + struct build_id_note { diff --git a/MesaLib-dfbsd/patches/patch-src_util_disk__cache.c b/MesaLib-dfbsd/patches/patch-src_util_disk__cache.c new file mode 100644 index 0000000000..8fd302e35c --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_util_disk__cache.c @@ -0,0 +1,29 @@ +$NetBSD: patch-src_util_disk__cache.c,v 1.1 2018/10/16 15:21:20 jperkin Exp $ + +Use fcntl() on SunOS. + +--- src/util/disk_cache.c.orig 2018-09-07 21:18:07.000000000 +0000 ++++ src/util/disk_cache.c +@@ -857,6 +857,9 @@ cache_put(void *job, int thread_index) + unsigned i = 0; + char *filename = NULL, *filename_tmp = NULL; + struct disk_cache_put_job *dc_job = (struct disk_cache_put_job *) job; ++#ifdef __sun ++ struct flock lock = {0}; ++#endif + + filename = get_cache_file(dc_job->cache, dc_job->key); + if (filename == NULL) +@@ -895,7 +898,12 @@ cache_put(void *job, int thread_index) + * open with the flock held. So just let that file be responsible + * for writing the file. + */ ++#ifdef __sun ++ lock.l_type = F_WRLCK; ++ err = fcntl(fd, F_SETLK, &lock); ++#else + err = flock(fd, LOCK_EX | LOCK_NB); ++#endif + if (err == -1) + goto done; + diff --git a/MesaLib-dfbsd/patches/patch-src_util_futex.h b/MesaLib-dfbsd/patches/patch-src_util_futex.h new file mode 100644 index 0000000000..5120686726 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_util_futex.h @@ -0,0 +1,53 @@ +$NetBSD: patch-src_util_futex.h,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +Implement futex_wake() and futex_wait() via _umtx_op() + +FreeBSD Bugzilla - Bug 225415: graphics/mesa-dri: update to 18.0.0 +https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=225415 + +--- src/util/futex.h.orig 2018-02-09 02:18:00.000000000 +0000 ++++ src/util/futex.h +@@ -29,10 +29,35 @@ + #include + #include + #include ++#if defined(__FreeBSD__) ++#include ++# if __FreeBSD__ < 11 ++# include ++# endif ++#include ++#else + #include + #include ++#endif + #include + ++#if defined(__FreeBSD__) ++static inline int futex_wake(uint32_t *addr, int count) ++{ ++ return _umtx_op(addr, UMTX_OP_WAKE, (uint32_t)count, NULL, NULL) == -1 ? errno : 0; ++} ++ ++static inline int futex_wait(uint32_t *addr, int32_t value, struct timespec *timeout) ++{ ++ void *uaddr = NULL, *uaddr2 = NULL; ++ if (timeout != NULL) { ++ const struct _umtx_time tmo = { ._timeout = *timeout, ._flags = UMTX_ABSTIME, ._clockid = CLOCK_MONOTONIC }; ++ uaddr = (void *)(uintptr_t)sizeof(tmo); ++ uaddr2 = (void *)&tmo; ++ } ++ return _umtx_op(addr, UMTX_OP_WAIT_UINT, (uint32_t)value, uaddr, uaddr2) == -1 ? errno : 0; ++} ++#else + static inline long sys_futex(void *addr1, int op, int val1, const struct timespec *timeout, void *addr2, int val3) + { + return syscall(SYS_futex, addr1, op, val1, timeout, addr2, val3); +@@ -50,6 +75,7 @@ static inline int futex_wait(uint32_t *a + return sys_futex(addr, FUTEX_WAIT_BITSET, value, timeout, NULL, + FUTEX_BITSET_MATCH_ANY); + } ++#endif + + #endif + diff --git a/MesaLib-dfbsd/patches/patch-src_util_os__time.c b/MesaLib-dfbsd/patches/patch-src_util_os__time.c new file mode 100644 index 0000000000..24699ad3d3 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_util_os__time.c @@ -0,0 +1,18 @@ +$NetBSD$ + +- Use monotonic clock for timeouts + +FreeBSD Bugzilla - Bug 225415 graphics/mesa-dri: update to 18.0.0 +https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=225415 + +--- src/util/os_time.c.orig 2018-05-11 23:27:04.000000000 +0000 ++++ src/util/os_time.c +@@ -95,7 +95,7 @@ os_time_get_nano(void) + void + os_time_sleep(int64_t usecs) + { +-#if defined(PIPE_OS_LINUX) ++#if (defined(HAVE_CLOCK_NANOSLEEP) && (defined(__FreeBSD__) || defined(__DragonFly__))) || defined(PIPE_OS_LINUX) + struct timespec time; + time.tv_sec = usecs / 1000000; + time.tv_nsec = (usecs % 1000000) * 1000; diff --git a/MesaLib-dfbsd/patches/patch-src_util_ralloc.c b/MesaLib-dfbsd/patches/patch-src_util_ralloc.c new file mode 100644 index 0000000000..46f1e97651 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_util_ralloc.c @@ -0,0 +1,25 @@ +$NetBSD: patch-src_util_ralloc.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +FreeBSD reported atexit bug for 10.6: +https://bugs.freedesktop.org/show_bug.cgi?id=91869 + +* Fix exit time segfault of qt5 application with modular xorg +* Provide compat strnlen for older Darwin. + +--- src/util/ralloc.c.orig 2017-05-10 14:13:58.000000000 +0000 ++++ src/util/ralloc.c +@@ -368,7 +368,14 @@ ralloc_strndup(const void *ctx, const ch + if (unlikely(str == NULL)) + return NULL; + ++#if (defined(__APPLE__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0 < 1070) ++ for (n = 0; n < max; n++, str++) { ++ if (!*str) ++ break; ++ } ++#else + n = strnlen(str, max); ++#endif + ptr = ralloc_array(ctx, char, n + 1); + memcpy(ptr, str, n); + ptr[n] = '\0'; diff --git a/MesaLib-dfbsd/patches/patch-src_util_strndup.h b/MesaLib-dfbsd/patches/patch-src_util_strndup.h new file mode 100644 index 0000000000..bca6f2d575 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_util_strndup.h @@ -0,0 +1,15 @@ +$NetBSD: patch-src_util_strndup.h,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +Provide compat strndup for older Darwin. + +--- src/util/strndup.h.orig 2017-05-10 14:13:58.000000000 +0000 ++++ src/util/strndup.h +@@ -24,7 +24,7 @@ + #ifndef STRNDUP_H + #define STRNDUP_H + +-#if defined(_WIN32) ++#if defined(_WIN32) || (defined(__APPLE__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0 < 1070) + + #include // size_t + #include diff --git a/MesaLib-dfbsd/patches/patch-src_util_u__atomic.h b/MesaLib-dfbsd/patches/patch-src_util_u__atomic.h new file mode 100644 index 0000000000..b81aef1e77 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_util_u__atomic.h @@ -0,0 +1,15 @@ +$NetBSD: patch-src_util_u__atomic.h,v 1.2 2018/10/16 15:21:20 jperkin Exp $ + +Fix SunOS atomic macros. + +--- src/util/u_atomic.h.orig 2018-09-07 21:18:07.000000000 +0000 ++++ src/util/u_atomic.h +@@ -20,7 +20,7 @@ + * locally coded assembly, compiler intrinsic or ultimately a + * mutex-based implementation. + */ +-#if defined(__sun) ++#if defined(__sun) && !defined(__GNUC__) + #define PIPE_ATOMIC_OS_SOLARIS + #elif defined(_MSC_VER) + #define PIPE_ATOMIC_MSVC_INTRINSIC diff --git a/MesaLib-dfbsd/patches/patch-src_util_u__queue.c b/MesaLib-dfbsd/patches/patch-src_util_u__queue.c new file mode 100644 index 0000000000..ccba44b511 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_util_u__queue.c @@ -0,0 +1,70 @@ +$NetBSD: patch-src_util_u__queue.c,v 1.2 2019/01/10 22:30:11 tnn Exp $ + +atexit() is not a good idea in shared libraries. + +FreeBSD reported atexit bug for 10.6: +https://bugs.freedesktop.org/show_bug.cgi?id=91869 + +--- src/util/u_queue.c.orig 2018-12-11 21:13:57.000000000 +0000 ++++ src/util/u_queue.c +@@ -46,11 +46,22 @@ static once_flag atexit_once_flag = ONCE + static struct list_head queue_list; + static mtx_t exit_mutex = _MTX_INITIALIZER_NP; + ++#if defined(HAVE_NOATEXIT) ++static int global_init_called = 0; ++ ++static void __attribute__((__destructor__)) ++#else + static void ++#endif + atexit_handler(void) + { + struct util_queue *iter; + ++#if defined(HAVE_NOATEXIT) ++ if (!global_init_called) ++ return; ++#endif ++ + mtx_lock(&exit_mutex); + /* Wait for all queues to assert idle. */ + LIST_FOR_EACH_ENTRY(iter, &queue_list, head) { +@@ -63,7 +74,11 @@ static void + global_init(void) + { + LIST_INITHEAD(&queue_list); ++#if defined(HAVE_NOATEXIT) ++ global_init_called = 1; ++#else + atexit(atexit_handler); ++#endif + } + + static void +@@ -244,12 +259,25 @@ util_queue_thread_func(void *input) + /* Don't inherit the thread affinity from the parent thread. + * Set the full mask. + */ ++#if defined(__NetBSD__) ++ cpuset_t *cpuset; ++ cpuset = cpuset_create(); ++ if (cpuset != NULL) { ++ cpuset_zero(cpuset); ++ for (unsigned i = 0; i < cpuset_size(cpuset); i++) ++ cpuset_set(i, cpuset); ++ ++ pthread_setaffinity_np(pthread_self(), cpuset_size(cpuset), cpuset); ++ cpuset_destroy(cpuset); ++ } ++#else + cpu_set_t cpuset; + CPU_ZERO(&cpuset); + for (unsigned i = 0; i < CPU_SETSIZE; i++) + CPU_SET(i, &cpuset); + + pthread_setaffinity_np(pthread_self(), sizeof(cpuset), &cpuset); ++#endif + } + #endif + diff --git a/MesaLib-dfbsd/patches/patch-src_util_u__thread.h b/MesaLib-dfbsd/patches/patch-src_util_u__thread.h new file mode 100644 index 0000000000..115954f246 --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_util_u__thread.h @@ -0,0 +1,115 @@ +$NetBSD: patch-src_util_u__thread.h,v 1.2 2019/01/20 09:50:28 tnn Exp $ + +handle NetBSD-style pthread_setaffinity_np(3) + +From FreeBSD ports / DragonFly dports + +- Implement setting thread name +- Use monotonic clock for timeouts + +https://reviews.freebsd.org/D17872 + +--- src/util/u_thread.h.orig 2018-12-11 21:13:57.000000000 +0000 ++++ src/util/u_thread.h +@@ -34,6 +34,13 @@ + + #ifdef HAVE_PTHREAD + #include ++#if defined(__DragonFly__) || defined(__FreeBSD__) ++#include ++# if !defined(__DragonFly__) ++# define cpu_set_t cpuset_t ++# endif ++#undef ALIGN /* Avoid conflict on FreeBSD in main/macros.h */ ++#endif + #endif + + static inline thrd_t u_thread_create(int (*routine)(void *), void *param) +@@ -64,6 +71,8 @@ static inline void u_thread_setname( con + (__GLIBC__ >= 3 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 12)) && \ + defined(__linux__) + pthread_setname_np(pthread_self(), name); ++# elif defined(__DragonFly__) || defined(__FreeBSD__) ++ pthread_set_name_np(pthread_self(), name); + # endif + #endif + (void)name; +@@ -83,6 +92,17 @@ static inline void + util_pin_thread_to_L3(thrd_t thread, unsigned L3_index, unsigned cores_per_L3) + { + #if defined(HAVE_PTHREAD_SETAFFINITY) ++#if defined(__NetBSD__) ++ cpuset_t *cpuset; ++ cpuset = cpuset_create(); ++ if (cpuset == NULL) ++ return; ++ cpuset_zero(cpuset); ++ for (unsigned i = 0; i < cores_per_L3; i++) ++ cpuset_set(L3_index * cores_per_L3 + i, cpuset); ++ pthread_setaffinity_np(thread, cpuset_size(cpuset), cpuset); ++ cpuset_destroy(cpuset); ++#else + cpu_set_t cpuset; + + CPU_ZERO(&cpuset); +@@ -90,6 +110,7 @@ util_pin_thread_to_L3(thrd_t thread, uns + CPU_SET(L3_index * cores_per_L3 + i, &cpuset); + pthread_setaffinity_np(thread, sizeof(cpuset), &cpuset); + #endif ++#endif + } + + /** +@@ -103,6 +124,35 @@ static inline int + util_get_L3_for_pinned_thread(thrd_t thread, unsigned cores_per_L3) + { + #if defined(HAVE_PTHREAD_SETAFFINITY) ++#if defined(__NetBSD__) ++ cpuset_t *cpuset; ++ ++ cpuset = cpuset_create(); ++ if (cpuset == NULL) ++ return -1; ++ ++ if (pthread_getaffinity_np(thread, cpuset_size(cpuset), cpuset) == 0) { ++ int L3_index = -1; ++ ++ for (unsigned i = 0; i < cpuset_size(cpuset); i++) { ++ if (cpuset_isset(i, cpuset)) { ++ int x = i / cores_per_L3; ++ ++ if (L3_index != x) { ++ if (L3_index == -1) ++ L3_index = x; ++ else { ++ cpuset_destroy(cpuset); ++ return -1; /* multiple L3s are set */ ++ } ++ } ++ } ++ } ++ cpuset_destroy(cpuset); ++ return L3_index; ++ } ++ cpuset_destroy(cpuset); ++#else + cpu_set_t cpuset; + + if (pthread_getaffinity_np(thread, sizeof(cpuset), &cpuset) == 0) { +@@ -123,6 +173,7 @@ util_get_L3_for_pinned_thread(thrd_t thr + return L3_index; + } + #endif ++#endif + return -1; + } + +@@ -134,7 +185,7 @@ util_get_L3_for_pinned_thread(thrd_t thr + static inline int64_t + u_thread_get_time_nano(thrd_t thread) + { +-#if defined(__linux__) && defined(HAVE_PTHREAD) ++#if (defined(__linux__) || defined(__DragonFly__) || defined(__FreeBSD__)) && defined(HAVE_PTHREAD) + struct timespec ts; + clockid_t cid; + diff --git a/MesaLib-dfbsd/patches/patch-src_util_xmlconfig.c b/MesaLib-dfbsd/patches/patch-src_util_xmlconfig.c new file mode 100644 index 0000000000..b429692fea --- /dev/null +++ b/MesaLib-dfbsd/patches/patch-src_util_xmlconfig.c @@ -0,0 +1,31 @@ +$NetBSD: patch-src_util_xmlconfig.c,v 1.1 2018/10/07 23:49:31 ryoon Exp $ + +PR pkg/50202. +Provide compat strndup for older Darwin. + +--- src/util/xmlconfig.c.orig 2018-09-07 21:18:07.000000000 +0000 ++++ src/util/xmlconfig.c +@@ -39,6 +39,23 @@ + #include "xmlconfig.h" + #include "u_process.h" + ++#if (defined(__APPLE__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0 < 1070) ++static char * ++strndup(const char *str, size_t n) ++{ ++ size_t len; ++ char *copy; ++ ++ for (len = 0; len < n && str[len]; len++) ++ continue; ++ ++ if ((copy = (char *)malloc(len + 1)) == NULL) ++ return (NULL); ++ memcpy(copy, str, len); ++ copy[len] = '\0'; ++ return (copy); ++} ++#endif + + /** \brief Find an option in an option cache with the name as key */ + static uint32_t