base16-schemes: unstable-2024-06-21 -> unstable-2024-11-12 (#356361)
[NixPkgs.git] / pkgs / tools / graphics / vulkan-cts / default.nix
blob885a17e7a6941c32bead5aa5d19703115538e555
1 { lib, stdenv
2 , fetchFromGitHub
3 , fetchurl
4 , runCommand
5 , cmake
6 , ffmpeg
7 , glslang
8 , libdrm
9 , libglvnd
10 , libffi
11 , libpng
12 , libX11
13 , libXau
14 , libXdmcp
15 , libxcb
16 , makeWrapper
17 , mesa
18 , ninja
19 , pkg-config
20 , python3
21 , spirv-headers
22 , vulkan-headers
23 , vulkan-loader
24 , vulkan-utility-libraries
25 , wayland
26 , wayland-protocols
27 , wayland-scanner
28 , zlib
30 let
31   renderdoc = fetchurl {
32     url = "https://raw.githubusercontent.com/baldurk/renderdoc/v1.1/renderdoc/api/app/renderdoc_app.h";
33     hash = "sha256-57XwqlsbDq3GOhxiTAyn9a8TOqhX1qQnGw7z0L22ho4=";
34   };
36   # The build system expects all these dependencies inside the external folder and
37   # does not search for system-wide installations.
38   # It also expects the version specified in the repository, which can be incompatible
39   # with the version in nixpkgs (e.g. for SPIRV-Headers), so we don't want to patch in our packages.
40   # The revisions are extracted from https://github.com/KhronosGroup/VK-GL-CTS/blob/main/external/fetch_sources.py#L290
41   # with the vk-cts-sources.py script.
42   sources = import ./sources.nix { inherit fetchurl fetchFromGitHub; };
44 stdenv.mkDerivation (finalAttrs: {
45   pname = "vulkan-cts";
46   version = "1.3.9.0";
48   src = fetchFromGitHub {
49     owner = "KhronosGroup";
50     repo = "VK-GL-CTS";
51     rev = "vulkan-cts-${finalAttrs.version}";
52     hash = "sha256-JCepNBVHaN4KXRcLOZ2z7toBMri90tV7kjNWHRXRESE=";
53   };
55   prePatch = ''
56     mkdir -p external/renderdoc/src
58     cp -r ${renderdoc} external/renderdoc/src/renderdoc_app.h
60     ${sources.prePatch}
62     substituteInPlace external/vulkan-validationlayers/CMakeLists.txt \
63       --replace-fail 'UPDATE_DEPS ON' 'UPDATE_DEPS OFF'
65     chmod u+w -R external
66   '';
68   buildInputs = [
69     ffmpeg
70     libdrm
71     libffi
72     libglvnd
73     libpng
74     libX11
75     libXau
76     libXdmcp
77     libxcb
78     vulkan-headers
79     vulkan-utility-libraries
80     wayland
81     wayland-protocols
82     zlib
83   ];
85   nativeBuildInputs = [
86     cmake
87     makeWrapper
88     ninja
89     pkg-config
90     python3
91     wayland-scanner
92   ];
94   depsBuildBuild = [
95     pkg-config
96   ];
98   cmakeFlags = [
99     # Fix cts cmake not coping with absolute install dirs
100     "-DCMAKE_INSTALL_BINDIR=bin"
101     "-DCMAKE_INSTALL_LIBDIR=lib"
102     "-DCMAKE_INSTALL_INCLUDEDIR=include"
104     "-DWAYLAND_SCANNER=wayland-scanner"
105     # For vulkan-validation-layers
106     "-DGLSLANG_INSTALL_DIR=${glslang}"
107     "-DSPIRV_HEADERS_INSTALL_DIR=${spirv-headers}"
108   ];
110   postInstall = ''
111     # Check that nothing was installed so far
112     ! test -e $out
114     mkdir -p $out/bin $out/archive-dir
115     cp -a external/vulkancts/modules/vulkan/deqp-vk external/vulkancts/modules/vulkan/deqp-vksc $out/bin/
116     cp -a external/vulkancts/modules/vulkan/vulkan $out/archive-dir/
117     cp -a external/vulkancts/modules/vulkan/vk-default $out/
119     wrapProgram $out/bin/deqp-vk \
120       --add-flags '--deqp-vk-library-path=${vulkan-loader}/lib/libvulkan.so' \
121       --add-flags "--deqp-archive-dir=$out/archive-dir"
122   '';
124   passthru.updateScript = ./update.sh;
125   passthru.tests.lavapipe = runCommand "vulkan-cts-tests-lavapipe" {
126     nativeBuildInputs = [ finalAttrs.finalPackage mesa.llvmpipeHook ];
127   } ''
128     deqp-vk -n dEQP-VK.api.smoke.triangle
129     touch $out
130   '';
132   meta = with lib; {
133     description = "Khronos Vulkan Conformance Tests";
134     homepage = "https://github.com/KhronosGroup/VK-GL-CTS/blob/main/external/vulkancts/README.md";
135     changelog = "https://github.com/KhronosGroup/VK-GL-CTS/releases/tag/vulkan-cts-${finalAttrs.version}";
136     license = licenses.asl20;
137     maintainers = with maintainers; [ Flakebi ];
138   };