biome: 1.9.2 -> 1.9.3
[NixPkgs.git] / pkgs / tools / graphics / amber / default.nix
blob12ff88d1340e8c466bca223429483958270b1ec8
1 { lib, stdenv
2 , fetchFromGitHub
3 , cmake
4 , pkg-config
5 , cctools
6 , makeWrapper
7 , mesa
8 , python3
9 , runCommand
10 , vulkan-headers
11 , vulkan-loader
12 , vulkan-validation-layers
14 let
15   # From https://github.com/google/amber/blob/main/DEPS
16   glslang = fetchFromGitHub {
17     owner = "KhronosGroup";
18     repo = "glslang";
19     rev = "e8dd0b6903b34f1879520b444634c75ea2deedf5";
20     hash = "sha256-B6jVCeoFjd2H6+7tIses+Kj8DgHS6E2dkVzQAIzDHEc=";
21   };
23   lodepng = fetchFromGitHub {
24     owner = "lvandeve";
25     repo = "lodepng";
26     rev = "5601b8272a6850b7c5d693dd0c0e16da50be8d8d";
27     hash = "sha256-dD8QoyOoGov6VENFNTXWRmen4nYYleoZ8+4TpICNSpo=";
28   };
30   shaderc = fetchFromGitHub {
31     owner = "google";
32     repo = "shaderc";
33     rev = "f59f0d11b80fd622383199c867137ededf89d43b";
34     hash = "sha256-kHz8Io5GZDWv1FjPyBWRpnKhGygKhSU4L9zl/AKXZlU=";
35   };
37   spirv-headers = fetchFromGitHub {
38     owner = "KhronosGroup";
39     repo = "SPIRV-Headers";
40     rev = "5e3ad389ee56fca27c9705d093ae5387ce404df4";
41     hash = "sha256-gjF5mVTXqU/GZzr2S6oKGChgvqqHcQSrEq/ePP2yJys=";
42   };
44   spirv-tools = fetchFromGitHub {
45     owner = "KhronosGroup";
46     repo = "SPIRV-Tools";
47     rev = "9241a58a8028c49510bc174b6c970e3c2b4b8e51";
48     hash = "sha256-0qHUpwNDJI2jV4h68QaTNPIwTPxwTt0iAUnMXqFCiJE=";
49   };
52 stdenv.mkDerivation (finalAttrs: {
53   pname = "amber";
54   version = "unstable-2024-08-21";
56   src = fetchFromGitHub {
57     owner = "google";
58     repo = "amber";
59     rev = "66399a35927606a435bf7a59756e87e6cb5a0013";
60     hash = "sha256-PCO64zI/vzp4HyGz5WpeYpCBeaWjTvz1punWsTz1yiM=";
61   };
63   buildInputs = [
64     vulkan-headers
65     vulkan-loader
66   ];
68   nativeBuildInputs = [
69     cmake
70     makeWrapper
71     pkg-config
72     python3
73   ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
74     cctools
75   ];
77   # Tests are disabled so we do not have to pull in googletest and more dependencies
78   cmakeFlags = [ "-DAMBER_SKIP_TESTS=ON" "-DAMBER_DISABLE_WERROR=ON" ];
80   prePatch = ''
81     cp -r ${glslang}/ third_party/glslang
82     cp -r ${lodepng}/ third_party/lodepng
83     cp -r ${shaderc}/ third_party/shaderc
84     cp -r ${spirv-tools}/ third_party/spirv-tools
85     cp -r ${spirv-headers}/ third_party/spirv-headers
86     chmod u+w -R third_party
88     substituteInPlace tools/update_build_version.py \
89       --replace "not os.path.exists(directory)" "True"
90   '';
92   installPhase = ''
93     install -Dm755 -t $out/bin amber image_diff
94     wrapProgram $out/bin/amber \
95       --suffix VK_LAYER_PATH : ${vulkan-validation-layers}/share/vulkan/explicit_layer.d
96   '';
98   passthru.tests.lavapipe = runCommand "vulkan-cts-tests-lavapipe" {
99     nativeBuildInputs = [ finalAttrs.finalPackage mesa.llvmpipeHook ];
100   } ''
101     cat > test.amber <<EOF
102     #!amber
103     # Simple amber compute shader.
105     SHADER compute kComputeShader GLSL
106     #version 450
108     layout(binding = 3) buffer block {
109       uvec2 values[];
110     };
112     void main() {
113       values[gl_WorkGroupID.x + gl_WorkGroupID.y * gl_NumWorkGroups.x] =
114                     gl_WorkGroupID.xy;
115     }
116     END  # shader
118     BUFFER kComputeBuffer DATA_TYPE vec2<int32> SIZE 524288 FILL 0
120     PIPELINE compute kComputePipeline
121       ATTACH kComputeShader
122       BIND BUFFER kComputeBuffer AS storage DESCRIPTOR_SET 0 BINDING 3
123     END  # pipeline
125     RUN kComputePipeline 256 256 1
127     # Four corners
128     EXPECT kComputeBuffer IDX 0 EQ 0 0
129     EXPECT kComputeBuffer IDX 2040 EQ 255 0
130     EXPECT kComputeBuffer IDX 522240 EQ 0 255
131     EXPECT kComputeBuffer IDX 524280 EQ 255 255
133     # Center
134     EXPECT kComputeBuffer IDX 263168 EQ 128 128
135     EOF
137     amber test.amber
138     touch $out
139   '';
141   meta = with lib; {
142     description = "Multi-API shader test framework";
143     homepage = "https://github.com/google/amber";
144     license = licenses.asl20;
145     maintainers = with maintainers; [ Flakebi ];
146   };