@@ -1,6 +1,4 @@
{ lib
, OpenGL
, Xplugin
, bison
, buildPackages
, directx-headers
@@ -42,19 +40,9 @@
, xcbutilkeysyms
, xorg
, zstd
, withValgrind ?
lib . meta . availableOn stdenv . hostPlatform valgrind-light
&& ! valgrind-light . meta . broken
, withLibunwind ? lib . meta . availableOn stdenv . hostPlatform libunwind
, enableGalliumNine ? stdenv . isLinux
, enableOSMesa ? stdenv . isLinux
, enableOpenCL ? stdenv . isLinux && stdenv . isx86_64
, enableTeflon ? stdenv . isLinux && stdenv . isAarch64 # currently only supports aarch64 SoCs, may change in the future
, enablePatentEncumberedCodecs ? true
, galliumDrivers ?
if stdenv . isLinux
then [
, galliumDrivers ? [
" d 3 d 1 2 " # WSL emulated GPU (aka Dozen)
" i r i s " # new Intel (Broadwell+)
" k m s r o " # special "render only" driver for GPUs without a display controller
@@ -79,10 +67,7 @@
" c r o c u s " # Intel legacy, x86 only
" i 9 1 5 " # Intel extra legacy, x86 only
]
else [ " a u t o " ]
, vulkanDrivers ?
if stdenv . isLinux
then [
, vulkanDrivers ? [
" a m d " # AMD (aka RADV)
" i n t e l " # new Intel (aka ANV)
" m i c r o s o f t - e x p e r i m e n t a l " # WSL virtualized GPU (aka DZN/Dozen)
@@ -100,32 +85,19 @@
] ++ lib . optionals stdenv . hostPlatform . isx86 [
" i n t e l _ h a s v k " # Intel Haswell/Broadwell, "legacy" Vulkan driver (https://www.phoronix.com/news/Intel-HasVK-Drop-Dead-Code)
]
else [ " a u t o " ]
, eglPlatforms ? [ " x 1 1 " ] ++ lib . optionals stdenv . isLinux [ " w a y l a n d " ]
, vulkanLayers ? lib . optionals ( ! stdenv . isDarwin ) [ # No Vulkan support on Darwin
" d e v i c e - s e l e c t "
" o v e r l a y "
" i n t e l - n u l l h w "
]
, eglPlatforms ? [ " x 1 1 " " w a y l a n d " ]
, vulkanLayers ? [
" d e v i c e - s e l e c t "
" o v e r l a y "
" i n t e l - n u l l h w "
]
, mesa
}:
# 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 = " 2 4 . 1 . 1 " ;
hash = " s h a 2 5 6 - A D i C b G 9 + i N k L T O b 3 G R k v p Y y n 3 t 9 O 3 K o R d M 9 7 2 S D v i e o = " ;
# Release calendar: https://www.mesa3d.org/release-calendar.html
# Release frequency: https://www.mesa3d.org/releasing.html#schedule
branch = lib . versions . major version ;
withLibdrm = lib . meta . availableOn stdenv . hostPlatform libdrm ;
haveWayland = lib . elem " w a y l a n d " eglPlatforms ;
haveZink = lib . elem " z i n k " galliumDrivers ;
haveDozen = ( lib . elem " d 3 d 1 2 " galliumDrivers ) || ( lib . elem " m i c r o s o f t - e x p e r i m e n t a l " vulkanDrivers ) ;
rustDeps = [
{
pname = " p a s t e " ;
@@ -162,28 +134,13 @@ let
copyRustDeps = lib . concatStringsSep " \n " ( builtins . map copyRustDep rustDeps ) ;
needNativeCLC = ! stdenv . buildPlatform . canExecute stdenv . hostPlatform ;
self = stdenv . mkDerivation {
pname = " m e s a " ;
inherit version ;
src = fetchurl {
urls = [
" h t t p s : / / a r c h i v e . m e s a 3 d . o r g / m e s a - ${ version } . t a r . x z "
" h t t p s : / / m e s a . f r e e d e s k t o p . o r g / a r c h i v e / m e s a - ${ version } . t a r . x z "
" f t p : / / f t p . f r e e d e s k t o p . o r g / p u b / m e s a / m e s a - ${ version } . t a r . x z "
" f t p : / / f t p . f r e e d e s k t o p . o r g / p u b / m e s a / ${ version } / m e s a - ${ version } . t a r . x z "
" f t p : / / f t p . f r e e d e s k t o p . o r g / p u b / m e s a / o l d e r - v e r s i o n s / ${ branch } . x / ${ version } / m e s a - ${ version } . t a r . x z "
] ;
inherit hash ;
} ;
common = import ./common.nix { inherit lib fetchurl ; } ;
in stdenv . mkDerivation {
inherit ( common ) pname version src meta ;
patches = [
./opencl.patch
] ++ lib . optionals stdenv . isDarwin [
# Reorder things to make it build on Darwin again
# Submitted upstream: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29592
# FIXME: remove when merged or otherwise addressed
./darwin.patch
] ;
postPatch = ''
@@ -201,16 +158,7 @@ self = stdenv.mkDerivation {
'' ;
outputs = [
" o u t " " d e v " " d r i v e r s "
] ++ lib . optionals enableOSMesa [
" o s m e s a "
] ++ lib . optionals stdenv . isLinux [
" d r i v e r s d e v "
] ++ lib . optionals enableTeflon [
" t e f l o n "
] ++ lib . optionals enableOpenCL [
" o p e n c l "
] ++ lib . optionals haveDozen [
" o u t " " d e v " " d r i v e r s " " d r i v e r s d e v " " o p e n c l " " t e f l o n " " o s m e s a "
# 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
@@ -228,69 +176,49 @@ self = stdenv.mkDerivation {
mesonFlags = [
" - - s y s c o n f d i r = / e t c "
" - - d a t a d i r = ${ placeholder " d r i v e r s " } / s h a r e " # Vendor files
# Don't build in debug mode
# https://gitlab.freedesktop.org/mesa/mesa/blob/master/docs/meson.html#L327
( lib . mesonBool " b _ n d e b u g " true )
( lib . mesonOption " d r i - s e a r c h - p a t h " " ${ libglvnd . driverLink } / l i b / d r i " )
" - - d a t a d i r = ${ placeholder " d r i v e r s " } / s h a r e "
# What to build
( lib . mesonOption " p l a t f o r m s " ( lib . concatStringsSep " , " eglPlatforms ) )
( lib . mesonOption " g a l l i u m - d r i v e r s " ( lib . concatStringsSep " , " galliumDrivers ) )
( lib . mesonOption " v u l k a n - d r i v e r s " ( lib . concatStringsSep " , " vulkanDrivers ) )
( lib . mesonOption " v u l k a n - l a y e r s " ( builtins . concatStringsSep " , " vulkanLayers ) )
# Make sure we know where to find all the drivers
( lib . mesonOption " d r i - d r i v e r s - p a t h " " ${ placeholder " d r i v e r s " } / l i b / d r i " )
( lib . mesonOption " v d p a u - l i b s - p a t h " " ${ placeholder " d r i v e r s " } / l i b / v d p a u " )
( lib . mesonOption " 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 " )
( lib . mesonOption " v a - l i b s - p a t h " " ${ placeholder " d r i v e r s " } / l i b / d r i " )
( lib . mesonOption " 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 " )
( lib . mesonBool " g a l l i u m - n i n e " enableGalliumNine ) # Direct3D in Wine
( lib . mesonBool " o s m e s a " enableOSMesa ) # used by wine
( lib . mesonBool " t e f l o n " enableTeflon ) # TensorFlow frontend
( lib . mesonEnable " m i c r o s o f t - c l c " false ) # Only relevant on Windows (OpenCL 1.2 API on top of D3D12)
# To enable non-mesa gbm backends to be found (e.g. Nvidia)
# Set search paths for non-Mesa drivers (e.g. Nvidia)
( lib . mesonOption " d r i - s e a r c h - p a t h " " ${ libglvnd . driverLink } / l i b / d r i " )
( lib . mesonOption " g b m - b a c k e n d s - p a t h " " ${ libglvnd . driverLink } / l i b / g b m : ${ placeholder " o u t " } / l i b / g b m " )
# meson auto_features enables these features, but we do not want them
( lib . mesonEnable " a n d r o i d - l i b b a c k t r a c e " false )
] ++ lib . optionals stdenv . isLinux [
# Enable glvnd for dynamic libGL dispatch
( lib . mesonEnable " g l v n d " true )
( lib . mesonBool " g a l l i u m - n i n e " true ) # Direct3D in Wine
( lib . mesonBool " o s m e s a " true ) # used by wine
( lib . mesonBool " t e f l o n " true ) # TensorFlow frontend
# Enable Intel RT stuff when available
( lib . mesonBool " i n s t a l l - i n t e l - c l c " true )
( lib . mesonEnable " i n t e l - r t " stdenv . isx86_64 )
( lib . mesonOption " c l a n g - l i b d i r " " ${ llvmPackages . clang-unwrapped . lib } / l i b " )
] ++ lib . optionals stdenv . isDarwin [
# Disable features that are explicitly unsupported on the platform
( lib . mesonEnable " g b m " false )
( lib . mesonEnable " x l i b - l e a s e " false )
( lib . mesonEnable " e g l " false )
( lib . mesonEnable " g a l l i u m - v d p a u " false )
( lib . mesonEnable " g a l l i u m - v a " false )
( lib . mesonEnable " g a l l i u m - x a " false )
( lib . mesonEnable " l m s e n s o r s " false )
# Don’ t build with glvnd support to make sure Mesa builds libGL on Darwin
( lib . mesonEnable " g l v n d " false )
# This gets enabled by mesonAutoFeatures and fails on aarch64-darwin,
# which makes no sense because Darwin has neither Intel nor RT, but OK
( lib . mesonEnable " i n t e l - r t " false )
] ++ lib . optionals enableOpenCL [
# Clover, old OpenCL frontend
( lib . mesonOption " g a l l i u m - o p e n c l " " i c d " )
( lib . mesonBool " o p e n c l - s p i r v " true )
# Rusticl, new OpenCL frontend
( lib . mesonBool " g a l l i u m - r u s t i c l " true )
] ++ lib . optionals ( ! withValgrind ) [
( lib . mesonEnable " v a l g r i n d " false )
] ++ lib . optionals ( ! withLibunwind ) [
( lib . mesonEnable " l i b u n w i n d " false )
]
++ lib . optionals enablePatentEncumberedCodecs [
# meson auto_features enables this, but we do not want it
( lib . mesonEnable " a n d r o i d - l i b b a c k t r a c e " false )
( lib . mesonEnable " m i c r o s o f t - c l c " false ) # Only relevant on Windows (OpenCL 1.2 API on top of D3D12)
] ++ lib . optionals enablePatentEncumberedCodecs [
( lib . mesonOption " v i d e o - c o d e c s " " a l l " )
] ++ lib . optionals ( vulkanLayers != [ ] ) [
( lib . mesonOption " v u l k a n - l a y e r s " ( builtins . concatStringsSep " , " vulkanLayers ) )
] ++ lib . optionals needNativeCLC [
( lib . mesonOption " i n t e l - c l c " " s y s t e m " )
] ;
@@ -298,61 +226,45 @@ self = stdenv.mkDerivation {
strictDeps = true ;
buildInputs = with xorg ; [
directx-headers
elfutils
expat
glslang
libffi
libglvnd
libomxil-bellagio
libpthreadstubs
libunwind
libva-minimal
libvdpau
llvmPackages . libllvm
openssl
zstd
] ++ ( with xorg ; [
libX11
libxcb
libXext
libXfixes
libXrandr
libxshmfence
libXt
libXvMC
libpthreadstubs
libxcb
libxshmfence
xcbutilkeysyms
xorgproto
] ) ++ lib . optionals withLibunwind [
libunwind
] ++ [
python3Packages . python # for shebang
] ++ lib . optionals haveWayland [
wayland
wayland-protocols
] ++ lib . optionals stdenv . isLinux [
libomxil-bellagio
libva-minimal
llvmPackages . clang
llvmPackages . clang-unwrapped
llvmPackages . libclc
llvmPackages . libllvm
lm_sensors
openssl
python3Packages . python # for shebang
spirv-llvm-translator
udev
] ++ lib . optionals ( lib . meta . availableOn stdenv . hostPlatform elfutils ) [
elfutils
] ++ lib . optionals enableOpenCL [
llvmPackages . clang
] ++ lib . optionals withValgrind [
valgrind-light
] ++ lib . optionals haveZink [
vulkan-loader
] ++ lib . optionals haveDozen [
directx-headers
wayland
wayland-protocols
xcbutilkeysyms
xorgproto
zstd
] ;
depsBuildBuild = [
pkg-config
] ++ lib . optionals ( ! stdenv . isDarwin ) [
# Adding this unconditionally makes x86_64-darwin pick up an older
# toolchain, as we explicitly call Mesa with 11.0 stdenv, but buildPackages
# is still 10.something, and Mesa can't build with that.
# FIXME: figure this out, or figure out how to get rid of Mesa on Darwin,
# whichever is easier.
buildPackages . stdenv . cc
] ;
@@ -374,7 +286,6 @@ self = stdenv.mkDerivation {
rust-bindgen
rust-cbindgen
rustPlatform . bindgenHook
] ++ lib . optionals haveWayland [
wayland-scanner
] ++ lib . optionals needNativeCLC [
buildPackages . mesa . driversdev
@@ -384,74 +295,52 @@ self = stdenv.mkDerivation {
buildPackages . mesa . driversdev
] ;
propagatedBuildInputs = ( with xorg ; [
propagatedBuildInputs = with xorg ; [
libXdamage
libXxf86vm
] ) ++ lib . optionals withLibdrm [
libdrm
] ++ lib . optionals stdenv . isDarwin [
OpenGL
Xplugin
] ;
doCheck = false ;
postInstall = ''
# S o m e i n s t a l l s d o n ' t h a v e a n y d r i v e r s s o t h i s d i r e c t o r y i s n e v e r c r e a t e d .
m k d i r - p $d r i v e r s $o s m e s a
'' + lib . optionalString stdenv . isLinux ''
m k d i r - p $d r i v e r s / l i b
# M o v e d r i v e r - r e l a t e d b i t s t o $d r i v e r s
m o v e T o O u t p u t " l i b / l i b * _ m e s a * " $d r i v e r s
m o v e T o O u t p u t " l i b / l i b p o w e r v r _ r o g u e * " $d r i v e r s
m o v e T o O u t p u t " l i b / l i b x a t r a c k e r * " $d r i v e r s
m o v e T o O u t p u t " l i b / l i b v u l k a n _ * " $d r i v e r s
i f [ - n " $( s h o p t - s n u l l g l o b ; e c h o " $o u t / l i b / l i b x a t r a c k e r " * ) " - o - n " $( s h o p t - s n u l l g l o b ; e c h o " $o u t / l i b / l i b v u l k a n _ " * ) " ] ; t h e n
# m o v e g a l l i u m - r e l a t e d s t u f f t o $d r i v e r s , s o $o u t d o e s n ' t d e p e n d o n L L V M
m v - t $d r i v e r s / l i b \
$o u t / l i b / l i b p o w e r v r _ r o g u e * \
$o u t / l i b / l i b x a t r a c k e r * \
$o u t / l i b / l i b v u l k a n _ *
f i
i f [ - n " $( s h o p t - s n u l l g l o b ; e c h o " $o u t " / l i b / l i b * _ m e s a * ) " ] ; t h e n
# M o v e o t h e r d r i v e r s t o a s e p a r a t e o u t p u t
m v - t $d r i v e r s / l i b $o u t / l i b / l i b * _ m e s a *
f i
# U p d a t e s e a r c h p a t h u s e d b y g l v n d
# U p d a t e s e a r c h p a t h u s e d b y g l v n d ( i t ' s p o i n t i n g t o $o u t b u t d r i v e r s a r e i n $d r i v e r s )
f o r j s i n $d r i v e r s / s h a r e / g l v n d / e g l _ v e n d o r . d / * . j s o n ; d o
s u b s t i t u t e I n P l a c e " $j s " - - r e p l a c e ' " l i b E G L _ ' ' " ' " $d r i v e r s / l i b / l i b E G L _ "
s u b s t i t u t e I n P l a c e " $j s " - - r e p l a c e - f a i l ' " l i b E G L _ ' ' " ' " $d r i v e r s / l i b / l i b E G L _ "
d o n e
# U p d a t e s e a r c h p a t h u s e d b y V u l k a n ( i t ' s p o i n t i n g t o $o u t b u t
# d r i v e r s a r e i n $d r i v e r s )
# A n d s a m e f o r V u l k a n
f o r j s i n $d r i v e r s / s h a r e / v u l k a n / i c d . d / * . j s o n ; d o
s u b s t i t u t e I n P l a c e " $j s " - - r e p l a c e " $o u t " " $d r i v e r s "
s u b s t i t u t e I n P l a c e " $j s " - - r e p l a c e - f a i l " $o u t " " $d r i v e r s "
d o n e
'' + lib . optionalString enableOpenCL ''
# M o v e O p e n C L s t u f f
m k d i r - p $o p e n c l / l i b
m v - t " $o p e n c l / l i b / " \
$o u t / l i b / g a l l i u m - p i p e \
$o u t / l i b / l i b * O p e n C L *
# W e c o n s t r u c t o u r o w n . i c d f i l e s t h a t c o n t a i n a b s o l u t e p a t h s .
m k d i r - p $o p e n c l / e t c / O p e n C L / v e n d o r s /
e c h o $o p e n c l / l i b / l i b M e s a O p e n C L . s o > $o p e n c l / e t c / O p e n C L / v e n d o r s / m e s a . i c d
e c h o $o p e n c l / l i b / l i b R u s t i c l O p e n C L . s o > $o p e n c l / e t c / O p e n C L / v e n d o r s / r u s t i c l . i c d
'' + lib . optionalString enableOSMesa ''
# m o v e l i b O S M e s a t o $o s m e s a , a s i t ' s r e l a t i v e l y b i g
m k d i r - p $o s m e s a / l i b
m v - t $o s m e s a / l i b / $o u t / l i b / l i b O S M e s a *
'' + lib . optionalString ( vulkanLayers != [ ] ) ''
m v - t $d r i v e r s / l i b $o u t / l i b / l i b V k L a y e r *
# M o v e V u l k a n l a y e r s t o $d r i v e r s a n d u p d a t e m a n i f e s t s
m o v e T o O u t p u t " l i b / l i b V k L a y e r * " $d r i v e r s
f o r j s i n $d r i v e r s / s h a r e / v u l k a n / { i m , e x } p l i c i t _ l a y e r . d / * . j s o n ; d o
s u b s t i t u t e I n P l a c e " $j s " - - r e p l a c e ' " l i b V k L a y e r _ ' ' " ' " $d r i v e r s / l i b / l i b V k L a y e r _ "
d o n e
'' + lib . optionalString haveDozen ''
m k d i r - p $s p i r v 2 d x i l / { b i n , l i b }
m v - t $s p i r v 2 d x i l / l i b $o u t / l i b / l i b s p i r v _ t o _ d x i l *
m v - t $s p i r v 2 d x i l / b i n $o u t / b i n / s p i r v 2 d x i l
# C o n s t r u c t o u r o w n . i c d f i l e s t h a t c o n t a i n a b s o l u t e p a t h s .
m k d i r - p $o p e n c l / e t c / O p e n C L / v e n d o r s /
e c h o $o p e n c l / l i b / l i b M e s a O p e n C L . s o > $o p e n c l / e t c / O p e n C L / v e n d o r s / m e s a . i c d
e c h o $o p e n c l / l i b / l i b R u s t i c l O p e n C L . s o > $o p e n c l / e t c / O p e n C L / v e n d o r s / r u s t i c l . i c d
m o v e T o O u t p u t b i n / i n t e l _ c l c $d r i v e r s d e v
m o v e T o O u t p u t l i b / g a l l i u m - p i p e $o p e n c l
m o v e T o O u t p u t " l i b / l i b * O p e n C L * " $o p e n c l
m o v e T o O u t p u t " l i b / l i b O S M e s a * " $o s m e s a
m o v e T o O u t p u t b i n / s p i r v 2 d x i l $s p i r v 2 d x i l
m o v e T o O u t p u t " l i b / l i b s p i r v _ t o _ d x i l * " $s p i r v 2 d x i l
m o v e T o O u t p u t l i b / l i b t e f l o n . s o $t e f l o n
'' ;
postFixup = lib . optionalString stdenv . isLinux ''
postFixup = ''
# s e t t h e d e f a u l t s e a r c h p a t h f o r D R I d r i v e r s ; u s e d e . g . b y X s e r v e r
f o r p c i n l i b / p k g c o n f i g / { d r i , d 3 d } . p c ; d o
[ - f " $d e v / $p c " ] & & s u b s t i t u t e I n P l a c e " $d e v / $p c " - - r e p l a c e " $d r i v e r s " " ${ libglvnd . driverLink } "
@@ -471,8 +360,6 @@ self = stdenv.mkDerivation {
f i
d o n e
m o v e T o O u t p u t b i n / i n t e l _ c l c $d r i v e r s d e v
# D o n ' t d e p e n d o n b u i l d p y t h o n
p a t c h S h e b a n g s - - h o s t - - u p d a t e $o u t / b i n / *
@@ -486,59 +373,26 @@ self = stdenv.mkDerivation {
p a t c h e l f - - s e t - r p a t h " $( p a t c h e l f - - p r i n t - r p a t h $l i b ) : $d r i v e r s / l i b " " $l i b "
f i
d o n e
# a d d R P A T H h e r e s o Z i n k c a n f i n d l i b v u l k a n . s o
${ lib . optionalString haveZink ''
p a t c h e l f - - a d d - r p a t h ${ vulkan-loader } / l i b $d r i v e r s / l i b / d r i / z i n k _ d r i . s o
'' }
${ lib . optionalString enableTeflon ''
m o v e T o O u t p u t l i b / l i b t e f l o n . s o $t e f l o n
'' }
# a d d R P A T H h e r e s o Z i n k c a n f i n d l i b v u l k a n . s o
p a t c h e l f - - a d d - r p a t h ${ vulkan-loader } / l i b $d r i v e r s / l i b / d r i / z i n k _ d r i . s o
'' ;
env . NIX_CFLAGS_COMPILE = toString (
lib . optionals stdenv . isDarwin [
" - f n o - c o m m o n "
] ++ lib . optionals enableOpenCL [
" - U P I P E _ S E A R C H _ D I R "
" - D P I P E _ S E A R C H _ D I R = \" ${ placeholder " o p e n c l " } / l i b / g a l l i u m - p i p e \" "
env . NIX_CFLAGS_COMPILE = toString ( [
" - U P I P E _ S E A R C H _ D I R "
" - D P I P E _ S E A R C H _ D I R = \" ${ placeholder " o p e n c l " } / l i b / g a l l i u m - p i p e \" "
] ) ;
passthru = {
inherit ( libglvnd ) driverLink ;
inherit llvmPackages ;
libdrm = if withLibdrm then libdrm else null ;
tests = lib . optionalAttrs stdenv . isLinux {
devDoesNotDependOnLLVM = stdenv . mkDerivation {
name = " m e s a - d e v - d o e s - n o t - d e p e n d - o n - l l v m " ;
buildCommand = ''
e c h o ${ self . dev } > > $o u t
'' ;
disallowedRequisites = [ llvmPackages . llvm self . drivers ] ;
} ;
tests . devDoesNotDependOnLLVM = stdenv . mkDerivation {
name = " m e s a - d e v - d o e s - n o t - d e p e n d - o n - l l v m " ;
buildCommand = ''
e c h o ${ mesa . dev } > > $o u t
'' ;
disallowedRequisites = [ llvmPackages . llvm mesa . drivers ] ;
} ;
} ;
meta = {
description = " O p e n s o u r c e 3 D g r a p h i c s l i b r a r y " ;
longDescription = ''
T h e M e s a p r o j e c t b e g a n a s a n o p e n - s o u r c e i m p l e m e n t a t i o n o f t h e O p e n G L
s p e c i f i c a t i o n - a s y s t e m f o r r e n d e r i n g i n t e r a c t i v e 3 D g r a p h i c s . O v e r t h e
y e a r s t h e p r o j e c t h a s g r o w n t o i m p l e m e n t m o r e g r a p h i c s A P I s , i n c l u d i n g
O p e n G L E S ( v e r s i o n s 1 , 2 , 3 ) , O p e n C L , O p e n M A X , V D P A U , V A A P I , X v M C , a n d
V u l k a n . A v a r i e t y o f d e v i c e d r i v e r s a l l o w s t h e M e s a l i b r a r i e s t o b e u s e d
i n m a n y d i f f e r e n t e n v i r o n m e n t s r a n g i n g f r o m s o f t w a r e e m u l a t i o n t o
c o m p l e t e h a r d w a r e a c c e l e r a t i o n f o r m o d e r n G P U s .
'' ;
homepage = " h t t p s : / / w w w . m e s a 3 d . o r g / " ;
changelog = " h t t p s : / / w w w . m e s a 3 d . o r g / r e l n o t e s / ${ version } . h t m l " ;
license = with lib . licenses ; [ mit ] ; # X11 variant, in most files
platforms = lib . platforms . mesaPlatforms ;
badPlatforms = [ ] ; # Load bearing for libGL meta on Darwin.
maintainers = with lib . maintainers ; [ primeos vcunat ] ; # Help is welcome :)
} ;
} ;
in self
}