Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
ad21f20321 |
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1 +0,0 @@
|
||||||
/result
|
|
|
@ -47,6 +47,7 @@ configuration.
|
||||||
- `nix-env -f ./ -iA nixGLIntel`: Mesa OpenGL implementation (intel, amd, nouveau, ...).
|
- `nix-env -f ./ -iA nixGLIntel`: Mesa OpenGL implementation (intel, amd, nouveau, ...).
|
||||||
- `nix-env -f ./ -iA nixGLNvidiaBumblebee`: Proprietary Nvidia driver on hybrid hardware.
|
- `nix-env -f ./ -iA nixGLNvidiaBumblebee`: Proprietary Nvidia driver on hybrid hardware.
|
||||||
- `nix-env -f ./ -iA nixGLNvidia`: Proprietary Nvidia driver.
|
- `nix-env -f ./ -iA nixGLNvidia`: Proprietary Nvidia driver.
|
||||||
|
- `nix-env -f ./ -iA nixGLAmdGPU`: Free AMDGpu driver.
|
||||||
- `nix-env -f ./ -iA nixGLDefault`: Tries to auto-detect and install Nvidia,
|
- `nix-env -f ./ -iA nixGLDefault`: Tries to auto-detect and install Nvidia,
|
||||||
if not, fallback to mesa.
|
if not, fallback to mesa.
|
||||||
|
|
||||||
|
@ -101,7 +102,7 @@ After installing `nixVulkanIntel`.
|
||||||
```bash
|
```bash
|
||||||
$ sudo apt install mesa-vulkan-drivers
|
$ sudo apt install mesa-vulkan-drivers
|
||||||
...
|
...
|
||||||
$ nixVulkanIntel $(nix-build '<nixpkgs>' --no-out-link -A vulkan-tools)/bin/vulkaninfo | grep VkPhysicalDeviceProperties -A 7
|
$ nixVulkanIntel $(nix-build '<nixpkgs>' --no-out-link -A vulkan-loader)/bin/vulkaninfo | grep VkPhysicalDeviceProperties -A 7
|
||||||
VkPhysicalDeviceProperties:
|
VkPhysicalDeviceProperties:
|
||||||
===========================
|
===========================
|
||||||
apiVersion = 0x400036 (1.0.54)
|
apiVersion = 0x400036 (1.0.54)
|
||||||
|
|
8
Test.hs
8
Test.hs
|
@ -95,6 +95,14 @@ main = do
|
||||||
describe "Vulkan" $ do
|
describe "Vulkan" $ do
|
||||||
checkVulkan "Mesa" "nixVulkanIntel"
|
checkVulkan "Mesa" "nixVulkanIntel"
|
||||||
|
|
||||||
|
describe "AMD GPU" $ do
|
||||||
|
describe "OpenGL" $ do
|
||||||
|
-- TODO: fill the right name for glxinfo data
|
||||||
|
checkOpenGL "AMD" "nixGLAmdGPU"
|
||||||
|
xdescribe "Vulkan" $ do
|
||||||
|
-- Not tested yet
|
||||||
|
checkVulkan "AMD" "nixVulkanAmdGPU"
|
||||||
|
|
||||||
describe "Nvidia - Bumblebee" $ do
|
describe "Nvidia - Bumblebee" $ do
|
||||||
describe "OpenGL" $ do
|
describe "OpenGL" $ do
|
||||||
checkOpenGL "NVIDIA" "nixGLNvidiaBumblebee"
|
checkOpenGL "NVIDIA" "nixGLNvidiaBumblebee"
|
||||||
|
|
29
default.nix
Normal file
29
default.nix
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
{ ## Nvidia informations.
|
||||||
|
# Version of the system kernel module. Let it to null to enable auto-detection.
|
||||||
|
nvidiaVersion ? null,
|
||||||
|
# Hash of the Nvidia driver .run file. null is fine, but fixing a value here
|
||||||
|
# will be more reproducible and more efficient.
|
||||||
|
nvidiaHash ? null,
|
||||||
|
# Alternatively, you can pass a path that points to a nvidia version file
|
||||||
|
# and let nixGL extract the version from it. That file must be a copy of
|
||||||
|
# /proc/driver/nvidia/version. Nix doesn't like zero-sized files (see
|
||||||
|
# https://github.com/NixOS/nix/issues/3539 ).
|
||||||
|
nvidiaVersionFile ? null,
|
||||||
|
# Enable 32 bits driver
|
||||||
|
# This is one by default, you can switch it to off if you want to reduce a
|
||||||
|
# bit the size of nixGL closure.
|
||||||
|
enable32bits ? true,
|
||||||
|
# Make sure to enable config.allowUnfree to the instance of nixpkgs to be
|
||||||
|
# able to access the nvidia drivers.
|
||||||
|
pkgs ? import <nixpkgs> {
|
||||||
|
config = { allowUnfree = true; };
|
||||||
|
}
|
||||||
|
}:
|
||||||
|
pkgs.callPackage ./nixGL.nix {
|
||||||
|
inherit
|
||||||
|
nvidiaVersion
|
||||||
|
nvidiaVersionFile
|
||||||
|
nvidiaHash
|
||||||
|
enable32bits
|
||||||
|
;
|
||||||
|
}
|
72
flake.lock
72
flake.lock
|
@ -1,72 +0,0 @@
|
||||||
{
|
|
||||||
"nodes": {
|
|
||||||
"lowdown-src": {
|
|
||||||
"flake": false,
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1598695561,
|
|
||||||
"narHash": "sha256-gyH/5j+h/nWw0W8AcR2WKvNBUsiQ7QuxqSJNXAwV+8E=",
|
|
||||||
"owner": "kristapsdz",
|
|
||||||
"repo": "lowdown",
|
|
||||||
"rev": "1705b4a26fbf065d9574dce47a94e8c7c79e052f",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "kristapsdz",
|
|
||||||
"repo": "lowdown",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nix": {
|
|
||||||
"inputs": {
|
|
||||||
"lowdown-src": "lowdown-src",
|
|
||||||
"nixpkgs": "nixpkgs"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1604964115,
|
|
||||||
"narHash": "sha256-ANcswniHS4eYeMNyCGdiG3z0M35vEyvWoCsdLnTvObA=",
|
|
||||||
"owner": "NixOS",
|
|
||||||
"repo": "nix",
|
|
||||||
"rev": "0ed7c957bed18d963df65d55f0c0ffc79dee656d",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"id": "nix",
|
|
||||||
"type": "indirect"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1602702596,
|
|
||||||
"narHash": "sha256-fqJ4UgOb4ZUnCDIapDb4gCrtAah5Rnr2/At3IzMitig=",
|
|
||||||
"owner": "NixOS",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "ad0d20345219790533ebe06571f82ed6b034db31",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"id": "nixpkgs",
|
|
||||||
"ref": "nixos-20.09-small",
|
|
||||||
"type": "indirect"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs_2": {
|
|
||||||
"locked": {
|
|
||||||
"narHash": "sha256-wLDweKqbmufa2wonCKBf4Wfl8I0eS1CGS7WdR5tPHKo=",
|
|
||||||
"type": "tarball",
|
|
||||||
"url": "https://github.com/NixOS/nixpkgs/archive/60330b60655b3fa3a18624bdd7069855bb37af99.tar.gz"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"type": "tarball",
|
|
||||||
"url": "https://github.com/NixOS/nixpkgs/archive/60330b60655b3fa3a18624bdd7069855bb37af99.tar.gz"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"root": {
|
|
||||||
"inputs": {
|
|
||||||
"nix": "nix",
|
|
||||||
"nixpkgs": "nixpkgs_2"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"root": "root",
|
|
||||||
"version": 7
|
|
||||||
}
|
|
49
flake.nix
49
flake.nix
|
@ -1,49 +0,0 @@
|
||||||
{
|
|
||||||
description = "";
|
|
||||||
inputs = {
|
|
||||||
nixpkgs.url = https://github.com/NixOS/nixpkgs/archive/60330b60655b3fa3a18624bdd7069855bb37af99.tar.gz;
|
|
||||||
};
|
|
||||||
outputs = { nixpkgs, nix, self, ... }@inputs : {
|
|
||||||
defaultPackage.x86_64-linux =
|
|
||||||
let pkgs = import nixpkgs { system = "x86_64-linux"; config = { allowUnfree = true; }; }; in
|
|
||||||
(pkgs.callPackage ./nixGL.nix {
|
|
||||||
nvidiaVersionFile = null;
|
|
||||||
nvidiaVersion = "455.28"; nvidiaHash = "03ysf61qrb272yqkn7bhn9d65lcfhmqc2c0dbh5prp5f2ndlkqg4";
|
|
||||||
# nvidiaVersion = "455.23.04"; nvidiaHash = "0rvbb9s4ijb0gyiscd93chbgim4lqmy4ksfy15b4abf078qk7q4g";
|
|
||||||
# …
|
|
||||||
enable32bits = true;
|
|
||||||
}).nixGLIntel; # nixGLNvidia;
|
|
||||||
# nixpkgs.stdenv.mkDerivation {
|
|
||||||
# builsInputs = [];
|
|
||||||
# { ## Nvidia informations.
|
|
||||||
# # Version of the system kernel module. Let it to null to enable auto-detection.
|
|
||||||
# nvidiaVersion ? null,
|
|
||||||
# # Hash of the Nvidia driver .run file. null is fine, but fixing a value here
|
|
||||||
# # will be more reproducible and more efficient.
|
|
||||||
# nvidiaHash ? null,
|
|
||||||
# # Alternatively, you can pass a path that points to a nvidia version file
|
|
||||||
# # and let nixGL extract the version from it. That file must be a copy of
|
|
||||||
# # /proc/driver/nvidia/version. Nix doesn't like zero-sized files (see
|
|
||||||
# # https://github.com/NixOS/nix/issues/3539 ).
|
|
||||||
# nvidiaVersionFile ? null,
|
|
||||||
# # Enable 32 bits driver
|
|
||||||
# # This is one by default, you can switch it to off if you want to reduce a
|
|
||||||
# # bit the size of nixGL closure.
|
|
||||||
# enable32bits ? true,
|
|
||||||
# # Make sure to enable config.allowUnfree to the instance of nixpkgs to be
|
|
||||||
# # able to access the nvidia drivers.
|
|
||||||
# pkgs ? import <nixpkgs> {
|
|
||||||
# config = { allowUnfree = true; };
|
|
||||||
# }
|
|
||||||
# }:
|
|
||||||
# pkgs.callPackage ./nixGL.nix {
|
|
||||||
# inherit
|
|
||||||
# nvidiaVersion
|
|
||||||
# nvidiaVersionFile
|
|
||||||
# nvidiaHash
|
|
||||||
# enable32bits
|
|
||||||
# ;
|
|
||||||
# };
|
|
||||||
# };
|
|
||||||
};
|
|
||||||
}
|
|
29
nixGL.nix
29
nixGL.nix
|
@ -14,7 +14,7 @@
|
||||||
# bit the size of nixGL closure.
|
# bit the size of nixGL closure.
|
||||||
enable32bits ? true,
|
enable32bits ? true,
|
||||||
writeTextFile, shellcheck, pcre, runCommand, linuxPackages, fetchurl, lib,
|
writeTextFile, shellcheck, pcre, runCommand, linuxPackages, fetchurl, lib,
|
||||||
runtimeShell, bumblebee, libglvnd, vulkan-validation-layers, mesa_drivers,
|
bumblebee, libglvnd, vulkan-validation-layers, mesa_drivers,
|
||||||
pkgsi686Linux,zlib, libdrm, xorg, wayland, gcc
|
pkgsi686Linux,zlib, libdrm, xorg, wayland, gcc
|
||||||
}:
|
}:
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ in
|
||||||
nixGLNvidiaBumblebee = addNvidiaVersion (writeExecutable {
|
nixGLNvidiaBumblebee = addNvidiaVersion (writeExecutable {
|
||||||
name = "nixGLNvidiaBumblebee";
|
name = "nixGLNvidiaBumblebee";
|
||||||
text = ''
|
text = ''
|
||||||
#!${runtimeShell}
|
#!/usr/bin/env sh
|
||||||
export LD_LIBRARY_PATH=${lib.makeLibraryPath [nvidia]}:$LD_LIBRARY_PATH
|
export LD_LIBRARY_PATH=${lib.makeLibraryPath [nvidia]}:$LD_LIBRARY_PATH
|
||||||
${bumblebee.override {nvidia_x11 = nvidia; nvidia_x11_i686 = nvidia.lib32;}}/bin/optirun --ldpath ${lib.makeLibraryPath ([libglvnd nvidia] ++ lib.optionals enable32bits [nvidia.lib32 pkgsi686Linux.libglvnd])} "$@"
|
${bumblebee.override {nvidia_x11 = nvidia; nvidia_x11_i686 = nvidia.lib32;}}/bin/optirun --ldpath ${lib.makeLibraryPath ([libglvnd nvidia] ++ lib.optionals enable32bits [nvidia.lib32 pkgsi686Linux.libglvnd])} "$@"
|
||||||
'';
|
'';
|
||||||
|
@ -107,15 +107,15 @@ in
|
||||||
nixNvidiaWrapper = api: addNvidiaVersion (writeExecutable {
|
nixNvidiaWrapper = api: addNvidiaVersion (writeExecutable {
|
||||||
name = "nix${api}Nvidia";
|
name = "nix${api}Nvidia";
|
||||||
text = ''
|
text = ''
|
||||||
#!${runtimeShell}
|
#!/usr/bin/env sh
|
||||||
${lib.optionalString (api == "Vulkan") ''export VK_LAYER_PATH=${vulkan-validation-layers}/share/vulkan/explicit_layer.d''}
|
${lib.optionalString (api == "Vulkan") ''export VK_LAYER_PATH=${vulkan-validation-layers}/share/vulkan/explicit_layer.d''}
|
||||||
|
|
||||||
${lib.optionalString (api == "Vulkan") ''export VK_ICD_FILENAMES=${nvidiaLibsOnly}/share/vulkan/icd.d/nvidia.json${lib.optionalString enable32bits ":${nvidiaLibsOnly.lib32}/share/vulkan/icd.d/nvidia.json"}:$VK_ICD_FILENAMES''}
|
${lib.optionalString (api == "Vulkan") ''export VK_ICD_FILENAMES=${nvidia}/share/vulkan/icd.d/nvidia.json${lib.optionalString enable32bits ":${nvidia.lib32}/share/vulkan/icd.d/nvidia.json"}:$VK_ICD_FILENAMES''}
|
||||||
export LD_LIBRARY_PATH=${lib.makeLibraryPath ([
|
export LD_LIBRARY_PATH=${lib.makeLibraryPath ([
|
||||||
libglvnd
|
libglvnd
|
||||||
nvidiaLibsOnly
|
nvidiaLibsOnly
|
||||||
] ++ lib.optional (api == "Vulkan") vulkan-validation-layers
|
] ++ lib.optional (api == "Vulkan") vulkan-validation-layers
|
||||||
++ lib.optionals enable32bits [nvidiaLibsOnly.lib32 pkgsi686Linux.libglvnd])
|
++ lib.optionals enable32bits [nvidia.lib32 pkgsi686Linux.libglvnd])
|
||||||
}:''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
|
}:''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
|
||||||
"$@"
|
"$@"
|
||||||
'';
|
'';
|
||||||
|
@ -133,7 +133,7 @@ in
|
||||||
text = let
|
text = let
|
||||||
drivers = [mesa_drivers] ++ lib.optional enable32bits pkgsi686Linux.mesa_drivers;
|
drivers = [mesa_drivers] ++ lib.optional enable32bits pkgsi686Linux.mesa_drivers;
|
||||||
in ''
|
in ''
|
||||||
#!${runtimeShell}
|
#!/usr/bin/env sh
|
||||||
export LIBGL_DRIVERS_PATH=${lib.makeSearchPathOutput "lib" "lib/dri" drivers}
|
export LIBGL_DRIVERS_PATH=${lib.makeSearchPathOutput "lib" "lib/dri" drivers}
|
||||||
export LD_LIBRARY_PATH=${
|
export LD_LIBRARY_PATH=${
|
||||||
lib.makeLibraryPath drivers
|
lib.makeLibraryPath drivers
|
||||||
|
@ -158,7 +158,7 @@ in
|
||||||
+ ''cat f | xargs | sed "s/ /:/g" > $out''
|
+ ''cat f | xargs | sed "s/ /:/g" > $out''
|
||||||
);
|
);
|
||||||
in ''
|
in ''
|
||||||
#!${runtimeShell}
|
#!/usr/bin/env bash
|
||||||
if [ -n "$LD_LIBRARY_PATH" ]; then
|
if [ -n "$LD_LIBRARY_PATH" ]; then
|
||||||
echo "Warning, nixVulkanIntel overwriting existing LD_LIBRARY_PATH" 1>&2
|
echo "Warning, nixVulkanIntel overwriting existing LD_LIBRARY_PATH" 1>&2
|
||||||
fi
|
fi
|
||||||
|
@ -178,6 +178,21 @@ in
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Support for amdgpu
|
||||||
|
nixGLAmdGPU = writeExecutable {
|
||||||
|
name = "nixGLAmdGPU";
|
||||||
|
# add the 32 bits drivers if needed
|
||||||
|
text = let
|
||||||
|
drivers = [xorg.xf86videoamdgpu] ++ lib.optional enable32bits pkgsi686Linux.xorg.xf86videoamdgpu;
|
||||||
|
in ''
|
||||||
|
#!/usr/bin/env sh
|
||||||
|
export LD_LIBRARY_PATH=${
|
||||||
|
lib.makeLibraryPath drivers
|
||||||
|
}:$LD_LIBRARY_PATH
|
||||||
|
"$@"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
nixGLCommon = nixGL:
|
nixGLCommon = nixGL:
|
||||||
runCommand "nixGLCommon" {
|
runCommand "nixGLCommon" {
|
||||||
buildInuts = [nixGL];
|
buildInuts = [nixGL];
|
||||||
|
|
Loading…
Reference in New Issue
Block a user