nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at python-updates 159 lines 4.0 kB view raw
1{ 2 lib, 3 stdenv, 4 fetchFromGitHub, 5 cmake, 6 pkg-config, 7 cctools, 8 makeWrapper, 9 mesa, 10 python3, 11 runCommand, 12 vulkan-headers, 13 vulkan-loader, 14 vulkan-validation-layers, 15}: 16let 17 # From https://github.com/google/amber/blob/main/DEPS 18 glslang = fetchFromGitHub { 19 owner = "KhronosGroup"; 20 repo = "glslang"; 21 rev = "340bf88f3fdb4f4a25b7071cd2c1205035fc6eaa"; 22 hash = "sha256-3h27yE6k4BgUAugQCkpUYO5aIHpK6Anyh90y3q+aYpM="; 23 }; 24 25 lodepng = fetchFromGitHub { 26 owner = "lvandeve"; 27 repo = "lodepng"; 28 rev = "5601b8272a6850b7c5d693dd0c0e16da50be8d8d"; 29 hash = "sha256-dD8QoyOoGov6VENFNTXWRmen4nYYleoZ8+4TpICNSpo="; 30 }; 31 32 shaderc = fetchFromGitHub { 33 owner = "google"; 34 repo = "shaderc"; 35 rev = "690d259384193c90c01b52288e280b05a8481121"; 36 hash = "sha256-p4tP/8lRy0tpdDHIuh2/tWPIBBr2ludFRSr+Q2TbUic="; 37 }; 38 39 spirv-headers = fetchFromGitHub { 40 owner = "KhronosGroup"; 41 repo = "SPIRV-Headers"; 42 rev = "3f17b2af6784bfa2c5aa5dbb8e0e74a607dd8b3b"; 43 hash = "sha256-MCQ+i9ymjnxRZP/Agk7rOGdHcB4p67jT4J4athWUlcI="; 44 }; 45 46 spirv-tools = fetchFromGitHub { 47 owner = "KhronosGroup"; 48 repo = "SPIRV-Tools"; 49 rev = "13b59bf1d84054b8ccd29cdc6b1303f69e8f9e77"; 50 hash = "sha256-k/mTHiLbZdnslC24fjcrzqsZYMyVaAADGEqngqJcC2c="; 51 }; 52 53in 54stdenv.mkDerivation (finalAttrs: { 55 pname = "amber"; 56 version = "0-unstable-2025-02-03"; 57 58 src = fetchFromGitHub { 59 owner = "google"; 60 repo = "amber"; 61 rev = "3f078e41d86ca1a5881560f00e26198f59bb8ac0"; 62 hash = "sha256-pAotVFmtEGp9GKmDD0vrbfbO+Xt2URmM8gYCjl0LEnk="; 63 }; 64 65 buildInputs = [ 66 vulkan-headers 67 vulkan-loader 68 ]; 69 70 nativeBuildInputs = [ 71 cmake 72 makeWrapper 73 pkg-config 74 python3 75 ] 76 ++ lib.optionals stdenv.hostPlatform.isDarwin [ 77 cctools 78 ]; 79 80 # Tests are disabled so we do not have to pull in googletest and more dependencies 81 cmakeFlags = [ 82 "-DAMBER_SKIP_TESTS=ON" 83 "-DAMBER_DISABLE_WERROR=ON" 84 ]; 85 86 prePatch = '' 87 cp -r ${glslang}/ third_party/glslang 88 cp -r ${lodepng}/ third_party/lodepng 89 cp -r ${shaderc}/ third_party/shaderc 90 cp -r ${spirv-tools}/ third_party/spirv-tools 91 cp -r ${spirv-headers}/ third_party/spirv-headers 92 chmod u+w -R third_party 93 94 substituteInPlace tools/update_build_version.py \ 95 --replace "not os.path.exists(directory)" "True" 96 ''; 97 98 installPhase = '' 99 install -Dm755 -t $out/bin amber image_diff 100 wrapProgram $out/bin/amber \ 101 --suffix VK_LAYER_PATH : ${vulkan-validation-layers}/share/vulkan/explicit_layer.d 102 ''; 103 104 passthru.tests.lavapipe = 105 runCommand "vulkan-cts-tests-lavapipe" 106 { 107 nativeBuildInputs = [ 108 finalAttrs.finalPackage 109 mesa.llvmpipeHook 110 ]; 111 } 112 '' 113 cat > test.amber <<EOF 114 #!amber 115 # Simple amber compute shader. 116 117 SHADER compute kComputeShader GLSL 118 #version 450 119 120 layout(binding = 3) buffer block { 121 uvec2 values[]; 122 }; 123 124 void main() { 125 values[gl_WorkGroupID.x + gl_WorkGroupID.y * gl_NumWorkGroups.x] = 126 gl_WorkGroupID.xy; 127 } 128 END # shader 129 130 BUFFER kComputeBuffer DATA_TYPE vec2<int32> SIZE 524288 FILL 0 131 132 PIPELINE compute kComputePipeline 133 ATTACH kComputeShader 134 BIND BUFFER kComputeBuffer AS storage DESCRIPTOR_SET 0 BINDING 3 135 END # pipeline 136 137 RUN kComputePipeline 256 256 1 138 139 # Four corners 140 EXPECT kComputeBuffer IDX 0 EQ 0 0 141 EXPECT kComputeBuffer IDX 2040 EQ 255 0 142 EXPECT kComputeBuffer IDX 522240 EQ 0 255 143 EXPECT kComputeBuffer IDX 524280 EQ 255 255 144 145 # Center 146 EXPECT kComputeBuffer IDX 263168 EQ 128 128 147 EOF 148 149 amber test.amber 150 touch $out 151 ''; 152 153 meta = { 154 description = "Multi-API shader test framework"; 155 homepage = "https://github.com/google/amber"; 156 license = lib.licenses.asl20; 157 maintainers = with lib.maintainers; [ Flakebi ]; 158 }; 159})