mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-06-14 05:29:20 +03:00
mesa: more cleanups (#387292)
This commit is contained in:
commit
656e50abce
11 changed files with 256 additions and 99 deletions
|
@ -10,6 +10,6 @@ The NixOS desktop or other non-headless configurations are the primary target fo
|
||||||
|
|
||||||
## Nix on GNU/Linux {#nix-on-gnulinux}
|
## Nix on GNU/Linux {#nix-on-gnulinux}
|
||||||
|
|
||||||
If you are using a non-NixOS GNU/Linux/X11 desktop with free software video drivers, consider launching OpenGL-dependent programs from Nixpkgs with Nixpkgs versions of `libglvnd` and `mesa.drivers` in `LD_LIBRARY_PATH`. For Mesa drivers, the Linux kernel version doesn't have to match nixpkgs.
|
If you are using a non-NixOS GNU/Linux/X11 desktop with free software video drivers, consider launching OpenGL-dependent programs from Nixpkgs with Nixpkgs versions of `libglvnd` and `mesa` in `LD_LIBRARY_PATH`. For Mesa drivers, the Linux kernel version doesn't have to match nixpkgs.
|
||||||
|
|
||||||
For proprietary video drivers, you might have luck with also adding the corresponding video driver package.
|
For proprietary video drivers, you might have luck with also adding the corresponding video driver package.
|
||||||
|
|
|
@ -120,7 +120,7 @@ in
|
||||||
{ "r" = {}; };
|
{ "r" = {}; };
|
||||||
};
|
};
|
||||||
|
|
||||||
hardware.graphics.package = lib.mkDefault pkgs.mesa.drivers;
|
hardware.graphics.package = lib.mkDefault pkgs.mesa;
|
||||||
hardware.graphics.package32 = lib.mkDefault pkgs.pkgsi686Linux.mesa.drivers;
|
hardware.graphics.package32 = lib.mkDefault pkgs.pkgsi686Linux.mesa;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
arcan,
|
arcan,
|
||||||
audit,
|
audit,
|
||||||
dbus,
|
dbus,
|
||||||
|
dri-pkgconfig-stub,
|
||||||
libepoxy,
|
libepoxy,
|
||||||
fontutil,
|
fontutil,
|
||||||
libGL,
|
libGL,
|
||||||
|
@ -21,7 +22,7 @@
|
||||||
libxkbfile,
|
libxkbfile,
|
||||||
libxshmfence,
|
libxshmfence,
|
||||||
libgbm,
|
libgbm,
|
||||||
mesa,
|
mesa-gl-headers,
|
||||||
meson,
|
meson,
|
||||||
nettle,
|
nettle,
|
||||||
ninja,
|
ninja,
|
||||||
|
@ -60,6 +61,7 @@ stdenv.mkDerivation (finalPackages: {
|
||||||
arcan
|
arcan
|
||||||
audit
|
audit
|
||||||
dbus
|
dbus
|
||||||
|
dri-pkgconfig-stub
|
||||||
libepoxy
|
libepoxy
|
||||||
fontutil
|
fontutil
|
||||||
libGL
|
libGL
|
||||||
|
@ -76,7 +78,7 @@ stdenv.mkDerivation (finalPackages: {
|
||||||
libxkbfile
|
libxkbfile
|
||||||
libxshmfence
|
libxshmfence
|
||||||
libgbm
|
libgbm
|
||||||
mesa # uses dri_interface.h
|
mesa-gl-headers
|
||||||
nettle
|
nettle
|
||||||
openssl
|
openssl
|
||||||
pixman
|
pixman
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
, intltool
|
, intltool
|
||||||
, jdupes
|
, jdupes
|
||||||
, libdrm
|
, libdrm
|
||||||
|
, libgbm
|
||||||
, libglvnd
|
, libglvnd
|
||||||
, libunwind
|
, libunwind
|
||||||
, libva-minimal
|
, libva-minimal
|
||||||
|
@ -139,19 +140,12 @@ in stdenv.mkDerivation {
|
||||||
|
|
||||||
patches = [
|
patches = [
|
||||||
./opencl.patch
|
./opencl.patch
|
||||||
|
./system-gbm.patch
|
||||||
];
|
];
|
||||||
|
|
||||||
postPatch = ''
|
postPatch = ''
|
||||||
patchShebangs .
|
patchShebangs .
|
||||||
|
|
||||||
# The drirc.d directory cannot be installed to $drivers as that would cause a cyclic dependency:
|
|
||||||
substituteInPlace src/util/xmlconfig.c --replace \
|
|
||||||
'DATADIR "/drirc.d"' '"${placeholder "out"}/share/drirc.d"'
|
|
||||||
substituteInPlace src/util/meson.build --replace \
|
|
||||||
"get_option('datadir')" "'${placeholder "out"}/share'"
|
|
||||||
substituteInPlace src/amd/vulkan/meson.build --replace \
|
|
||||||
"get_option('datadir')" "'${placeholder "out"}/share'"
|
|
||||||
|
|
||||||
for header in ${toString mesa-gl-headers.headers}; do
|
for header in ${toString mesa-gl-headers.headers}; do
|
||||||
if ! diff -q $header ${mesa-gl-headers}/$header; then
|
if ! diff -q $header ${mesa-gl-headers}/$header; then
|
||||||
echo "File $header does not match between mesa and mesa-gl-headers, please update mesa-gl-headers first!"
|
echo "File $header does not match between mesa and mesa-gl-headers, please update mesa-gl-headers first!"
|
||||||
|
@ -163,8 +157,7 @@ in stdenv.mkDerivation {
|
||||||
'';
|
'';
|
||||||
|
|
||||||
outputs = [
|
outputs = [
|
||||||
"out" "dev"
|
"out"
|
||||||
"drivers"
|
|
||||||
# OpenCL drivers pull in ~1G of extra LLVM stuff, so don't install them
|
# OpenCL drivers pull in ~1G of extra LLVM stuff, so don't install them
|
||||||
# if the user didn't explicitly ask for it
|
# if the user didn't explicitly ask for it
|
||||||
"opencl"
|
"opencl"
|
||||||
|
@ -193,7 +186,6 @@ in stdenv.mkDerivation {
|
||||||
|
|
||||||
mesonFlags = [
|
mesonFlags = [
|
||||||
"--sysconfdir=/etc"
|
"--sysconfdir=/etc"
|
||||||
"--datadir=${placeholder "drivers"}/share"
|
|
||||||
|
|
||||||
# What to build
|
# What to build
|
||||||
(lib.mesonOption "platforms" (lib.concatStringsSep "," eglPlatforms))
|
(lib.mesonOption "platforms" (lib.concatStringsSep "," eglPlatforms))
|
||||||
|
@ -201,17 +193,10 @@ in stdenv.mkDerivation {
|
||||||
(lib.mesonOption "vulkan-drivers" (lib.concatStringsSep "," vulkanDrivers))
|
(lib.mesonOption "vulkan-drivers" (lib.concatStringsSep "," vulkanDrivers))
|
||||||
(lib.mesonOption "vulkan-layers" (lib.concatStringsSep "," vulkanLayers))
|
(lib.mesonOption "vulkan-layers" (lib.concatStringsSep "," vulkanLayers))
|
||||||
|
|
||||||
# Make sure we know where to put all the drivers
|
|
||||||
(lib.mesonOption "dri-drivers-path" "${placeholder "drivers"}/lib/dri")
|
|
||||||
(lib.mesonOption "vdpau-libs-path" "${placeholder "drivers"}/lib/vdpau")
|
|
||||||
(lib.mesonOption "va-libs-path" "${placeholder "drivers"}/lib/dri")
|
|
||||||
(lib.mesonOption "d3d-drivers-path" "${placeholder "drivers"}/lib/d3d")
|
|
||||||
|
|
||||||
# Set search paths for non-Mesa drivers (e.g. Nvidia)
|
|
||||||
(lib.mesonOption "gbm-backends-path" "${libglvnd.driverLink}/lib/gbm:${placeholder "out"}/lib/gbm")
|
|
||||||
|
|
||||||
# Enable glvnd for dynamic libGL dispatch
|
# Enable glvnd for dynamic libGL dispatch
|
||||||
(lib.mesonEnable "glvnd" true)
|
(lib.mesonEnable "glvnd" true)
|
||||||
|
(lib.mesonEnable "gbm" true)
|
||||||
|
(lib.mesonBool "libgbm-external" true)
|
||||||
|
|
||||||
(lib.mesonBool "gallium-nine" false) # Direct3D9 in Wine, largely supplanted by DXVK
|
(lib.mesonBool "gallium-nine" false) # Direct3D9 in Wine, largely supplanted by DXVK
|
||||||
(lib.mesonBool "osmesa" false) # deprecated upstream
|
(lib.mesonBool "osmesa" false) # deprecated upstream
|
||||||
|
@ -260,6 +245,8 @@ in stdenv.mkDerivation {
|
||||||
elfutils
|
elfutils
|
||||||
expat
|
expat
|
||||||
spirv-tools
|
spirv-tools
|
||||||
|
libdrm
|
||||||
|
libgbm
|
||||||
libglvnd
|
libglvnd
|
||||||
libunwind
|
libunwind
|
||||||
libva-minimal
|
libva-minimal
|
||||||
|
@ -326,109 +313,73 @@ in stdenv.mkDerivation {
|
||||||
(buildPackages.mesa.cross_tools or null)
|
(buildPackages.mesa.cross_tools or null)
|
||||||
];
|
];
|
||||||
|
|
||||||
propagatedBuildInputs = [ libdrm ];
|
|
||||||
|
|
||||||
doCheck = false;
|
doCheck = false;
|
||||||
|
|
||||||
postInstall = ''
|
postInstall = ''
|
||||||
# Move driver-related bits to $drivers
|
|
||||||
moveToOutput "lib/gallium-pipe" $drivers
|
|
||||||
moveToOutput "lib/gbm" $drivers
|
|
||||||
moveToOutput "lib/lib*_mesa*" $drivers
|
|
||||||
moveToOutput "lib/libgallium*" $drivers
|
|
||||||
moveToOutput "lib/libglapi*" $drivers
|
|
||||||
moveToOutput "lib/libpowervr_rogue*" $drivers
|
|
||||||
moveToOutput "lib/libvulkan_*" $drivers
|
|
||||||
moveToOutput "lib/libteflon.so" $drivers
|
|
||||||
|
|
||||||
# Update search path used by glvnd (it's pointing to $out but drivers are in $drivers)
|
|
||||||
for js in $drivers/share/glvnd/egl_vendor.d/*.json; do
|
|
||||||
substituteInPlace "$js" --replace-fail '"libEGL_' '"'"$drivers/lib/libEGL_"
|
|
||||||
done
|
|
||||||
|
|
||||||
# And same for Vulkan
|
|
||||||
for js in $drivers/share/vulkan/icd.d/*.json; do
|
|
||||||
substituteInPlace "$js" --replace-fail "$out" "$drivers"
|
|
||||||
done
|
|
||||||
|
|
||||||
# Move Vulkan layers to $drivers and update manifests
|
|
||||||
moveToOutput "lib/libVkLayer*" $drivers
|
|
||||||
for js in $drivers/share/vulkan/{im,ex}plicit_layer.d/*.json; do
|
|
||||||
substituteInPlace "$js" --replace '"libVkLayer_' '"'"$drivers/lib/libVkLayer_"
|
|
||||||
done
|
|
||||||
|
|
||||||
# Construct our own .icd files that contain absolute paths.
|
|
||||||
mkdir -p $opencl/etc/OpenCL/vendors/
|
|
||||||
echo $opencl/lib/libMesaOpenCL.so > $opencl/etc/OpenCL/vendors/mesa.icd
|
|
||||||
echo $opencl/lib/libRusticlOpenCL.so > $opencl/etc/OpenCL/vendors/rusticl.icd
|
|
||||||
|
|
||||||
moveToOutput bin/intel_clc $cross_tools
|
moveToOutput bin/intel_clc $cross_tools
|
||||||
moveToOutput bin/mesa_clc $cross_tools
|
moveToOutput bin/mesa_clc $cross_tools
|
||||||
moveToOutput bin/vtn_bindgen $cross_tools
|
moveToOutput bin/vtn_bindgen $cross_tools
|
||||||
|
|
||||||
moveToOutput "lib/lib*OpenCL*" $opencl
|
moveToOutput "lib/lib*OpenCL*" $opencl
|
||||||
|
# Construct our own .icd files that contain absolute paths.
|
||||||
|
mkdir -p $opencl/etc/OpenCL/vendors/
|
||||||
|
echo $opencl/lib/libMesaOpenCL.so > $opencl/etc/OpenCL/vendors/mesa.icd
|
||||||
|
echo $opencl/lib/libRusticlOpenCL.so > $opencl/etc/OpenCL/vendors/rusticl.icd
|
||||||
|
|
||||||
moveToOutput bin/spirv2dxil $spirv2dxil
|
moveToOutput bin/spirv2dxil $spirv2dxil
|
||||||
moveToOutput "lib/libspirv_to_dxil*" $spirv2dxil
|
moveToOutput "lib/libspirv_to_dxil*" $spirv2dxil
|
||||||
'';
|
'';
|
||||||
|
|
||||||
postFixup = ''
|
postFixup = ''
|
||||||
# set the default search path for DRI drivers; used e.g. by X server
|
# set full path in EGL driver manifest
|
||||||
for pc in lib/pkgconfig/{dri,d3d}.pc; do
|
for js in $out/share/glvnd/egl_vendor.d/*.json; do
|
||||||
[ -f "$dev/$pc" ] && substituteInPlace "$dev/$pc" --replace "$drivers" "${libglvnd.driverLink}"
|
substituteInPlace "$js" --replace-fail '"libEGL_' '"'"$out/lib/libEGL_"
|
||||||
done
|
done
|
||||||
|
|
||||||
# remove pkgconfig files for GL/EGL; they are provided by libGL.
|
# and in Vulkan layer manifests
|
||||||
rm -f $dev/lib/pkgconfig/{gl,egl}.pc
|
for js in $out/share/vulkan/{im,ex}plicit_layer.d/*.json; do
|
||||||
|
substituteInPlace "$js" --replace '"libVkLayer_' '"'"$out/lib/libVkLayer_"
|
||||||
|
done
|
||||||
|
|
||||||
|
# remove DRI pkg-config file, provided by dri-pkgconfig-stub
|
||||||
|
rm -f $out/lib/pkgconfig/dri.pc
|
||||||
|
|
||||||
# remove headers moved to mesa-gl-headers
|
# remove headers moved to mesa-gl-headers
|
||||||
for header in ${toString mesa-gl-headers.headers}; do
|
for header in ${toString mesa-gl-headers.headers}; do
|
||||||
rm -f $dev/$header
|
rm -f $out/$header
|
||||||
done
|
done
|
||||||
|
|
||||||
# update symlinks pointing to libgallium in $out
|
# clean up after removing stuff
|
||||||
for link in $drivers/lib/dri/*_drv_video.so $drivers/lib/vdpau/*.so.1.0.0; do
|
find $out -type d -empty -delete
|
||||||
ln -sf $drivers/lib/libgallium*.so $link
|
|
||||||
done
|
|
||||||
|
|
||||||
# Don't depend on build python
|
# Don't depend on build python
|
||||||
patchShebangs --host --update $out/bin/*
|
patchShebangs --host --update $out/bin/*
|
||||||
|
|
||||||
# NAR doesn't support hard links, so convert them to symlinks to save space.
|
# NAR doesn't support hard links, so convert them to symlinks to save space.
|
||||||
jdupes --hard-links --link-soft --recurse "$drivers"
|
jdupes --hard-links --link-soft --recurse "$out"
|
||||||
|
|
||||||
# add RPATH so the drivers can find the moved libgallium and libdricore9
|
|
||||||
# moved here to avoid problems with stripping patchelfed files
|
|
||||||
for lib in $drivers/lib/*.so* $drivers/lib/*/*.so*; do
|
|
||||||
if [[ ! -L "$lib" ]]; then
|
|
||||||
patchelf --set-rpath "$(patchelf --print-rpath $lib):$drivers/lib" "$lib"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# add RPATH here so Zink can find libvulkan.so
|
# add RPATH here so Zink can find libvulkan.so
|
||||||
patchelf --add-rpath ${vulkan-loader}/lib $drivers/lib/libgallium*.so
|
patchelf --add-rpath ${vulkan-loader}/lib $out/lib/libgallium*.so
|
||||||
'';
|
'';
|
||||||
|
|
||||||
env.NIX_CFLAGS_COMPILE = toString ([
|
|
||||||
"-UPIPE_SEARCH_DIR"
|
|
||||||
"-DPIPE_SEARCH_DIR=\"${placeholder "drivers"}/lib/gallium-pipe\""
|
|
||||||
]);
|
|
||||||
|
|
||||||
passthru = {
|
passthru = {
|
||||||
inherit (libglvnd) driverLink;
|
inherit (libglvnd) driverLink;
|
||||||
inherit llvmPackages;
|
inherit llvmPackages;
|
||||||
|
|
||||||
tests.devDoesNotDependOnLLVM = stdenv.mkDerivation {
|
# for compatibility
|
||||||
name = "mesa-dev-does-not-depend-on-llvm";
|
drivers = lib.warn "`mesa.drivers` is deprecated, use `mesa` instead" mesa;
|
||||||
|
|
||||||
|
tests.outDoesNotDependOnLLVM = stdenv.mkDerivation {
|
||||||
|
name = "mesa-does-not-depend-on-llvm";
|
||||||
buildCommand = ''
|
buildCommand = ''
|
||||||
echo ${mesa.dev} >>$out
|
echo ${mesa} >>$out
|
||||||
'';
|
'';
|
||||||
disallowedRequisites = [ llvmPackages.llvm mesa.drivers ];
|
disallowedRequisites = [ llvmPackages.llvm ];
|
||||||
};
|
};
|
||||||
|
|
||||||
llvmpipeHook = makeSetupHook {
|
llvmpipeHook = makeSetupHook {
|
||||||
name = "llvmpipe-hook";
|
name = "llvmpipe-hook";
|
||||||
substitutions.drivers = mesa.drivers;
|
substitutions.mesa = mesa;
|
||||||
} ./llvmpipe-hook.sh;
|
} ./llvmpipe-hook.sh;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
let
|
let
|
||||||
common = import ./common.nix { inherit lib fetchFromGitLab; };
|
common = import ./common.nix { inherit lib fetchFromGitLab; };
|
||||||
headers = [
|
headers = [
|
||||||
|
"include/GL/internal/dri_interface.h"
|
||||||
"include/EGL/eglext_angle.h"
|
"include/EGL/eglext_angle.h"
|
||||||
"include/EGL/eglmesaext.h"
|
"include/EGL/eglmesaext.h"
|
||||||
];
|
];
|
||||||
|
|
|
@ -2,13 +2,13 @@
|
||||||
|
|
||||||
# https://docs.mesa3d.org/envvars.html
|
# https://docs.mesa3d.org/envvars.html
|
||||||
export LIBGL_ALWAYS_SOFTWARE=true
|
export LIBGL_ALWAYS_SOFTWARE=true
|
||||||
export LIBGL_DRIVERS_PATH=@drivers@/lib/dri
|
export LIBGL_DRIVERS_PATH=@mesa@/lib/dri
|
||||||
|
|
||||||
# https://github.com/NVIDIA/libglvnd/blob/master/src/EGL/icd_enumeration.md
|
# https://github.com/NVIDIA/libglvnd/blob/master/src/EGL/icd_enumeration.md
|
||||||
export __EGL_VENDOR_LIBRARY_FILENAMES=@drivers@/share/glvnd/egl_vendor.d/50_mesa.json
|
export __EGL_VENDOR_LIBRARY_FILENAMES=@mesa@/share/glvnd/egl_vendor.d/50_mesa.json
|
||||||
|
|
||||||
# https://github.com/KhronosGroup/Vulkan-Loader/blob/main/docs/LoaderInterfaceArchitecture.md
|
# https://github.com/KhronosGroup/Vulkan-Loader/blob/main/docs/LoaderInterfaceArchitecture.md
|
||||||
# glob because the filenames contain an architecture suffix
|
# glob because the filenames contain an architecture suffix
|
||||||
# echo is needed to force-expand the glob
|
# echo is needed to force-expand the glob
|
||||||
VK_DRIVER_FILES="$(echo @drivers@/share/vulkan/icd.d/lvp_icd.*.json)"
|
VK_DRIVER_FILES="$(echo @mesa@/share/vulkan/icd.d/lvp_icd.*.json)"
|
||||||
export VK_DRIVER_FILES
|
export VK_DRIVER_FILES
|
||||||
|
|
195
pkgs/development/libraries/mesa/system-gbm.patch
Normal file
195
pkgs/development/libraries/mesa/system-gbm.patch
Normal file
|
@ -0,0 +1,195 @@
|
||||||
|
commit 69914d79c3d86b0aee80665c51074cf8cc55f660
|
||||||
|
Author: K900 <me@0upti.me>
|
||||||
|
Date: 2025-03-05 13:14:02 +0300
|
||||||
|
|
||||||
|
meson: support building with system libgbm
|
||||||
|
|
||||||
|
This is the next step towards making libgbm just a loader.
|
||||||
|
|
||||||
|
diff --git a/meson.build b/meson.build
|
||||||
|
index 4766ce838ba..300a6bb0cc8 100644
|
||||||
|
--- a/meson.build
|
||||||
|
+++ b/meson.build
|
||||||
|
@@ -2377,7 +2377,7 @@ summary(egl_summary, section: 'EGL', bool_yn: true, list_sep: ' ')
|
||||||
|
|
||||||
|
gbm_summary = {'Enabled': with_gbm}
|
||||||
|
if with_gbm
|
||||||
|
- gbm_summary += {'Backends path': gbm_backends_path}
|
||||||
|
+ gbm_summary += {'External libgbm': get_option('libgbm-external'), 'Backends path': gbm_backends_path}
|
||||||
|
endif
|
||||||
|
summary(gbm_summary, section: 'GBM', bool_yn: true, list_sep: ' ')
|
||||||
|
|
||||||
|
diff --git a/meson_options.txt b/meson_options.txt
|
||||||
|
index 2622cf1d235..7bf8ae8a1c5 100644
|
||||||
|
--- a/meson_options.txt
|
||||||
|
+++ b/meson_options.txt
|
||||||
|
@@ -329,6 +329,13 @@ option(
|
||||||
|
description : 'Build support for gbm platform'
|
||||||
|
)
|
||||||
|
|
||||||
|
+option(
|
||||||
|
+ 'libgbm-external',
|
||||||
|
+ type: 'boolean',
|
||||||
|
+ value: false,
|
||||||
|
+ description: 'Whether to use external libgbm (default: use in-tree copy)'
|
||||||
|
+)
|
||||||
|
+
|
||||||
|
option(
|
||||||
|
'gbm-backends-path',
|
||||||
|
type : 'string',
|
||||||
|
diff --git a/src/egl/meson.build b/src/egl/meson.build
|
||||||
|
index a02b83419c4..ae4b0c5e063 100644
|
||||||
|
--- a/src/egl/meson.build
|
||||||
|
+++ b/src/egl/meson.build
|
||||||
|
@@ -108,9 +108,8 @@ if with_dri
|
||||||
|
endif
|
||||||
|
if with_gbm and not with_platform_android
|
||||||
|
files_egl += files('drivers/dri2/platform_drm.c')
|
||||||
|
- link_for_egl += libgbm
|
||||||
|
- incs_for_egl += [inc_gbm, include_directories('../gbm/main')]
|
||||||
|
- deps_for_egl += dep_libdrm
|
||||||
|
+ incs_for_egl += [include_directories('../gbm/backends/dri')]
|
||||||
|
+ deps_for_egl += [dep_libdrm, dep_gbm]
|
||||||
|
endif
|
||||||
|
if with_platform_wayland
|
||||||
|
deps_for_egl += [dep_wayland_client, dep_wayland_server, dep_wayland_egl_headers]
|
||||||
|
diff --git a/src/gallium/targets/dril/dril_target.c b/src/gallium/targets/dril/dril_target.c
|
||||||
|
index 339e9376c3d..f1a0bb18ed8 100644
|
||||||
|
--- a/src/gallium/targets/dril/dril_target.c
|
||||||
|
+++ b/src/gallium/targets/dril/dril_target.c
|
||||||
|
@@ -25,7 +25,7 @@
|
||||||
|
#include <dlfcn.h>
|
||||||
|
#include <EGL/egl.h>
|
||||||
|
#include <EGL/eglext.h>
|
||||||
|
-#include "gbm/main/gbm.h"
|
||||||
|
+#include <gbm.h>
|
||||||
|
#include "drm-uapi/drm_fourcc.h"
|
||||||
|
|
||||||
|
#define EGL_PLATFORM_GBM_MESA 0x31D7
|
||||||
|
diff --git a/src/gallium/targets/dril/meson.build b/src/gallium/targets/dril/meson.build
|
||||||
|
index 7cfa982ffe1..22b955b9074 100644
|
||||||
|
--- a/src/gallium/targets/dril/meson.build
|
||||||
|
+++ b/src/gallium/targets/dril/meson.build
|
||||||
|
@@ -51,10 +51,10 @@ dril_dri = shared_library(
|
||||||
|
link_depends : dril_link_depends,
|
||||||
|
link_with : [
|
||||||
|
libgallium,
|
||||||
|
- libgbm,
|
||||||
|
],
|
||||||
|
dependencies : [
|
||||||
|
idep_mesautil,
|
||||||
|
+ dep_gbm,
|
||||||
|
],
|
||||||
|
# Will be deleted during installation, see install_megadrivers.py
|
||||||
|
install : true,
|
||||||
|
diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c
|
||||||
|
index a51e3cb3b8d..f1a5e0f7649 100644
|
||||||
|
--- a/src/gbm/backends/dri/gbm_dri.c
|
||||||
|
+++ b/src/gbm/backends/dri/gbm_dri.c
|
||||||
|
@@ -43,7 +43,7 @@
|
||||||
|
|
||||||
|
#include "mesa_interface.h"
|
||||||
|
#include "gbm_driint.h"
|
||||||
|
-#include "gbmint.h"
|
||||||
|
+#include <gbm_backend_abi.h>
|
||||||
|
#include "loader_dri_helper.h"
|
||||||
|
#include "kopper_interface.h"
|
||||||
|
#include "loader.h"
|
||||||
|
diff --git a/src/gbm/backends/dri/gbm_driint.h b/src/gbm/backends/dri/gbm_driint.h
|
||||||
|
index 9b324aeaf12..9c7588e5726 100644
|
||||||
|
--- a/src/gbm/backends/dri/gbm_driint.h
|
||||||
|
+++ b/src/gbm/backends/dri/gbm_driint.h
|
||||||
|
@@ -31,7 +31,7 @@
|
||||||
|
#include <xf86drm.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/mman.h>
|
||||||
|
-#include "gbmint.h"
|
||||||
|
+#include <gbm_backend_abi.h>
|
||||||
|
#include "c11/threads.h"
|
||||||
|
|
||||||
|
#include <GL/gl.h> /* mesa_interface needs GL types */
|
||||||
|
diff --git a/src/gbm/backends/dri/meson.build b/src/gbm/backends/dri/meson.build
|
||||||
|
index 9b5d13e9db8..84a40656980 100644
|
||||||
|
--- a/src/gbm/backends/dri/meson.build
|
||||||
|
+++ b/src/gbm/backends/dri/meson.build
|
||||||
|
@@ -11,10 +11,10 @@ endif
|
||||||
|
shared_library(
|
||||||
|
'dri_gbm',
|
||||||
|
files('gbm_dri.c', 'gbm_driint.h'),
|
||||||
|
- include_directories : [incs_gbm, incs_gbm_dri, inc_st_dri, inc_gallium_aux],
|
||||||
|
+ include_directories : [inc_gallium, incs_gbm_dri, inc_loader, inc_st_dri, inc_gallium_aux],
|
||||||
|
link_args : [ld_args_gc_sections],
|
||||||
|
link_with : [libloader, libgallium_dri],
|
||||||
|
- dependencies : [deps_gbm_dri, dep_dl, dep_libdrm, idep_mesautil, idep_xmlconfig],
|
||||||
|
+ dependencies : [deps_gbm_dri, dep_dl, dep_gbm, dep_libdrm, idep_mesautil, idep_xmlconfig],
|
||||||
|
gnu_symbol_visibility : 'hidden',
|
||||||
|
install : true,
|
||||||
|
install_dir: join_paths(get_option('libdir'), 'gbm'),
|
||||||
|
diff --git a/src/gbm/meson.build b/src/gbm/meson.build
|
||||||
|
index eaed028d049..97e8d5fa044 100644
|
||||||
|
--- a/src/gbm/meson.build
|
||||||
|
+++ b/src/gbm/meson.build
|
||||||
|
@@ -15,10 +15,6 @@ args_gbm = [
|
||||||
|
]
|
||||||
|
incs_gbm = [include_directories('main'), inc_loader, inc_gallium]
|
||||||
|
|
||||||
|
-if with_dri2
|
||||||
|
- subdir('backends/dri')
|
||||||
|
-endif
|
||||||
|
-
|
||||||
|
libgbm_name = 'gbm'
|
||||||
|
|
||||||
|
if with_platform_android and get_option('platform-sdk-version') >= 30
|
||||||
|
@@ -43,7 +39,7 @@ if with_tests
|
||||||
|
test('gbm-abi-check', abi_check, suite : ['gbm'])
|
||||||
|
endif
|
||||||
|
|
||||||
|
-install_headers('main/gbm.h')
|
||||||
|
+install_headers('main/gbm.h', 'main/gbm_backend_abi.h')
|
||||||
|
|
||||||
|
pkg.generate(
|
||||||
|
name : 'gbm',
|
||||||
|
@@ -67,3 +63,8 @@ if with_symbols_check
|
||||||
|
suite : ['gbm'],
|
||||||
|
)
|
||||||
|
endif
|
||||||
|
+
|
||||||
|
+dep_gbm = declare_dependency(
|
||||||
|
+ link_with : libgbm,
|
||||||
|
+ include_directories : inc_gbm,
|
||||||
|
+)
|
||||||
|
diff --git a/src/meson.build b/src/meson.build
|
||||||
|
index d443d2b41bb..74250ed2148 100644
|
||||||
|
--- a/src/meson.build
|
||||||
|
+++ b/src/meson.build
|
||||||
|
@@ -127,11 +127,17 @@ endif
|
||||||
|
if with_glx == 'dri'
|
||||||
|
subdir('glx')
|
||||||
|
endif
|
||||||
|
+
|
||||||
|
if with_gbm
|
||||||
|
- subdir('gbm')
|
||||||
|
+ if get_option('libgbm-external')
|
||||||
|
+ dep_gbm = dependency('gbm')
|
||||||
|
+ else
|
||||||
|
+ subdir('gbm')
|
||||||
|
+ endif
|
||||||
|
else
|
||||||
|
- inc_gbm = []
|
||||||
|
+ dep_gbm = null_dep
|
||||||
|
endif
|
||||||
|
+
|
||||||
|
if with_egl
|
||||||
|
subdir('egl')
|
||||||
|
endif
|
||||||
|
@@ -141,6 +147,10 @@ if with_gallium and with_gbm
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
+if with_gbm and with_dri2
|
||||||
|
+ subdir('gbm/backends/dri')
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
# This must be after at least mesa, glx, and gallium, since libgl will be
|
||||||
|
# defined in one of those subdirs depending on the glx provider.
|
||||||
|
if with_glx != 'disabled' and not with_glvnd
|
|
@ -7,7 +7,7 @@
|
||||||
mesa, udev, bootstrap_cmds, bison, flex, clangStdenv, autoreconfHook,
|
mesa, udev, bootstrap_cmds, bison, flex, clangStdenv, autoreconfHook,
|
||||||
mcpp, libepoxy, openssl, pkg-config, llvm, libxslt, libxcrypt, hwdata,
|
mcpp, libepoxy, openssl, pkg-config, llvm, libxslt, libxcrypt, hwdata,
|
||||||
ApplicationServices, Carbon, Cocoa, Xplugin,
|
ApplicationServices, Carbon, Cocoa, Xplugin,
|
||||||
xorg, windows
|
xorg, windows, libgbm, mesa-gl-headers, dri-pkgconfig-stub
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
@ -791,7 +791,7 @@ self: super:
|
||||||
# We set it to /var/log which can't be touched from inside the sandbox causing the build to hard-fail
|
# We set it to /var/log which can't be touched from inside the sandbox causing the build to hard-fail
|
||||||
./dont-create-logdir-during-build.patch
|
./dont-create-logdir-during-build.patch
|
||||||
];
|
];
|
||||||
buildInputs = commonBuildInputs ++ [ libdrm mesa ];
|
buildInputs = commonBuildInputs ++ [ libdrm libgbm mesa-gl-headers dri-pkgconfig-stub ];
|
||||||
propagatedBuildInputs = attrs.propagatedBuildInputs or [] ++ [ xorg.libpciaccess ] ++ commonPropagatedBuildInputs ++ lib.optionals stdenv.hostPlatform.isLinux [
|
propagatedBuildInputs = attrs.propagatedBuildInputs or [] ++ [ xorg.libpciaccess ] ++ commonPropagatedBuildInputs ++ lib.optionals stdenv.hostPlatform.isLinux [
|
||||||
udev
|
udev
|
||||||
];
|
];
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
{
|
{
|
||||||
|
dri-pkgconfig-stub,
|
||||||
egl-wayland,
|
egl-wayland,
|
||||||
bash,
|
bash,
|
||||||
libepoxy,
|
libepoxy,
|
||||||
|
@ -6,6 +7,7 @@
|
||||||
fontutil,
|
fontutil,
|
||||||
lib,
|
lib,
|
||||||
libdecor,
|
libdecor,
|
||||||
|
libgbm,
|
||||||
libei,
|
libei,
|
||||||
libGL,
|
libGL,
|
||||||
libGLU,
|
libGLU,
|
||||||
|
@ -30,7 +32,7 @@
|
||||||
libxkbfile,
|
libxkbfile,
|
||||||
libxshmfence,
|
libxshmfence,
|
||||||
libxcvt,
|
libxcvt,
|
||||||
mesa,
|
mesa-gl-headers,
|
||||||
meson,
|
meson,
|
||||||
ninja,
|
ninja,
|
||||||
openssl,
|
openssl,
|
||||||
|
@ -75,8 +77,10 @@ stdenv.mkDerivation rec {
|
||||||
];
|
];
|
||||||
buildInputs =
|
buildInputs =
|
||||||
[
|
[
|
||||||
|
dri-pkgconfig-stub
|
||||||
egl-wayland
|
egl-wayland
|
||||||
libdecor
|
libdecor
|
||||||
|
libgbm
|
||||||
libepoxy
|
libepoxy
|
||||||
libei
|
libei
|
||||||
fontutil
|
fontutil
|
||||||
|
@ -100,7 +104,7 @@ stdenv.mkDerivation rec {
|
||||||
libxkbfile
|
libxkbfile
|
||||||
libxshmfence
|
libxshmfence
|
||||||
libxcvt
|
libxcvt
|
||||||
mesa # uses dri_interface.h
|
mesa-gl-headers
|
||||||
openssl
|
openssl
|
||||||
pixman
|
pixman
|
||||||
systemd
|
systemd
|
||||||
|
|
|
@ -7,11 +7,13 @@
|
||||||
# Dependencies
|
# Dependencies
|
||||||
bzip2,
|
bzip2,
|
||||||
cmake,
|
cmake,
|
||||||
|
dri-pkgconfig-stub,
|
||||||
freetype,
|
freetype,
|
||||||
libGL,
|
libGL,
|
||||||
|
libgbm,
|
||||||
libjpeg_turbo,
|
libjpeg_turbo,
|
||||||
makeWrapper,
|
makeWrapper,
|
||||||
mesa, # for built-in 3D software rendering using swrast
|
mesa-gl-headers, # for built-in 3D software rendering using swrast
|
||||||
openjdk, # for the client with Java GUI
|
openjdk, # for the client with Java GUI
|
||||||
openjdk_headless, # for the server
|
openjdk_headless, # for the server
|
||||||
openssh,
|
openssh,
|
||||||
|
@ -62,8 +64,10 @@ stdenv.mkDerivation (finalAttrs: {
|
||||||
buildInputs =
|
buildInputs =
|
||||||
[
|
[
|
||||||
bzip2
|
bzip2
|
||||||
|
dri-pkgconfig-stub
|
||||||
freetype
|
freetype
|
||||||
libGL # for -DTVNC_SYSTEMX11=1
|
libGL # for -DTVNC_SYSTEMX11=1
|
||||||
|
libgbm
|
||||||
libjpeg_turbo
|
libjpeg_turbo
|
||||||
openssl
|
openssl
|
||||||
pam
|
pam
|
||||||
|
@ -80,7 +84,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||||
libXfont2 # for -DTVNC_SYSTEMX11=1
|
libXfont2 # for -DTVNC_SYSTEMX11=1
|
||||||
libxkbfile # for -DTVNC_SYSTEMX11=1
|
libxkbfile # for -DTVNC_SYSTEMX11=1
|
||||||
libXi
|
libXi
|
||||||
mesa # for -DTVNC_SYSTEMX11=1
|
mesa-gl-headers # for -DTVNC_SYSTEMX11=1
|
||||||
pixman # for -DTVNC_SYSTEMX11=1
|
pixman # for -DTVNC_SYSTEMX11=1
|
||||||
xorgproto
|
xorgproto
|
||||||
xtrans # for -DTVNC_SYSTEMX11=1
|
xtrans # for -DTVNC_SYSTEMX11=1
|
||||||
|
@ -97,7 +101,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||||
# to the swrast dri driver in Mesa.
|
# to the swrast dri driver in Mesa.
|
||||||
# Can also be given at runtime to its `Xvnc` as:
|
# Can also be given at runtime to its `Xvnc` as:
|
||||||
# -dridir /nix/store/...-mesa-20.1.10-drivers/lib/dri/
|
# -dridir /nix/store/...-mesa-20.1.10-drivers/lib/dri/
|
||||||
"-DXORG_DRI_DRIVER_PATH=${mesa.driverLink}/lib/dri"
|
"-DXORG_DRI_DRIVER_PATH=${libGL.driverLink}/lib/dri"
|
||||||
# The build system doesn't find these files automatically.
|
# The build system doesn't find these files automatically.
|
||||||
"-DTJPEG_JAR=${libjpeg_turbo.out}/share/java/turbojpeg.jar"
|
"-DTJPEG_JAR=${libjpeg_turbo.out}/share/java/turbojpeg.jar"
|
||||||
"-DTJPEG_JNILIBRARY=${libjpeg_turbo.out}/lib/libturbojpeg.so"
|
"-DTJPEG_JNILIBRARY=${libjpeg_turbo.out}/lib/libturbojpeg.so"
|
||||||
|
|
|
@ -999,7 +999,7 @@ mapAliases {
|
||||||
mutter43 = throw "'mutter43' has been removed since it is no longer used by Pantheon."; # Added 2024-09-22
|
mutter43 = throw "'mutter43' has been removed since it is no longer used by Pantheon."; # Added 2024-09-22
|
||||||
mysql-client = hiPrio mariadb.client;
|
mysql-client = hiPrio mariadb.client;
|
||||||
mysql = throw "'mysql' has been renamed to/replaced by 'mariadb'"; # Converted to throw 2024-10-17
|
mysql = throw "'mysql' has been renamed to/replaced by 'mariadb'"; # Converted to throw 2024-10-17
|
||||||
mesa_drivers = throw "'mesa_drivers' has been removed, use 'pkgs.mesa' or 'pkgs.mesa.drivers' depending on target use case."; # Converted to throw 2024-07-11
|
mesa_drivers = throw "'mesa_drivers' has been removed, use 'pkgs.mesa' instead."; # Converted to throw 2024-07-11
|
||||||
|
|
||||||
### N ###
|
### N ###
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue