diff options
author | K900 <me@0upti.me> | 2024-02-15 17:03:10 +0300 |
---|---|---|
committer | K900 <me@0upti.me> | 2024-02-15 17:09:17 +0300 |
commit | 257553e4ed2257cf5be385ef9db33c07880d6444 (patch) | |
tree | 4ba0f136fb6aaf3f566092387949fc29793dfd33 /pkgs/development/libraries/mesa | |
parent | c25b566037fe377dda725c0e7868f79ccd28f1d8 (diff) |
mesa: 23.3.5 -> 24.0.1
- enable nvk - Rust is now mandatory - drop merged Darwin fixes - drop unnecessary musl patch - clean up some outdated comments - add some slightly less outdated (hopefully) comments
Diffstat (limited to 'pkgs/development/libraries/mesa')
5 files changed, 52 insertions, 308 deletions
diff --git a/pkgs/development/libraries/mesa/backports/0001-dri-added-build-dependencies-for-systems-using-non-s.patch b/pkgs/development/libraries/mesa/backports/0001-dri-added-build-dependencies-for-systems-using-non-s.patch deleted file mode 100644 index c0b239c925981..0000000000000 --- a/pkgs/development/libraries/mesa/backports/0001-dri-added-build-dependencies-for-systems-using-non-s.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: "duncan.hopkins" <duncan.hopkins@foundry.com> -Date: Tue, 17 Oct 2023 09:34:31 +0100 -Subject: [PATCH] dri: added build dependencies for systems using non-standard - prefixed X11 libs. - -To get MacOS to build, some extra dependencies need to be added to a couple of build targets. -This mainly shows up when not installing the dependencies in the default prefix locations. -On MacOS, this happens when using a custom build of brew to install the dependencies to 'odd' locations. - -Reviewed-by: Adam Jackson <ajax@redhat.com> -Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25992> ---- - src/gallium/targets/dri/meson.build | 2 +- - src/glx/meson.build | 2 +- - src/loader/meson.build | 2 +- - 3 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/src/gallium/targets/dri/meson.build b/src/gallium/targets/dri/meson.build -index 66619bba0db..6d3ef197e74 100644 ---- a/src/gallium/targets/dri/meson.build -+++ b/src/gallium/targets/dri/meson.build -@@ -49,7 +49,7 @@ libgallium_dri = shared_library( - link_depends : gallium_dri_link_depends, - link_with : [ - libdri, libmesa, libgalliumvl, -- libgallium, libglapi, libpipe_loader_static, libws_null, libwsw, libswdri, -+ libgallium, libglapi, libloader, libpipe_loader_static, libws_null, libwsw, libswdri, - libswkmsdri, - ], - dependencies : [ -diff --git a/src/glx/meson.build b/src/glx/meson.build -index 7ec3e3e0d88..1a5e9833956 100644 ---- a/src/glx/meson.build -+++ b/src/glx/meson.build -@@ -136,7 +136,7 @@ libglx = static_library( - ], - dependencies : [ - idep_mesautil, idep_xmlconfig, -- dep_libdrm, dep_dri2proto, dep_glproto, dep_x11, dep_glvnd, dep_xxf86vm, dep_xshmfence -+ dep_libdrm, dep_dri2proto, dep_glproto, dep_x11, dep_xext, dep_glvnd, dep_xxf86vm, dep_xshmfence - ], - ) - -diff --git a/src/loader/meson.build b/src/loader/meson.build -index 35f9991ba2f..043cc852112 100644 ---- a/src/loader/meson.build -+++ b/src/loader/meson.build -@@ -47,6 +47,6 @@ libloader = static_library( - c_args : loader_c_args, - gnu_symbol_visibility : 'hidden', - include_directories : [inc_include, inc_src, inc_util], -- dependencies : [dep_libdrm, dep_thread, dep_xcb_xrandr], -+ dependencies : [dep_libdrm, dep_thread, dep_xcb, dep_xcb_xrandr], - build_by_default : false, - ) diff --git a/pkgs/development/libraries/mesa/backports/0002-util-Update-util-libdrm.h-stubs-to-allow-loader.c-to.patch b/pkgs/development/libraries/mesa/backports/0002-util-Update-util-libdrm.h-stubs-to-allow-loader.c-to.patch deleted file mode 100644 index 5a48ace8fbbcb..0000000000000 --- a/pkgs/development/libraries/mesa/backports/0002-util-Update-util-libdrm.h-stubs-to-allow-loader.c-to.patch +++ /dev/null @@ -1,103 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: "duncan.hopkins" <duncan.hopkins@foundry.com> -Date: Tue, 17 Oct 2023 14:36:39 +0100 -Subject: [PATCH] util: Update util/libdrm.h stubs to allow loader.c to compile - on MacOS. - -MacOS does not have the libdrm libraries so is missing xf86drm.h. -util/libdrm.h already has a collection of stubs for systems that do not support the libraries. - -A compile on MacOS will fail with the source that uses newer drm functions and structures. -Update adds in missing items that MacOS code needs to compile and run. -New code is copied from the public repository: https://gitlab.freedesktop.org/mesa/drm/-/blob/main/xf86drm.h - -Reviewed-by: Adam Jackson <ajax@redhat.com> -Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25992> ---- - src/util/libdrm.h | 57 +++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 57 insertions(+) - -diff --git a/src/util/libdrm.h b/src/util/libdrm.h -index cc153cf88ab..e3af494b8d1 100644 ---- a/src/util/libdrm.h -+++ b/src/util/libdrm.h -@@ -44,22 +44,79 @@ - #define DRM_BUS_PLATFORM 2 - #define DRM_BUS_HOST1X 3 - -+typedef struct _drmPciDeviceInfo { -+ uint16_t vendor_id; -+ uint16_t device_id; -+ uint16_t subvendor_id; -+ uint16_t subdevice_id; -+ uint8_t revision_id; -+} drmPciDeviceInfo, *drmPciDeviceInfoPtr; -+ -+#define DRM_PLATFORM_DEVICE_NAME_LEN 512 -+ -+typedef struct _drmPlatformBusInfo { -+ char fullname[DRM_PLATFORM_DEVICE_NAME_LEN]; -+} drmPlatformBusInfo, *drmPlatformBusInfoPtr; -+ -+typedef struct _drmPlatformDeviceInfo { -+ char **compatible; /* NULL terminated list of compatible strings */ -+} drmPlatformDeviceInfo, *drmPlatformDeviceInfoPtr; -+ -+#define DRM_HOST1X_DEVICE_NAME_LEN 512 -+ -+typedef struct _drmHost1xBusInfo { -+ char fullname[DRM_HOST1X_DEVICE_NAME_LEN]; -+} drmHost1xBusInfo, *drmHost1xBusInfoPtr; -+ -+typedef struct _drmPciBusInfo { -+ uint16_t domain; -+ uint8_t bus; -+ uint8_t dev; -+ uint8_t func; -+} drmPciBusInfo, *drmPciBusInfoPtr; -+ - typedef struct _drmDevice { - char **nodes; /* DRM_NODE_MAX sized array */ - int available_nodes; /* DRM_NODE_* bitmask */ - int bustype; -+ union { -+ drmPciBusInfoPtr pci; -+ drmPlatformBusInfoPtr platform; -+ drmHost1xBusInfoPtr host1x; -+ } businfo; -+ union { -+ drmPciDeviceInfoPtr pci; -+ } deviceinfo; - /* ... */ - } drmDevice, *drmDevicePtr; - -+static inline int -+drmGetDevice2(int fd, uint32_t flags, drmDevicePtr *device) -+{ -+ return -ENOENT; -+} -+ - static inline int - drmGetDevices2(uint32_t flags, drmDevicePtr devices[], int max_devices) - { - return -ENOENT; - } - -+static inline int -+drmGetDeviceFromDevId(dev_t dev_id, uint32_t flags, drmDevicePtr *device) -+{ -+ return -ENOENT; -+} -+ -+static inline void -+drmFreeDevice(drmDevicePtr *device) {} -+ - static inline void - drmFreeDevices(drmDevicePtr devices[], int count) {} - -+static inline char* -+drmGetDeviceNameFromFd2(int fd) { return NULL;} -+ - typedef struct _drmVersion { - int version_major; /**< Major version */ - int version_minor; /**< Minor version */ diff --git a/pkgs/development/libraries/mesa/backports/0003-glx-fix-automatic-zink-fallback-loading-between-hw-a.patch b/pkgs/development/libraries/mesa/backports/0003-glx-fix-automatic-zink-fallback-loading-between-hw-a.patch deleted file mode 100644 index c7bde6411d8e4..0000000000000 --- a/pkgs/development/libraries/mesa/backports/0003-glx-fix-automatic-zink-fallback-loading-between-hw-a.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: "duncan.hopkins" <duncan.hopkins@foundry.com> -Date: Wed, 1 Nov 2023 11:31:13 +0000 -Subject: [PATCH] glx: fix automatic zink fallback loading between hw and sw - drivers on MacOS - -The combination of defines used when compile the code on MacOS is hiding variables. -Patch allows basic MacOS build to compile and run. - -Reviewed-by: Adam Jackson <ajax@redhat.com> -Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25992> ---- - src/glx/glxext.c | 10 ++++++++-- - 1 file changed, 8 insertions(+), 2 deletions(-) - -diff --git a/src/glx/glxext.c b/src/glx/glxext.c -index 7712e54c1d6..454f2c36a77 100644 ---- a/src/glx/glxext.c -+++ b/src/glx/glxext.c -@@ -878,12 +878,16 @@ __glXInitialize(Display * dpy) - - dpyPriv->glXDrawHash = __glxHashCreate(); - -+ Bool zink = False; -+ Bool try_zink = False; -+ - #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL) - Bool glx_direct = !debug_get_bool_option("LIBGL_ALWAYS_INDIRECT", false); - Bool glx_accel = !debug_get_bool_option("LIBGL_ALWAYS_SOFTWARE", false); - const char *env = getenv("MESA_LOADER_DRIVER_OVERRIDE"); -- Bool zink = env && !strcmp(env, "zink"); -- Bool try_zink = False; -+ -+ zink = env && !strcmp(env, "zink"); -+ try_zink = False; - - dpyPriv->drawHash = __glxHashCreate(); - -@@ -928,12 +932,14 @@ __glXInitialize(Display * dpy) - - if (!AllocAndFetchScreenConfigs(dpy, dpyPriv, zink | try_zink)) { - Bool fail = True; -+#if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL) - if (try_zink) { - free(dpyPriv->screens); - dpyPriv->driswDisplay->destroyDisplay(dpyPriv->driswDisplay); - dpyPriv->driswDisplay = driswCreateDisplay(dpy, false); - fail = !AllocAndFetchScreenConfigs(dpy, dpyPriv, False); - } -+#endif - if (fail) { - free(dpyPriv); - return NULL; diff --git a/pkgs/development/libraries/mesa/default.nix b/pkgs/development/libraries/mesa/default.nix index 38b73f56cab60..466b70cb71f75 100644 --- a/pkgs/development/libraries/mesa/default.nix +++ b/pkgs/development/libraries/mesa/default.nix @@ -1,4 +1,4 @@ -{ stdenv, lib, fetchurl, fetchpatch, buildPackages +{ stdenv, lib, fetchurl, fetchpatch, fetchCrate, buildPackages , meson, pkg-config, ninja , intltool, bison, flex, file, python3Packages, wayland-scanner , expat, libdrm, xorg, wayland, wayland-protocols, openssl @@ -10,6 +10,7 @@ if stdenv.isLinux then [ "d3d12" # WSL emulated GPU (aka Dozen) + "kmsro" # special "render only" driver for GPUs without a display controller "nouveau" # Nvidia "radeonsi" # new AMD (GCN+) "r300" # very old AMD @@ -38,6 +39,7 @@ [ "amd" # AMD (aka RADV) "microsoft-experimental" # WSL virtualized GPU (aka DZN/Dozen) + "nouveau-experimental" # Nouveau (aka NVK) "swrast" # software renderer (aka Lavapipe) ] ++ lib.optionals (stdenv.hostPlatform.isAarch -> lib.versionAtLeast stdenv.hostPlatform.parsed.cpu.version "6") [ @@ -66,6 +68,7 @@ , enableOpenCL ? stdenv.isLinux && stdenv.isx86_64 , enablePatentEncumberedCodecs ? true , jdupes +, rustPlatform , rust-bindgen , rustc , spirv-llvm-translator @@ -74,20 +77,12 @@ , udev }: -/** Packaging design: - - The basic mesa ($out) contains headers and libraries (GLU is in libGLU now). - This or the mesa attribute (which also contains GLU) are small (~ 2 MB, mostly headers) - and are designed to be the buildInput of other packages. - - DRI drivers are compiled into $drivers output, which is much bigger and - depends on LLVM. These should be searched at runtime in - "/run/opengl-driver{,-32}/lib/*" and so are kind-of impure (given by NixOS). - (I suppose on non-NixOS one would create the appropriate symlinks from there.) - - libOSMesa is in $osmesa (~4 MB) -*/ +# When updating this package, please verify at least these build (assuming x86_64-linux): +# nix build .#mesa .#pkgsi686Linux.mesa .#pkgsCross.aarch64-multiplatform.mesa .#pkgsMusl.mesa let - version = "23.3.5"; - hash = "sha256-acyxJ4ZB/1utccoPhmGIrrGpKq3E27nTX1CuvsW4tQ8="; + version = "24.0.1"; + hash = "sha256-84cZKwjEccVFWQ3RIjCio0MkSAS1/oZv7GrqAuq1dhM="; # Release calendar: https://www.mesa3d.org/release-calendar.html # Release frequency: https://www.mesa3d.org/releasing.html#schedule @@ -98,6 +93,37 @@ let haveWayland = lib.elem "wayland" eglPlatforms; haveZink = lib.elem "zink" galliumDrivers; haveDozen = (lib.elem "d3d12" galliumDrivers) || (lib.elem "microsoft-experimental" vulkanDrivers); + + rustDeps = [ + { + pname = "proc-macro2"; + version = "1.0.70"; + hash = "sha256-e4ZgyZUTu5nAtaH5QVkLelqJQX/XPj/rWkzf/g2c+1g="; + } + { + pname = "quote"; + version = "1.0.33"; + hash = "sha256-VWRCZJO0/DJbNu0/V9TLaqlwMot65YjInWT9VWg57DY="; + } + { + pname = "syn"; + version = "2.0.39"; + hash = "sha256-Mjen2L/omhVbhU/+Ao65mogs3BP3fY+Bodab3uU63EI="; + } + { + pname = "unicode-ident"; + version = "1.0.12"; + hash = "sha256-KX8NqYYw6+rGsoR9mdZx8eT1HIPEUUyxErdk2H/Rlj8="; + } + ]; + + copyRustDep = dep: '' + cp -R --no-preserve=mode,ownership ${fetchCrate dep} subprojects/${dep.pname}-${dep.version} + cp -R subprojects/packagefiles/${dep.pname}/* subprojects/${dep.pname}-${dep.version}/ + ''; + + copyRustDeps = lib.concatStringsSep "\n" (builtins.map copyRustDep rustDeps); + self = stdenv.mkDerivation { pname = "mesa"; inherit version; @@ -113,22 +139,8 @@ self = stdenv.mkDerivation { inherit hash; }; - # TODO: - # revive ./dricore-gallium.patch when it gets ported (from Ubuntu), as it saved - # ~35 MB in $drivers; watch https://launchpad.net/ubuntu/+source/mesa/+changelog patches = [ - # fixes pkgsMusl.mesa build - ./musl.patch - ./opencl.patch - - # Backports to fix build - # FIXME: remove when applied upstream - - # Fix build on macOS - ./backports/0001-dri-added-build-dependencies-for-systems-using-non-s.patch - ./backports/0002-util-Update-util-libdrm.h-stubs-to-allow-loader.c-to.patch - ./backports/0003-glx-fix-automatic-zink-fallback-loading-between-hw-a.patch ]; postPatch = '' @@ -141,6 +153,8 @@ self = stdenv.mkDerivation { "get_option('datadir')" "'${placeholder "out"}/share'" substituteInPlace src/amd/vulkan/meson.build --replace \ "get_option('datadir')" "'${placeholder "out"}/share'" + + ${copyRustDeps} ''; outputs = [ "out" "dev" "drivers" ] @@ -152,15 +166,15 @@ self = stdenv.mkDerivation { # in case anything wants to use it at some point ++ lib.optional haveDozen "spirv2dxil"; - # FIXME: this fixes rusticl/iris segfaulting on startup, _somehow_. - # Needs more investigating. + # Keep build-ids so drivers can use them for caching, etc. + # Also some drivers segfault without this. separateDebugInfo = true; + # Needed to discover llvm-config for cross preConfigure = '' PATH=${llvmPackages.libllvm.dev}/bin:$PATH ''; - # TODO: Figure out how to enable opencl without having a runtime dependency on clang mesonFlags = [ "--sysconfdir=/etc" "--datadir=${placeholder "drivers"}/share" # Vendor files @@ -212,21 +226,23 @@ self = stdenv.mkDerivation { "-Dopencl-spirv=true" # Rusticl, new OpenCL frontend - "-Dgallium-rusticl=true" "-Drust_std=2021" + "-Dgallium-rusticl=true" "-Dclang-libdir=${llvmPackages.clang-unwrapped.lib}/lib" ] ++ lib.optionals (!withValgrind) [ "-Dvalgrind=disabled" ] ++ lib.optionals (!withLibunwind) [ "-Dlibunwind=disabled" ] ++ lib.optional enablePatentEncumberedCodecs - "-Dvideo-codecs=h264dec,h264enc,h265dec,h265enc,vc1dec" + "-Dvideo-codecs=all" ++ lib.optional (vulkanLayers != []) "-D vulkan-layers=${builtins.concatStringsSep "," vulkanLayers}"; + strictDeps = true; + buildInputs = with xorg; [ expat glslang llvmPackages.libllvm libglvnd xorgproto libX11 libXext libxcb libXt libXfixes libxshmfence libXrandr libffi libvdpau libelf libXvMC - libpthreadstubs openssl /*or another sha1 provider*/ + libpthreadstubs openssl zstd ] ++ lib.optionals withLibunwind [ libunwind @@ -239,16 +255,15 @@ self = stdenv.mkDerivation { ++ lib.optional haveZink vulkan-loader ++ lib.optional haveDozen directx-headers; - depsBuildBuild = [ pkg-config ] - ++ lib.optional enableOpenCL buildPackages.stdenv.cc; + depsBuildBuild = [ pkg-config buildPackages.stdenv.cc ]; nativeBuildInputs = [ meson pkg-config ninja intltool bison flex file python3Packages.python python3Packages.mako python3Packages.ply jdupes glslang - ] ++ lib.optionals enableOpenCL [ rust-bindgen rustc ] - ++ lib.optional haveWayland wayland-scanner; + rustc rust-bindgen rustPlatform.bindgenHook + ] ++ lib.optional haveWayland wayland-scanner; propagatedBuildInputs = with xorg; [ libXdamage libXxf86vm diff --git a/pkgs/development/libraries/mesa/musl.patch b/pkgs/development/libraries/mesa/musl.patch deleted file mode 100644 index 687a159c1788d..0000000000000 --- a/pkgs/development/libraries/mesa/musl.patch +++ /dev/null @@ -1,59 +0,0 @@ -diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h -index 06ca90564f0..bb244f8f358 100644 ---- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h -+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h -@@ -30,6 +30,7 @@ - - #include <amdgpu.h> - #include <pthread.h> -+#include <sys/types.h> - #include "util/list.h" - #include "util/rwlock.h" - #include "ac_gpu_info.h" -diff --git a/src/gallium/drivers/freedreno/freedreno_util.h b/src/gallium/drivers/freedreno/freedreno_util.h -index 22f99c41909..2f3195926be 100644 ---- a/src/gallium/drivers/freedreno/freedreno_util.h -+++ b/src/gallium/drivers/freedreno/freedreno_util.h -@@ -108,6 +108,8 @@ extern bool fd_binning_enabled; - #include <sys/types.h> - #include <sys/syscall.h> - -+#define gettid() ((pid_t)syscall(SYS_gettid)) -+ - #define DBG(fmt, ...) \ - do { \ - if (FD_DBG(MSGS)) \ -diff --git a/src/gallium/frontends/nine/nine_debug.c b/src/gallium/frontends/nine/nine_debug.c -index f3a6a945025..f4a6c41a612 100644 ---- a/src/gallium/frontends/nine/nine_debug.c -+++ b/src/gallium/frontends/nine/nine_debug.c -@@ -65,7 +65,7 @@ _nine_debug_printf( unsigned long flag, - { - static boolean first = TRUE; - static unsigned long dbg_flags = DBG_ERROR | DBG_WARN; -- unsigned long tid = 0; -+ pthread_t tid = 0; - - if (first) { - first = FALSE; -@@ -74,7 +74,7 @@ _nine_debug_printf( unsigned long flag, - - #if defined(HAVE_PTHREAD) - if (dbg_flags & DBG_TID) -- tid = (unsigned long)pthread_self(); -+ tid = pthread_self(); - #endif - - if (dbg_flags & flag) { -diff --git a/src/util/rand_xor.c b/src/util/rand_xor.c -index 81b64f1ea71..56ebd2eccdf 100644 ---- a/src/util/rand_xor.c -+++ b/src/util/rand_xor.c -@@ -28,6 +28,7 @@ - #if defined(HAVE_GETRANDOM) - #include <sys/random.h> - #endif -+#include <sys/types.h> /* size_t, ssize_t */ - #include <unistd.h> - #include <fcntl.h> - #endif |