gnu: Add sideload.
[jackhill/guix/guix.git] / gnu / packages / vulkan.scm
CommitLineData
0df77274 1;;; GNU Guix --- Functional package management for GNU
67ff2bdf 2;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
3b149747 3;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
5983b783 4;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
936b7906 5;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
0df77274
RH
6;;;
7;;; This file is part of GNU Guix.
8;;;
9;;; GNU Guix is free software; you can redistribute it and/or modify it
10;;; under the terms of the GNU General Public License as published by
11;;; the Free Software Foundation; either version 3 of the License, or (at
12;;; your option) any later version.
13;;;
14;;; GNU Guix is distributed in the hope that it will be useful, but
15;;; WITHOUT ANY WARRANTY; without even the implied warranty of
16;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17;;; GNU General Public License for more details.
18;;;
19;;; You should have received a copy of the GNU General Public License
20;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
21
22(define-module (gnu packages vulkan)
23 #:use-module ((guix licenses) #:prefix license:)
24 #:use-module (guix packages)
794d740e 25 #:use-module (guix download)
0df77274
RH
26 #:use-module (guix git-download)
27 #:use-module (guix build-system cmake)
85c7f29a 28 #:use-module (guix build-system gnu)
5b69baf0 29 #:use-module (guix build-system meson)
794d740e 30 #:use-module (gnu packages)
85c7f29a 31 #:use-module (gnu packages autotools)
6a11d5f1 32 #:use-module (gnu packages bison)
7f540654 33 #:use-module (gnu packages check)
5b69baf0 34 #:use-module (gnu packages cmake)
9286e0ec 35 #:use-module (gnu packages freedesktop)
85c7f29a 36 #:use-module (gnu packages gettext)
9286e0ec 37 #:use-module (gnu packages gl)
794d740e 38 #:use-module (gnu packages pkg-config)
9286e0ec 39 #:use-module (gnu packages python)
85c7f29a 40 #:use-module (gnu packages wine)
9286e0ec 41 #:use-module (gnu packages xorg))
0df77274
RH
42
43(define-public spirv-headers
93c5c6d1
RH
44 (package
45 (name "spirv-headers")
936b7906 46 (version "1.5.3")
93c5c6d1
RH
47 (source
48 (origin
49 (method git-fetch)
50 (uri (git-reference
51 (url "https://github.com/KhronosGroup/SPIRV-Headers")
52 (commit version)))
53 (sha256
54 (base32
936b7906
MB
55 "069sivqajp7z4p44lmrz23lvf237xpkjxd4lzrg27836pwqcz9bj"))
56 (file-name (git-file-name name version))))
93c5c6d1
RH
57 (build-system cmake-build-system)
58 (arguments
936b7906 59 `(#:tests? #f)) ;no tests
93c5c6d1
RH
60 (home-page "https://github.com/KhronosGroup/SPIRV-Headers")
61 (synopsis "Machine-readable files from the SPIR-V Registry")
62 (description
63 "SPIRV-Headers is a repository containing machine-readable files from
0df77274
RH
64the SPIR-V Registry. This includes:
65@itemize
66@item Header files for various languages.
67@item JSON files describing the grammar for the SPIR-V core instruction set,
68and for the GLSL.std.450 extended instruction set.
69@item The XML registry file.
70@end itemize\n")
93c5c6d1
RH
71 (license (license:x11-style
72 (string-append "https://github.com/KhronosGroup/SPIRV-Headers/blob/"
73 version "/LICENSE")))))
794d740e
RH
74
75(define-public spirv-tools
264c803b
RH
76 (package
77 (name "spirv-tools")
cce94247 78 (version "2020.2")
264c803b
RH
79 (source
80 (origin
81 (method git-fetch)
82 (uri (git-reference
83 (url "https://github.com/KhronosGroup/SPIRV-Tools")
84 (commit (string-append "v" version))))
85 (sha256
cce94247 86 (base32 "00b7xgyrcb2qq63pp3cnw5q1xqx2d9rfn65lai6n6r89s1vh3vg6"))
d7a7d255 87 (file-name (git-file-name name version))))
264c803b
RH
88 (build-system cmake-build-system)
89 (arguments
8a37a214
MB
90 `(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON"
91 (string-append
92 "-DSPIRV-Headers_SOURCE_DIR="
93 (assoc-ref %build-inputs "spirv-headers")))))
264c803b 94 (inputs `(("spirv-headers" ,spirv-headers)))
9f74ec98 95 (native-inputs `(("pkg-config" ,pkg-config)
264c803b
RH
96 ("python" ,python)))
97 (home-page "https://github.com/KhronosGroup/SPIRV-Tools")
98 (synopsis "API and commands for processing SPIR-V modules")
99 (description
100 "The SPIR-V Tools project provides an API and commands for processing
101SPIR-V modules. The project includes an assembler, binary module
102parser,disassembler, validator, and optimizer for SPIR-V.")
103 (license license:asl2.0)))
6a11d5f1
RH
104
105(define-public glslang
3113ecfa
RH
106 (package
107 (name "glslang")
f3d3726e 108 (version "8.13.3743")
3113ecfa
RH
109 (source
110 (origin
a9342820
RH
111 (method git-fetch)
112 (uri (git-reference
3113ecfa
RH
113 (url "https://github.com/KhronosGroup/glslang")
114 (commit version)))
794d740e
RH
115 (sha256
116 (base32
f3d3726e 117 "0d20wfpp2fmbnz1hnsjr9xc62lxpj86ik2qyviqbni0pqj212cry"))
a9342820 118 (file-name (string-append name "-" version "-checkout"))))
3113ecfa
RH
119 (build-system cmake-build-system)
120 (arguments
1c5b9c3d
MB
121 '(#:tests? #f ;FIXME: requires bundled SPIRV-Tools
122 #:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
f3d3726e
MB
123 (native-inputs
124 `(("pkg-config" ,pkg-config)
125 ("python" ,python)))
3113ecfa
RH
126 (home-page "https://github.com/KhronosGroup/glslang")
127 (synopsis "OpenGL and OpenGL ES shader front end and validator")
128 (description
129 "Glslang is the official reference compiler front end for the
6a11d5f1
RH
130OpenGL@tie{}ES and OpenGL shading languages. It implements a strict
131interpretation of the specifications for these languages.")
3113ecfa
RH
132 ;; Modified BSD license. See "copyright" section of
133 ;; https://www.khronos.org/opengles/sdk/tools/Reference-Compiler/
134 (license (list license:bsd-3
135 ;; include/SPIRV/{bitutils,hex_float}.h are Apache 2.0.
136 license:asl2.0))))
9286e0ec 137
cf09bed4
RH
138(define-public vulkan-headers
139 (package
140 (name "vulkan-headers")
d840f3b7 141 (version "1.2.141")
cf09bed4
RH
142 (source
143 (origin
67ff2bdf
RH
144 (method git-fetch)
145 (uri (git-reference
146 (url "https://github.com/KhronosGroup/Vulkan-Headers")
147 (commit (string-append "v" version))))
b8f9e97d 148 (file-name (git-file-name name version))
cf09bed4
RH
149 (sha256
150 (base32
d840f3b7 151 "10nmx6y4llllfcczyfz76amd0vkqv09dj952d19zkzmmgcval7zq"))))
cf09bed4
RH
152 (build-system cmake-build-system)
153 (arguments
67ff2bdf 154 `(#:tests? #f)) ; No tests.
cf09bed4
RH
155 (home-page
156 "https://github.com/KhronosGroup/Vulkan-Headers")
157 (synopsis "Vulkan Header files and API registry")
158 (description
159 "Vulkan-Headers contains header files and API registry for Vulkan.")
160 (license (list license:asl2.0)))) ;LICENSE.txt
161
e6fcf903 162(define-public vulkan-loader
9286e0ec 163 (package
e6fcf903 164 (name "vulkan-loader")
cc8550ef 165 (version "1.2.140")
9286e0ec
RH
166 (source
167 (origin
67ff2bdf
RH
168 (method git-fetch)
169 (uri (git-reference
170 (url "https://github.com/KhronosGroup/Vulkan-Loader")
171 (commit (string-append "v" version))))
b8f9e97d 172 (file-name (git-file-name name version))
9286e0ec
RH
173 (sha256
174 (base32
cc8550ef 175 "0rhyz0qgp0i7pcx6wlvgwy7j33d4cs0xx39f0b6igpfk0vk70r1w"))))
9286e0ec
RH
176 (build-system cmake-build-system)
177 (arguments
6a8fca14
MB
178 `(#:phases (modify-phases %standard-phases
179 (add-after 'unpack 'unpack-googletest
180 (lambda* (#:key inputs #:allow-other-keys)
181 (let ((gtest (assoc-ref inputs "googletest:source")))
182 (when gtest
183 (copy-recursively gtest "external/googletest"))
184 #t)))
185 (add-after 'unpack 'disable-loader-tests
186 (lambda _
187 ;; Many tests require a Vulkan driver. Skip those.
188 (substitute* "tests/loader_validation_tests.cpp"
189 ((".*= vkCreateInstance.*" all)
190 (string-append "GTEST_SKIP();\n" all))
191 (("TEST_F.*InstanceExtensionEnumerated.*" all)
192 (string-append all "\nGTEST_SKIP();\n")))
193 #t)))))
194 (native-inputs
195 `(("googletest:source" ,(package-source googletest))
196 ("libxrandr" ,libxrandr)
197 ("pkg-config" ,pkg-config)
198 ("python" ,python)
199 ("vulkan-headers" ,vulkan-headers)
200 ("wayland" ,wayland)))
9286e0ec 201 (home-page
b1eb1ba9 202 "https://github.com/KhronosGroup/Vulkan-Loader")
9286e0ec
RH
203 (synopsis "Khronos official ICD loader and validation layers for Vulkan")
204 (description
205 "Vulkan allows multiple @dfn{Installable Client Drivers} (ICDs) each
206supporting one or more devices to be used collectively. The loader is
207responsible for discovering available Vulkan ICDs on the system and inserting
208Vulkan layer libraries, including validation layers between the application
209and the ICD.")
210 ;; This software is mainly Apache 2.0 licensed, but contains some components
211 ;; covered by other licenses. See COPYRIGHT.txt for details.
212 (license (list license:asl2.0 ;LICENSE.txt
213 (license:x11-style "file://COPYRIGHT.txt")
214 license:bsd-3))))
5b69baf0 215
bee7e46a
RH
216(define-public vulkan-tools
217 (package
218 (name "vulkan-tools")
f26bceb4 219 (version "1.2.140")
bee7e46a
RH
220 (source
221 (origin
67ff2bdf
RH
222 (method git-fetch)
223 (uri (git-reference
224 (url "https://github.com/KhronosGroup/Vulkan-Tools")
b8f9e97d
RH
225 (commit (string-append "v" version))))
226 (file-name (git-file-name name version))
bee7e46a
RH
227 (sha256
228 (base32
f26bceb4 229 "08dk0q77kpycn4vv19jh3ig73gbq3psan246a7fss0nfxpiddg0j"))))
bee7e46a
RH
230 (build-system cmake-build-system)
231 (inputs
232 `(("glslang" ,glslang)
233 ("libxrandr" ,libxrandr)
bee7e46a
RH
234 ("vulkan-loader" ,vulkan-loader)
235 ("wayland" ,wayland)))
236 (native-inputs
237 `(("pkg-config" ,pkg-config)
1661f09a
RH
238 ("python" ,python)
239 ("vulkan-headers" ,vulkan-headers)))
bee7e46a 240 (arguments
f26bceb4 241 `(#:tests? #f ;no tests
97764172 242 #:configure-flags (list (string-append "-DGLSLANG_INSTALL_DIR="
e21bd8df 243 (assoc-ref %build-inputs "glslang")))))
bee7e46a
RH
244 (home-page
245 "https://github.com/KhronosGroup/Vulkan-Tools")
246 (synopsis "Tools and utilities for Vulkan")
247 (description
248 "Vulkan-Tools provides tools and utilities that can assist development by
249enabling developers to verify their applications correct use of the Vulkan
250API.")
251 (license (list license:asl2.0)))) ;LICENSE.txt
252
5b69baf0 253(define-public shaderc
d9eada79
RH
254 (package
255 (name "shaderc")
4c5e45eb 256 (version "2020.0")
d9eada79
RH
257 (source
258 (origin
259 (method git-fetch)
260 (uri (git-reference
261 (url "https://github.com/google/shaderc")
262 (commit (string-append "v" version))))
263 (file-name (git-file-name name version))
264 (sha256
265 (base32
4c5e45eb
MB
266 "1kqqvsvib01bsmfbdy3fbwwpvkcdlfb6k71kjvzb3crql7w0rxff"))))
267 (build-system cmake-build-system)
d9eada79 268 (arguments
18ac4836
MB
269 `(;; FIXME: Skip most of the tests, because enabling system gtest breaks
270 ;; the build: <https://github.com/google/shaderc/issues/470>.
4c5e45eb 271 #:configure-flags '("-DSHADERC_SKIP_TESTS=ON")
d9eada79
RH
272 #:phases
273 (modify-phases %standard-phases
4c5e45eb
MB
274 (add-after 'unpack 'do-not-look-for-bundled-sources
275 (lambda _
276 (substitute* "CMakeLists.txt"
277 (("add_subdirectory\\(third_party\\)")
278 ""))
279
18ac4836
MB
280 (substitute* "glslc/test/CMakeLists.txt"
281 (("\\$<TARGET_FILE:spirv-dis>")
282 (which "spirv-dis")))
283
4c5e45eb
MB
284 ;; Do not attempt to use git to encode version information.
285 (substitute* "glslc/CMakeLists.txt"
286 (("add_dependencies\\(glslc_exe build-version\\)")
287 ""))
288 (call-with-output-file "glslc/src/build-version.inc"
289 (lambda (port)
290 (format port "\"~a\"\n\"~a\"\n\"~a\"~%"
291 ,version
292 ,(package-version spirv-tools)
293 ,(package-version glslang))))
294 #t)))))
d9eada79 295 (inputs
4c5e45eb
MB
296 `(("glslang" ,glslang)
297 ("python" ,python)
298 ("spirv-headers" ,spirv-headers)
299 ("spirv-tools" ,spirv-tools)))
d9eada79 300 (native-inputs
4c5e45eb 301 `(("pkg-config" ,pkg-config)))
d9eada79
RH
302 (home-page "https://github.com/google/shaderc")
303 (synopsis "Tools for shader compilation")
304 (description "Shaderc is a collection of tools, libraries, and tests for
5b69baf0 305shader compilation.")
d9eada79 306 (license license:asl2.0)))
85c7f29a
RH
307
308(define-public vkd3d
006a1d59 309 (let ((commit "ecda316ef54d70bf1b3e860755241bb75873e53f")) ; Release 1.1.
85c7f29a
RH
310 (package
311 (name "vkd3d")
006a1d59 312 (version "1.1")
85c7f29a
RH
313 (source
314 (origin
315 (method git-fetch)
316 (uri (git-reference
317 (url "https://source.winehq.org/git/vkd3d.git")
318 (commit commit)))
319 (sha256
320 (base32
006a1d59 321 "05a28kspy8gzng181w28zjqdb3pj2ss83b0lwnppxbcdzsz7rvrf"))
85c7f29a
RH
322 (file-name (string-append name "-" version "-checkout"))))
323 (build-system gnu-build-system)
324 (arguments
d92f9d34
MB
325 `(#:configure-flags '("--with-spirv-tools")
326 #:phases (modify-phases %standard-phases
327 (add-after 'unpack 'patch-for-new-vulkan
328 (lambda _
329 ;; Mimic upstream commit 8e7bf8a5c3e0047 for
330 ;; compatibility with newer vulkan-headers.
331 (substitute* "libs/vkd3d/vkd3d_private.h"
332 (("VK_PIPELINE_BIND_POINT_RANGE_SIZE")
333 "2u"))
334 #t)))))
85c7f29a
RH
335 (native-inputs
336 `(("autoconf" ,autoconf)
337 ("automake" ,automake)
f2d97d57 338 ("gettext" ,gettext-minimal)
85c7f29a
RH
339 ("libtool" ,libtool)
340 ("pkg-config" ,pkg-config)))
341 (inputs
342 `(("libx11" ,libx11)
343 ("libxcb" ,libxcb)
344 ("spirv-headers" ,spirv-headers)
345 ("spirv-tools" ,spirv-tools)
4786f515 346 ("vulkan-headers" ,vulkan-headers)
85c7f29a 347 ("vulkan-loader" ,vulkan-loader)
dcf6df43 348 ("wine-minimal" ,wine-minimal) ; Needed for 'widl'.
85c7f29a
RH
349 ("xcb-util" ,xcb-util)
350 ("xcb-util-keysyms" ,xcb-util-keysyms)
351 ("xcb-util-wm" ,xcb-util-wm)))
352 (home-page "https://source.winehq.org/git/vkd3d.git/")
353 (synopsis "Direct3D 12 to Vulkan translation library")
354 (description "vkd3d is a library for translating Direct3D 12 to Vulkan.")
355 (license license:lgpl2.1))))