@ -5,9 +5,9 @@
, libelf , libvdpau , python3Packages
, libglvnd
, enableRadv ? true
, galliumDrivers ? null
, driDrivers ? null
, vulkanDrivers ? null
, galliumDrivers ? [ " a u t o " ]
, driDrivers ? [ " a u t o " ]
, vulkanDrivers ? [ " a u t o " ]
, eglPlatforms ? [ " x 1 1 " ] ++ lib . optionals stdenv . isLinux [ " w a y l a n d " " d r m " ]
, OpenGL , Xplugin
, withValgrind ? stdenv . hostPlatform . isLinux && ! stdenv . hostPlatform . isAarch32 , valgrind-light
@ -26,43 +26,6 @@
with stdenv . lib ;
let
# platforms that have PCIe slots and thus can use most non-integrated GPUs
pciePlatform = ! stdenv . hostPlatform . isAarch32 && ! stdenv . hostPlatform . isAarch64 ;
defaultGalliumDrivers = optionals ( elem " d r m " eglPlatforms ) ( [ " v i r g l " ]
++ lib . optionals pciePlatform [ " r 3 0 0 " " r 6 0 0 " " r a d e o n s i " ]
++ lib . optionals ( pciePlatform || stdenv . hostPlatform . isAarch32 || stdenv . hostPlatform . isAarch64 ) [ " n o u v e a u " ]
++ lib . optionals stdenv . hostPlatform . isx86 [ " s v g a " ]
++ lib . optionals ( stdenv . hostPlatform . isAarch32 || stdenv . hostPlatform . isAarch64 ) [ " v c 4 " ]
++ lib . optionals stdenv . hostPlatform . isAarch64 [ " f r e e d r e n o " " e t n a v i v " ]
) ;
defaultDriDrivers = optionals ( elem " d r m " eglPlatforms ) ( [ ]
++ lib . optionals pciePlatform [ " r 2 0 0 " ]
++ lib . optionals ( pciePlatform || stdenv . hostPlatform . isAarch32 || stdenv . hostPlatform . isAarch64 ) [ " n o u v e a u " ]
++ lib . optionals stdenv . hostPlatform . isx86 [ " i 9 1 5 " " i 9 6 5 " ] ) ;
defaultVulkanDrivers = optionals stdenv . hostPlatform . isLinux ( [ ]
++ lib . optional stdenv . hostPlatform . isx86 " i n t e l "
++ lib . optional enableRadv " a m d " ) ;
in
let gallium_ = galliumDrivers ; dri_ = driDrivers ; vulkan_ = vulkanDrivers ; in
let
galliumDrivers =
( if gallium_ == null
then defaultGalliumDrivers
else gallium_ )
++ lib . optional stdenv . isLinux " s w r a s t " ;
driDrivers =
( if dri_ == null
then optionals ( elem " d r m " eglPlatforms ) defaultDriDrivers
else dri_ ) ;
vulkanDrivers =
if vulkan_ == null
then defaultVulkanDrivers
else vulkan_ ;
in
let
version = " 1 9 . 1 . 1 " ;
branch = head ( splitString " . " version ) ;
@ -110,8 +73,7 @@ stdenv.mkDerivation rec {
} )
] ;
outputs = [ " o u t " " d e v " " d r i v e r s " ]
++ lib . optional ( elem " s w r a s t " galliumDrivers ) " o s m e s a " ;
outputs = [ " o u t " " d e v " " d r i v e r s " " o s m e s a " ] ;
# TODO: Figure out how to enable opencl without having a runtime dependency on clang
mesonFlags = [
@ -135,28 +97,11 @@ stdenv.mkDerivation rec {
" - D o m x - l i b s - p a t h = ${ placeholder " d r i v e r s " } / l i b / b e l l a g i o "
" - D v a - l i b s - p a t h = ${ placeholder " d r i v e r s " } / l i b / d r i "
" - D d 3 d - d r i v e r s - p a t h = ${ placeholder " d r i v e r s " } / l i b / d 3 d "
" - D g a l l i u m - v d p a u = t r u e "
" - D g a l l i u m - x v m c = t r u e "
" - D g a l l i u m - o p e n c l = d i s a b l e d "
" - D s h a r e d - g l a p i = t r u e "
" - D g l e s 1 = t r u e "
" - D g l e s 2 = t r u e "
" - D g l x = d r i "
] ++ optionals stdenv . isLinux [
" - D g l v n d = t r u e "
" - D l l v m = t r u e "
" - D s h a r e d - l l v m = t r u e "
" - D g l x - d i r e c t = t r u e "
] ++ optional ( elem " s w r a s t " galliumDrivers ) " - D o s m e s a = g a l l i u m " # used by wine
++ optionals ( stdenv . isLinux ) [
" - D d r i 3 = t r u e "
" - D g a l l i u m - o m x = b e l l a g i o "
" - D g a l l i u m - v a = t r u e "
" - D g a l l i u m - x a = t r u e " # used in vmware driver
" - D g a l l i u m - n i n e = t r u e " # Direct3D in Wine
" - D g b m = t r u e "
" - D e g l = t r u e "
] ;
" - D o s m e s a = g a l l i u m " # used by wine
" - D g a l l i u m - n i n e = t r u e " # Direct3D in Wine
] ;
buildInputs = with xorg ; [
expat llvmPackages . llvm libglvnd xorgproto
@ -183,8 +128,8 @@ stdenv.mkDerivation rec {
postInstall = ''
# Some installs don't have any drivers so this directory is never created.
mkdir - p $ drivers
'' + o p t i o n a l S t r i n g ( g a l l i u m D r i v e r s ! = [ ] ) ''
mkdir - p $ drivers $ osmesa
'' + o p t i o n a l S t r i n g s t d e n v . i s L i n u x ''
mkdir - p $ drivers/lib
# move gallium-related stuff to $drivers, so $out doesn't depend on LLVM
@ -206,7 +151,7 @@ stdenv.mkDerivation rec {
for js in $ drivers/share/glvnd/egl_vendor.d /* . j s o n ; d o
substituteInPlace " $ j s " - - replace ' " l i b E G L _ ' ' " ' " $ d r i v e r s / l i b / l i b E G L _ "
done
'' + o p t i o n a l S t r i n g ( v u l k a n D r i v e r s ! = [ ] ) ''
# Update search path used by Vulkan (it's pointing to $out but
# drivers are in $drivers)
for js in $ drivers/share/vulkan/icd.d /* . j s o n ; d o
@ -217,7 +162,7 @@ stdenv.mkDerivation rec {
# TODO:
# check $out doesn't depend on llvm: builder failures are ignored
# for some reason grep -qv '${llvmPackages.llvm}' -R "$out";
postFixup = optionalString ( galliumDrivers != [ ] ) ''
postFixup = optionalString stdenv . isLinux ''
# set the default search path for DRI drivers; used e.g. by X server
substituteInPlace " $ d e v / l i b / p k g c o n f i g / d r i . p c " - - replace " $ d r i v e r s " " ${ libglvnd . driverLink } "
@ -238,6 +183,8 @@ stdenv.mkDerivation rec {
done
'' ;
NIX_CFLAGS_COMPILE = stdenv . lib . optionalString stdenv . isDarwin " - f n o - c o m m o n " ;
passthru = {
inherit libdrm ;
inherit ( libglvnd ) driverLink ;