Merge pull request #213158 from K900/mesa-spring-cleaning

Mesa spring cleaning
This commit is contained in:
K900 2023-01-29 10:10:01 +03:00 committed by GitHub
commit a0c2a8bc44
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 130 additions and 63 deletions

View File

@ -0,0 +1,25 @@
{ lib, stdenv, fetchFromGitHub, meson, ninja }:
stdenv.mkDerivation rec {
pname = "directx-headers";
version = "1.608.2";
src = fetchFromGitHub {
owner = "microsoft";
repo = "DirectX-Headers";
rev = "v${version}";
hash = "sha256-F0riTDJpydqe4yhE9GKSSvnRI0Sl3oY2sOP+H/vDHG0=";
};
nativeBuildInputs = [ meson ninja ];
# tests require WSL2
mesonFlags = [ "-Dbuild-test=false" ];
meta = with lib; {
description = "Official D3D12 headers from Microsoft";
homepage = "https://github.com/microsoft/DirectX-Headers";
license = licenses.mit;
maintainers = with maintainers; [ k900 ];
platforms = platforms.all;
};
}

View File

@ -7,13 +7,13 @@ in
stdenv.mkDerivation rec {
pname = "libclc";
version = "14.0.6";
version = "15.0.7";
src = fetchFromGitHub {
owner = "llvm";
repo = "llvm-project";
rev = "llvmorg-${version}";
sha256 = "sha256-vffu4HilvYwtzwgq+NlS26m65DGbp6OSSne2aje1yJE=";
sha256 = "sha256-wjuZQyXQ/jsmvy6y1aksCcEDXGBjuhpgngF3XQJ/T4s=";
};
sourceRoot = "source/libclc";

View File

@ -6,11 +6,54 @@
, libelf, libvdpau
, libglvnd, libunwind
, vulkan-loader, glslang
, galliumDrivers ? ["auto"]
# upstream Mesa defaults to only enabling swrast (aka lavapipe) on aarch64 for some reason, so force building the others
, vulkanDrivers ? if (stdenv.isLinux && stdenv.isAarch64) then [ "swrast" "broadcom" "freedreno" "panfrost" ] else [ "auto" ]
, galliumDrivers ?
if stdenv.isLinux then
[
"d3d12" # WSL emulated GPU (aka Dozen)
"kmsro" # helper driver for display-only devices
"nouveau" # Nvidia
"radeonsi" # new AMD (GCN+)
"r300" # very old AMD
"r600" # less old AMD
"swrast" # software renderer (aka LLVMPipe)
"svga" # VMWare virtualized GPU
"virgl" # QEMU virtualized GPU (aka VirGL)
"zink" # generic OpenGL over Vulkan, experimental
]
++ lib.optionals stdenv.isAarch64 [
"etnaviv" # Vivante GPU designs (mostly NXP/Marvell SoCs)
"freedreno" # Qualcomm Adreno (all Qualcomm SoCs)
"lima" # ARM Mali 4xx
"panfrost" # ARM Mali Midgard and up (T/G series)
"tegra" # Nvidia Tegra SoCs
"v3d" # Broadcom VC5 (Raspberry Pi 4)
"vc4" # Broadcom VC4 (Raspberry Pi 0-3)
] ++ lib.optionals stdenv.isx86_64 [
"iris" # new Intel, could work on non-x86_64 with PCIe cards, but doesn't build as of 22.3.4
"crocus" # Intel legacy, x86_64 only
]
else [ "auto" ]
, vulkanDrivers ?
if stdenv.isLinux then
[
"amd" # AMD (aka RADV)
"microsoft-experimental" # WSL virtualized GPU (aka DZN/Dozen)
"swrast" # software renderer (aka Lavapipe)
"virtio-experimental" # QEMU virtualized GPU (aka VirGL)
]
++ lib.optionals stdenv.isAarch64 [
"broadcom" # Broadcom VC5 (Raspberry Pi 4, aka V3D)
"freedreno" # Qualcomm Adreno (all Qualcomm SoCs)
"imagination-experimental" # PowerVR Rogue (currently N/A)
"panfrost" # ARM Mali Midgard and up (T/G series)
]
++ lib.optionals stdenv.isx86_64 [
"intel" # Intel (aka ANV), could work on non-x86_64 with PCIe cards, but doesn't build as of 22.3.4
"intel_hasvk" # Intel Haswell/Broadwell, experimental, x86_64 only
]
else [ "auto" ]
, eglPlatforms ? [ "x11" ] ++ lib.optionals stdenv.isLinux [ "wayland" ]
, vulkanLayers ? lib.optionals (!stdenv.isDarwin) [ "device-select" "overlay" ] # No Vulkan support on Darwin
, vulkanLayers ? lib.optionals (!stdenv.isDarwin) [ "device-select" "overlay" "intel-nullhw" ] # No Vulkan support on Darwin
, OpenGL, Xplugin
, withValgrind ? lib.meta.availableOn stdenv.hostPlatform valgrind-light && !valgrind-light.meta.broken, valgrind-light
, enableGalliumNine ? stdenv.isLinux
@ -19,10 +62,12 @@
, enablePatentEncumberedCodecs ? true
, libclc
, jdupes
, cmake
, rustc
, rust-bindgen
, spirv-llvm-translator_14
, spirv-llvm-translator
, zstd
, directx-headers
, udev
}:
/** Packaging design:
@ -44,12 +89,21 @@ let
withLibdrm = lib.meta.availableOn stdenv.hostPlatform libdrm;
# Align all the Mesa versions used. Required to prevent explosions when
# two different LLVMs are loaded in the same process.
# FIXME: these should really go into some sort of versioned LLVM package set
rust-bindgen' = rust-bindgen.override {
rust-bindgen-unwrapped = rust-bindgen.unwrapped.override {
clang = llvmPackages.clang;
};
};
spirv-llvm-translator' = spirv-llvm-translator.override {
inherit (llvmPackages) llvm;
};
haveWayland = lib.elem "wayland" eglPlatforms;
haveZink = lib.elem "zink" galliumDrivers;
haveDozen = (lib.elem "d3d12" galliumDrivers) || (lib.elem "microsoft-experimental" vulkanDrivers);
self = stdenv.mkDerivation {
pname = "mesa";
inherit version;
@ -91,7 +145,11 @@ self = stdenv.mkDerivation {
outputs = [ "out" "dev" "drivers" ]
++ lib.optional enableOSMesa "osmesa"
++ lib.optional stdenv.isLinux "driversdev"
++ lib.optional enableOpenCL "opencl";
++ lib.optional enableOpenCL "opencl"
# the Dozen drivers depend on libspirv2dxil, but link it statically, and
# libspirv2dxil itself is pretty chonky, so relocate it to its own output
# 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.
@ -122,6 +180,7 @@ self = stdenv.mkDerivation {
"-Domx-libs-path=${placeholder "drivers"}/lib/bellagio"
"-Dva-libs-path=${placeholder "drivers"}/lib/dri"
"-Dd3d-drivers-path=${placeholder "drivers"}/lib/d3d"
"-Dgallium-nine=${lib.boolToString enableGalliumNine}" # Direct3D in Wine
"-Dosmesa=${lib.boolToString enableOSMesa}" # used by wine
"-Dmicrosoft-clc=disabled" # Only relevant on Windows (OpenCL 1.2 API on top of D3D12)
@ -130,8 +189,15 @@ self = stdenv.mkDerivation {
"-Dgbm-backends-path=${libglvnd.driverLink}/lib/gbm:${placeholder "out"}/lib/gbm"
] ++ lib.optionals stdenv.isLinux [
"-Dglvnd=true"
# Enable RT for Intel hardware
"-Dintel-clc=enabled"
] ++ lib.optionals enableOpenCL [
"-Dgallium-opencl=icd" # Enable the gallium OpenCL frontend
# Clover, old OpenCL frontend
"-Dgallium-opencl=icd"
"-Dopencl-spirv=true"
# Rusticl, new OpenCL frontend
"-Dgallium-rusticl=true" "-Drust_std=2021"
"-Dclang-libdir=${llvmPackages.clang-unwrapped.lib}/lib"
] ++ lib.optional enablePatentEncumberedCodecs
@ -143,24 +209,23 @@ self = stdenv.mkDerivation {
libX11 libXext libxcb libXt libXfixes libxshmfence libXrandr
libffi libvdpau libelf libXvMC
libpthreadstubs openssl /*or another sha1 provider*/
] ++ lib.optionals (lib.elem "wayland" eglPlatforms) [ wayland wayland-protocols ]
++ lib.optionals stdenv.isLinux [ libomxil-bellagio libva-minimal ]
zstd
] ++ lib.optionals haveWayland [ wayland wayland-protocols ]
++ lib.optionals stdenv.isLinux [ libomxil-bellagio libva-minimal udev ]
++ lib.optionals stdenv.isDarwin [ libunwind ]
++ lib.optionals enableOpenCL [ libclc llvmPackages.clang llvmPackages.clang-unwrapped rustc rust-bindgen' spirv-llvm-translator_14 ]
++ lib.optionals enableOpenCL [ libclc llvmPackages.clang llvmPackages.clang-unwrapped rustc rust-bindgen' spirv-llvm-translator' ]
++ lib.optional withValgrind valgrind-light
# Mesa will not build zink when gallium-drivers=auto
++ lib.optional (lib.elem "zink" galliumDrivers) vulkan-loader;
++ lib.optional haveZink vulkan-loader
++ lib.optional haveDozen directx-headers;
depsBuildBuild = [ pkg-config ];
nativeBuildInputs = [
meson pkg-config ninja
intltool bison flex file
python3Packages.python python3Packages.Mako
python3Packages.python python3Packages.Mako python3Packages.ply
jdupes glslang
] ++ lib.optionals (lib.elem "wayland" eglPlatforms) [
wayland-scanner
];
] ++ lib.optional haveWayland wayland-scanner;
propagatedBuildInputs = with xorg; [
libXdamage libXxf86vm
@ -217,6 +282,10 @@ self = stdenv.mkDerivation {
for js in $drivers/share/vulkan/{im,ex}plicit_layer.d/*.json; do
substituteInPlace "$js" --replace '"libVkLayer_' '"'"$drivers/lib/libVkLayer_"
done
'' + lib.optionalString haveDozen ''
mkdir -p $spirv2dxil/{bin,lib}
mv -t $spirv2dxil/lib $out/lib/libspirv_to_dxil*
mv -t $spirv2dxil/bin $out/bin/spirv2dxil
'';
postFixup = lib.optionalString stdenv.isLinux ''
@ -253,6 +322,10 @@ self = stdenv.mkDerivation {
NIX_CFLAGS_COMPILE = lib.optionals stdenv.isDarwin [ "-fno-common" ] ++ lib.optionals enableOpenCL [
"-UPIPE_SEARCH_DIR"
"-DPIPE_SEARCH_DIR=\"${placeholder "opencl"}/lib/gallium-pipe\""
# Work around regression from https://github.com/NixOS/nixpkgs/pull/210004
# TODO(trofi): remove
"--sysroot=/"
];
passthru = {

View File

@ -1,8 +1,8 @@
diff --git a/meson.build b/meson.build
index e32338b3f9a..fae804fd41e 100644
index 172c64a7c70..05961e56926 100644
--- a/meson.build
+++ b/meson.build
@@ -1894,7 +1894,7 @@ endif
@@ -1900,7 +1900,7 @@ endif
dep_clang = null_dep
if with_clc
@ -29,51 +29,20 @@ index 6f307018815..ab84eb1006c 100644
'platforms',
type : 'array',
diff --git a/src/gallium/targets/opencl/meson.build b/src/gallium/targets/opencl/meson.build
index 7af210b5693..ff6ac8c61ca 100644
index db3586bd7fb..4d914206d21 100644
--- a/src/gallium/targets/opencl/meson.build
+++ b/src/gallium/targets/opencl/meson.build
@@ -30,6 +30,7 @@ if with_ld_version_script
@@ -39,7 +39,8 @@ if dep_llvm.version().version_compare('>=10.0.0')
polly_isl_dep = cpp.find_library('PollyISL', dirs : llvm_libdir, required : false)
endif
llvm_libdir = dep_llvm.get_variable(cmake : 'LLVM_LIBRARY_DIR', configtool: 'libdir')
-dep_clang = cpp.find_library('clang-cpp', dirs : llvm_libdir, required : false)
+clang_libdir = get_option('clang-libdir')
opencl_libname = with_opencl_icd ? 'MesaOpenCL' : 'OpenCL'
+dep_clang = cpp.find_library('clang-cpp', dirs : clang_libdir, required : false)
polly_dep = null_dep
@@ -60,19 +61,19 @@ else
endif
if not _shared_llvm or not (dep_clang.found() and dep_clang_usable)
dep_clang = [
- cpp.find_library('clangCodeGen', dirs : llvm_libdir),
- cpp.find_library('clangFrontendTool', dirs : llvm_libdir),
- cpp.find_library('clangFrontend', dirs : llvm_libdir),
- cpp.find_library('clangDriver', dirs : llvm_libdir),
- cpp.find_library('clangSerialization', dirs : llvm_libdir),
- cpp.find_library('clangParse', dirs : llvm_libdir),
- cpp.find_library('clangSema', dirs : llvm_libdir),
- cpp.find_library('clangAnalysis', dirs : llvm_libdir),
- cpp.find_library('clangAST', dirs : llvm_libdir),
- cpp.find_library('clangASTMatchers', dirs : llvm_libdir),
- cpp.find_library('clangEdit', dirs : llvm_libdir),
- cpp.find_library('clangLex', dirs : llvm_libdir),
- cpp.find_library('clangBasic', dirs : llvm_libdir),
+ cpp.find_library('clangCodeGen', dirs : clang_libdir),
+ cpp.find_library('clangFrontendTool', dirs : clang_libdir),
+ cpp.find_library('clangFrontend', dirs : clang_libdir),
+ cpp.find_library('clangDriver', dirs : clang_libdir),
+ cpp.find_library('clangSerialization', dirs : clang_libdir),
+ cpp.find_library('clangParse', dirs : clang_libdir),
+ cpp.find_library('clangSema', dirs : clang_libdir),
+ cpp.find_library('clangAnalysis', dirs : clang_libdir),
+ cpp.find_library('clangAST', dirs : clang_libdir),
+ cpp.find_library('clangASTMatchers', dirs : clang_libdir),
+ cpp.find_library('clangEdit', dirs : clang_libdir),
+ cpp.find_library('clangLex', dirs : clang_libdir),
+ cpp.find_library('clangBasic', dirs : clang_libdir),
polly_dep, polly_isl_dep,
]
# check clang once more
@@ -119,7 +120,7 @@ if with_opencl_icd
# meson will return clang-cpp from system dirs if it's not found in llvm_libdir
linker_rpath_arg = '-Wl,--rpath=@0@'.format(llvm_libdir)
@@ -123,7 +124,7 @@ if with_opencl_icd
configuration : _config,
input : 'mesa.icd.in',
output : 'mesa.icd',

View File

@ -15916,8 +15916,6 @@ with pkgs;
spirv-llvm-translator = callPackage ../development/compilers/spirv-llvm-translator { };
spirv-llvm-translator_14 = callPackage ../development/compilers/spirv-llvm-translator { llvm = llvm_14; };
sqldeveloper = callPackage ../development/tools/database/sqldeveloper {
jdk = oraclejdk;
};
@ -22038,7 +22036,7 @@ with pkgs;
libGLU = mesa_glu;
mesa = callPackage ../development/libraries/mesa {
llvmPackages = llvmPackages_latest;
llvmPackages = llvmPackages_15;
stdenv = if stdenv.isDarwin then darwin.apple_sdk_11_0.stdenv else stdenv;
inherit (darwin.apple_sdk_11_0.frameworks) OpenGL;
inherit (darwin.apple_sdk_11_0.libs) Xplugin;
@ -24229,6 +24227,8 @@ with pkgs;
diod = callPackage ../servers/diod { lua = lua5_1; };
directx-headers = callPackage ../development/libraries/directx-headers {};
directx-shader-compiler = callPackage ../tools/graphics/directx-shader-compiler {};
dkimproxy = callPackage ../servers/mail/dkimproxy { };