summary refs log tree commit diff
diff options
context:
space:
mode:
authorJohn Kehayias <john.kehayias@protonmail.com>2024-04-16 20:58:06 -0400
committerJohn Kehayias <john.kehayias@protonmail.com>2024-04-16 20:58:06 -0400
commit2d5736cc3e869fadd2592cc13a8d332fac63b144 (patch)
tree3ff2045099afb796eaa294e693ce4708e2021af9
parentdbfb691c5b4bc66682657ebf124815f5b93fcdbd (diff)
parent953253eff32197863d223e5fece42b3c2440df01 (diff)
downloadguix-2d5736cc3e869fadd2592cc13a8d332fac63b144.tar.gz
Merge branch 'mesa-updates'
Key updates:
cairo 1.16.0 -> 1.18.0
libdrm 2.4.117 -> 2.4.120
mesa 23.3.2 -> 24.0.3
sdl2 2.28.5 -> 2.30.1
vulkan packages 1.3.231.1 -> 1.3.280.0
openexr 3.1.3 -> 3.2.4

Change-Id: Iece081158251d1d5836f6b264ba232dc751c9fe2
-rw-r--r--gnu/local.mk3
-rw-r--r--gnu/packages/cpp.scm5
-rw-r--r--gnu/packages/game-development.scm17
-rw-r--r--gnu/packages/gl.scm60
-rw-r--r--gnu/packages/gnome.scm7
-rw-r--r--gnu/packages/graphics.scm27
-rw-r--r--gnu/packages/gtk.scm85
-rw-r--r--gnu/packages/patches/cairo-CVE-2018-19876.patch37
-rw-r--r--gnu/packages/patches/cairo-CVE-2020-35492.patch49
-rw-r--r--gnu/packages/patches/glslang-install-static-libs.patch61
-rw-r--r--gnu/packages/python-xyz.scm19
-rw-r--r--gnu/packages/sdl.scm6
-rw-r--r--gnu/packages/video.scm4
-rw-r--r--gnu/packages/vulkan.scm216
-rw-r--r--gnu/packages/xdisorg.scm4
15 files changed, 259 insertions, 341 deletions
diff --git a/gnu/local.mk b/gnu/local.mk
index 64efee901f..ccff8648be 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1012,8 +1012,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/breezy-fix-gio.patch			\
   %D%/packages/patches/byobu-writable-status.patch		\
   %D%/packages/patches/bubblewrap-fix-locale-in-tests.patch	\
-  %D%/packages/patches/cairo-CVE-2018-19876.patch		\
-  %D%/packages/patches/cairo-CVE-2020-35492.patch		\
   %D%/packages/patches/calibre-no-updates-dialog.patch		\
   %D%/packages/patches/calibre-remove-test-sqlite.patch		\
   %D%/packages/patches/calibre-remove-test-unrar.patch		\
@@ -1369,7 +1367,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/glibc-2.29-git-updates.patch     	\
   %D%/packages/patches/glibc-2.29-supported-locales.patch     	\
   %D%/packages/patches/glibc-supported-locales.patch     	\
-  %D%/packages/patches/glslang-install-static-libs.patch     	\
   %D%/packages/patches/gmobile-make-it-installable.patch	\
   %D%/packages/patches/gmp-arm-asm-nothumb.patch		\
   %D%/packages/patches/gmp-faulty-test.patch			\
diff --git a/gnu/packages/cpp.scm b/gnu/packages/cpp.scm
index b4a0abb525..a2a3eb226e 100644
--- a/gnu/packages/cpp.scm
+++ b/gnu/packages/cpp.scm
@@ -39,6 +39,7 @@
 ;;; Copyright © 2023 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
 ;;; Copyright © 2023 Foundation Devices, Inc. <hello@foundationdevices.com>
 ;;; Copyright © 2023 Paul A. Patience <paul@apatience.com>
+;;; Copyright © 2024 dan <i@dan.games>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1875,7 +1876,7 @@ queues header library based on circular buffer with @code{std::atomic}.")
 (define-public magic-enum
   (package
     (name "magic-enum")
-    (version "0.7.3")
+    (version "0.9.5")
     (home-page "https://github.com/Neargye/magic_enum")
     (source (origin
               (method git-fetch)
@@ -1885,7 +1886,7 @@ queues header library based on circular buffer with @code{std::atomic}.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1x47radgsifgz3vn2561mlvf4cq46ii33cpyqf01znm56iirwq89"))))
+                "14ys5sn2v1mai8bclvi81cp65g6jblqpdsi94639hphca5v8gka3"))))
     (build-system cmake-build-system)
     (synopsis "C++17 header only library for compile time reflection of enums")
     (description "Magic Enum offers static reflection of enums, with
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index bf4adfb46b..8fecd95940 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -2095,7 +2095,7 @@ scripted in a Python-like language.")
 (define-public godot
   (package
     (name "godot")
-    (version "4.1.3")
+    (version "4.2.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2104,7 +2104,7 @@ scripted in a Python-like language.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1mwwzf77ixkalciqakn6q42g9sl2570didfll406sfs42wz534ng"))
+                "0d5y678986lx4a4xjkxs5glh2dckp8wwl3r3mw72inq7gvaa18s3"))
               (modules '((guix build utils)
                          (ice-9 ftw)
                          (srfi srfi-1)))
@@ -2117,19 +2117,28 @@ scripted in a Python-like language.")
                     (let* ((preserved-files
                             '("README.md"
                               "amd-fsr"
+                              "amd-fsr2"
                               "assimp"
                               "astcenc"
                               "basis_universal"
                               ;; Godot needs ca-certificates.crt, but that is
                               ;; not available in build environment
                               "certs"
+                              "clipper2"
                               "cvtt"
                               "linuxbsd_headers"
                               "etc2comp"
                               "etcpak"
                               "fonts"
                               "glad"
+                              ;; TODO: Remove once Godot once again builds
+                              ;; with our glslang package, or with a
+                              ;; workaround.  Currently it looks for a Types.h
+                              ;; which is no longer in the glslang output
+                              ;; after the most recent update.
+                              "glslang"
                               "jpeg-compressor"
+                              "libktx"
                               "libsimplewebm"
                               "meshoptimizer"
                               "minimp3"
@@ -2170,7 +2179,9 @@ scripted in a Python-like language.")
                         "builtin_embree=no"
                         "builtin_enet=no"
                         "builtin_freetype=no"
-                        "builtin_glslang=no"
+                        ;; TODO: Uncomment this option when the todo for
+                        ;; glslang in the snippet is resolved.
+                        ;; "builtin_glslang=no"
                         "builtin_graphite=no"
                         "builtin_harfbuzz=no"
                         "builtin_icu4c=no"
diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm
index 2894497022..2100bb4872 100644
--- a/gnu/packages/gl.scm
+++ b/gnu/packages/gl.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2014, 2015, 2016, 2017 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Nikita <nikita@n0.is>
 ;;; Copyright © 2016, 2017, 2018, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2017-2019, 2021, 2023 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017-2019, 2021, 2023, 2024 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -297,17 +297,17 @@ also known as DXTn or DXTC) for Mesa.")
 (define-public mesa
   (package
     (name "mesa")
-    (version "23.3.2")
+    (version "24.0.4")
     (source
-      (origin
-        (method url-fetch)
-        (uri (list (string-append "https://archive.mesa3d.org/"
-                                  "mesa-" version ".tar.xz")
-                   (string-append "ftp://ftp.freedesktop.org/pub/mesa/"
-                                  "mesa-" version ".tar.xz")))
-        (sha256
-         (base32
-          "1p4swrbmz3kb1805kdj973hf8virgmix4m9qprmcb2bgl4gviz1w"))))
+     (origin
+       (method url-fetch)
+       (uri (list (string-append "https://archive.mesa3d.org/"
+                                 "mesa-" version ".tar.xz")
+                  (string-append "ftp://ftp.freedesktop.org/pub/mesa/"
+                                 "mesa-" version ".tar.xz")))
+       (sha256
+        (base32
+         "1w25lwdrb0ffrx2fjk9izbvpcgf9ypfc7v32zybwvjwql0qbvzlh"))))
     (build-system meson-build-system)
     (propagated-inputs
      ;; The following are in the Requires.private field of gl.pc.
@@ -327,6 +327,7 @@ also known as DXTn or DXTC) for Mesa.")
            libxrandr
            libxvmc
            llvm-for-mesa
+           vulkan-loader
            wayland
            wayland-protocols
            `(,zstd "lib")))
@@ -352,16 +353,11 @@ also known as DXTn or DXTC) for Mesa.")
       #:configure-flags
       #~(list
          #$@(cond
-             ((target-aarch64?)
-              ;; TODO: Fix svga driver for non-Intel architectures.
+             ((or (target-aarch64?) (target-arm32?))
               '("-Dgallium-drivers=etnaviv,freedreno,kmsro,lima,nouveau,\
-panfrost,r300,r600,swrast,tegra,v3d,vc4,virgl,zink"))
-             ((target-arm32?)
-              ;; Freedreno FTBFS when built on a 64-bit machine.
-              '("-Dgallium-drivers=etnaviv,kmsro,lima,nouveau,panfrost,\
-r300,r600,swrast,tegra,v3d,vc4,virgl,zink"))
+panfrost,r300,r600,svga,swrast,tegra,v3d,vc4,virgl,zink"))
              ((or (target-ppc64le?) (target-ppc32?) (target-riscv64?))
-              '("-Dgallium-drivers=nouveau,r300,r600,radeonsi,swrast,virgl,zink"))
+              '("-Dgallium-drivers=nouveau,r300,r600,radeonsi,svga,swrast,virgl,zink"))
              (else
               '("-Dgallium-drivers=crocus,iris,nouveau,r300,r600,radeonsi,\
 svga,swrast,virgl,zink")))
@@ -395,9 +391,9 @@ svga,swrast,virgl,zink")))
          ;; Enable the Vulkan overlay layer on all architectures.
          "-Dvulkan-layers=device-select,overlay"
 
-         ;; Enable the codecs that were built by default as part of the
+         ;; Enable all the codecs that were built by default as part of the
          ;; 21.3.x releases to avoid functionality regressions.
-         "-Dvideo-codecs=vc1dec,h264dec,h264enc,h265dec,h265enc"
+         "-Dvideo-codecs=all"
 
          ;; Enable ZSTD compression for shader cache.
          "-Dzstd=enabled"
@@ -454,24 +450,17 @@ svga,swrast,virgl,zink")))
                   ;; There are some tests which fail specifically on powerpc.
                   `((substitute* '(;; LLVM ERROR: Relocation type not implemented yet!
                                    "src/gallium/drivers/llvmpipe/meson.build"
-                                   ;; This is probably a big-endian test failure.
                                    "src/gallium/targets/osmesa/meson.build")
                       (("if with_tests") "if not with_tests"))
-                    ;; This test times out and receives SIGTERM.
+                    ;; This is probably a big-endian test failure.
                     (substitute* "src/amd/common/meson.build"
-                      (("and not with_platform_windows") "and with_platform_windows"))
-                    (substitute* "src/compiler/nir/meson.build"
-                      ((".*loop_unroll_tests.*") ""))))
+                      (("and not with_platform_windows")
+                       "and with_platform_windows"))))
                  ("i686-linux"
                   ;; This test is known to fail on i686 (see:
                   ;; https://gitlab.freedesktop.org/mesa/mesa/-/issues/4091).
                   `((substitute* "src/util/meson.build"
                       ((".*'tests/u_debug_stack_test.cpp',.*") ""))))
-                 ("aarch64-linux"
-                  ;; The ir3_disasm test segfaults.
-                  ;; The simplest way to skip it is to run a different test instead.
-                  `((substitute* "src/freedreno/ir3/meson.build"
-                      (("disasm\\.c'") "delay.c',\n    link_args: ld_args_build_id"))))
                  ("armhf-linux"
                   ;; Disable some of the llvmpipe tests.
                   `((substitute* "src/gallium/drivers/llvmpipe/meson.build"
@@ -479,7 +468,7 @@ svga,swrast,virgl,zink")))
                  (_
                   '((display "No tests to disable on this architecture.\n"))))))
          (add-before 'configure 'fix-dlopen-libnames
-           (lambda _
+           (lambda* (#:key inputs #:allow-other-keys)
              (let ((out #$output))
                ;; Remain agnostic to .so.X.Y.Z versions while doing
                ;; the substitutions so we're future-safe.
@@ -495,7 +484,12 @@ svga,swrast,virgl,zink")))
                  ;; it's never installed since Mesa removed its
                  ;; egl_gallium support.
                  (("\"gbm_dri\\.so")
-                  (string-append "\"" out "/lib/dri/gbm_dri.so"))))))
+                  (string-append "\"" out "/lib/dri/gbm_dri.so")))
+               (substitute* "src/gallium/drivers/zink/zink_screen.c"
+                 (("util_dl_open\\(VK_LIBNAME\\)")
+                  (format #f "util_dl_open(\"~a\")"
+                          (search-input-file inputs
+                                             "lib/libvulkan.so.1")))))))
          (add-after 'install 'split-outputs
            (lambda _
              (let ((out #$output)
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 4934ade3dd..787cf66f09 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -3746,12 +3746,15 @@ diagrams.")
                            "svg1.1/masking-mask-01-b.svg"
                            ;; This test fails on aarch64:
                            "bugs/777834-empty-text-children.svg"
-
                            ;; These two tests fail due to slightly different
                            ;; text rendering (different kerning or similar),
                            ;; nothing alarming.
                            "bugs/340047.svg"
-                           "bugs/749415.svg"))))))))
+                           "bugs/749415.svg"
+                           ;; These two tests fail with the update to cairo
+                           ;; version 1.18.0.
+                           "bugs/587721-text-transform.svg"
+                           "svg1.1/masking-path-03-b.svg"))))))))
     (native-inputs
      (list pkg-config
            `(,glib "bin") ; glib-mkenums, etc.
diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm
index 85e4eed3b1..3571a45b84 100644
--- a/gnu/packages/graphics.scm
+++ b/gnu/packages/graphics.scm
@@ -28,7 +28,7 @@
 ;;; Copyright © 2021 Ekaitz Zarraga <ekaitz@elenq.tech>
 ;;; Copyright © 2021, 2022 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2022 Michael Rohleder <mike@rohleder.de>
-;;; Copyright © 2022, 2023 John Kehayias <john.kehayias@protonmail.com>
+;;; Copyright © 2022, 2023, 2024 John Kehayias <john.kehayias@protonmail.com>
 ;;; Copyright © 2022 Zheng Junjie <873216071@qq.com>
 ;;; Copyright © 2022 Tobias Kortkamp <tobias.kortkamp@gmail.com>
 ;;; Copyright © 2022 Paul A. Patience <paul@apatience.com>
@@ -143,7 +143,8 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix deprecation)
-  #:use-module (guix utils))
+  #:use-module (guix utils)
+  #:use-module (ice-9 match))
 
 (define-public mmm
   (package
@@ -1192,7 +1193,7 @@ graphics.")
 (define-public openexr
   (package
     (name "openexr")
-    (version "3.1.3")
+    (version "3.2.4")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1202,16 +1203,23 @@ graphics.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0c9vla0kbsbbhkk42jlbf94nzfb1anqh7dy9b0b3nna1qr6v4bh6"))))
+                "00s1a05kggk71vfbnsvykyjc2j7y6yyzgl63sy4yiddshz2k2mcr"))))
     (build-system cmake-build-system)
     (arguments
-     (list #:phases
+     (list #:configure-flags
+           #~(list #$@(match (%current-system)
+                        ;; A test explicitly checks for SSE2 (would fail on
+                        ;; i686-linux), so make sure it is enabled for both C
+                        ;; and CPP.
+                        ((or "x86_64-linux" "i686-linux")
+                         '("-DCMAKE_CXX_FLAGS=-mfpmath=sse -msse2"
+                           "-DCMAKE_C_FLAGS=-mfpmath=sse -msse2"))
+                        (_ '())))
+           #:phases
            #~(modify-phases %standard-phases
                (add-after 'unpack 'patch-test-directory
                  (lambda _
                    (substitute* (list
-                                 "src/test/OpenEXRUtilTest/tmpDir.h"
-                                 "src/test/OpenEXRFuzzTest/tmpDir.h"
                                  "src/test/OpenEXRTest/tmpDir.h"
                                  "src/test/OpenEXRCoreTest/main.cpp")
                      (("/var/tmp")
@@ -1239,7 +1247,10 @@ graphics.")
                                 "")
                                (("TEST \\(testOptimizedInterleavePatterns, \"basic\"\\);")
                                 "")))))))))
-    (inputs (list imath zlib))
+    (inputs (list imath))
+    (propagated-inputs
+     ;; Marked as Requires.private in OpenEXR.pc.
+     (list libdeflate))
     (home-page "https://www.openexr.com/")
     (synopsis "High-dynamic-range file format library")
     (description
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index da56834df6..b0098e780e 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -36,6 +36,7 @@
 ;;; Copyright © 2023 Sergiu Ivanov <sivanov@colimite.fr>
 ;;; Copyright © 2023 Zheng Junjie <873216071@qq.com>
 ;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2024 John Kehayias <john.kehayias@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -121,7 +122,11 @@
   #:use-module (gnu packages pulseaudio)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
-  #:use-module (ice-9 match))
+  #:use-module (ice-9 match)
+  ;; Export cairo to break a dependency cycle, as gtk-doc is needed to build
+  ;; the documentation.  Use cairo for other packages and
+  ;; cairo-with-documentation as the public package.
+  #:export (cairo))
 
 (define-public appmenu-gtk-module
   (package
@@ -160,10 +165,10 @@ such as mate-panel and xfce4-panel.")
     (home-page "https://gitlab.com/vala-panel-project/vala-panel-appmenu")
     (license (list license:lgpl3))))
 
-(define-public cairo
+(define cairo
   (package
     (name "cairo")
-    (version "1.16.0")
+    (version "1.18.0")
     (source
      (origin
        (method url-fetch)
@@ -171,30 +176,13 @@ such as mate-panel and xfce4-panel.")
         (string-append "https://cairographics.org/releases/cairo-"
                        version ".tar.xz"))
        (sha256
-        (base32 "0c930mk5xr2bshbdljv005j3j8zr47gqmkry3q6qgvqky6rjjysy"))
-       (patches (search-patches
-		 "cairo-CVE-2018-19876.patch"
-		 "cairo-CVE-2020-35492.patch"))))
-    (build-system glib-or-gtk-build-system)
-    (outputs '("out" "doc"))
+        (base32 "0r0by563s75xyzz0d0j1nmjqmdrk2x9agk7r57p3v8vqp4v0ffi4"))))
+    (build-system meson-build-system)
     (arguments
      `(#:tests? #f ; see http://lists.gnu.org/archive/html/bug-guix/2013-06/msg00085.html
+       #:glib-or-gtk? #t
        #:configure-flags
-       (list
-        "--disable-static"
-        ;; XXX: To be enabled.
-        ;; "--enable-gallium=yes"
-        ;; "--enable-gl=yes"
-        ;; " --enable-glesv2=yes"
-        ;; "--enable-glesv3=yes"
-        ;; "--enable-cogl=yes"
-        ;; "--enable-directfb=yes"
-        ;; "--enable-vg=yes"
-        "--enable-tee=yes"              ;needed for GNU IceCat
-        "--enable-xml=yes"              ;for cairo-xml support
-        (string-append "--with-html-dir="
-                       (assoc-ref %outputs "doc")
-                       "/share/gtk-doc/html"))))
+       (list "-Dtests=disabled")))
     (native-inputs
      `(,@(if (target-hurd?)
              '()
@@ -212,15 +200,10 @@ such as mate-panel and xfce4-panel.")
              '()
              `(("poppler" ,poppler)))))
     (propagated-inputs
-     `( ;; ("cogl" ,cogl)
-       ;; ("directfb" ,directfb)
-       ("fontconfig" ,fontconfig)
+     `(("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
        ("glib" ,glib)
-       ;; ("gtk+" ,gtk+)
        ("libpng" ,libpng)
-       ;; ("librsvg" ,librsvg)
-       ;; ("opengl" ,mesa)
        ("pixman" ,pixman)
        ("x11" ,libx11)
        ("xcb" ,libxcb)
@@ -236,24 +219,50 @@ output.  Experimental backends include OpenGL, BeOS, OS/2, and DirectFB.")
      ;; This project is dual-licensed.
      (list
       license:lgpl2.1+
-      license:mpl1.1))))
+      license:mpl1.1))
+    ;; Hide and have cairo-with-documentation public.
+    (properties '((hidden? . #t)))))
+
+(define-public cairo-with-documentation
+  ;; cairo's docs must be built in a separate package since it requires
+  ;; gtk-doc, which in turn depends on cairo.
+  (package/inherit cairo
+    (properties (alist-delete 'hidden? (package-properties cairo)))
+    (outputs (cons "doc" (package-outputs cairo)))
+    (native-inputs
+     (modify-inputs (package-native-inputs cairo)
+       (prepend gtk-doc)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments cairo)
+       ((#:configure-flags flags ''())
+        #~(cons "-Dgtk_doc=true" #$flags))
+       ((#:phases phases '%standard-phases)
+        #~(modify-phases #$phases
+            (add-after 'install 'move-doc
+              (lambda* (#:key outputs #:allow-other-keys)
+                (mkdir-p (string-append #$output:doc "/share"))
+                (rename-file
+                 (string-append #$output "/share/gtk-doc")
+                 (string-append #$output:doc "/share/gtk-doc"))
+                ;; This directory is now empty so remove it.
+                (rmdir (string-append #$output "/share"))))))))))
 
 (define-public cairo-sans-poppler
   ;; Variant used to break the dependency cycle between Poppler and Cairo.
   (package/inherit cairo
-    (inputs (alist-delete "poppler" (package-inputs cairo)))
-    (properties `((hidden? . #t)))))
+    (inputs (alist-delete "poppler" (package-inputs cairo)))))
 
 (define-public cairo-xcb
   (package/inherit cairo
+    (properties (alist-delete 'hidden? (package-properties cairo)))
     (name "cairo-xcb")
     (inputs
      `(("mesa" ,mesa)
        ,@(package-inputs cairo)))
     (arguments
-     `(#:tests? #f
-       #:configure-flags
-       '("--enable-xlib-xcb" "--enable-gl" "--enable-egl")))
+     (substitute-keyword-arguments (package-arguments cairo)
+       ((#:configure-flags flags ''())
+        #~(cons "-Dxlib-xcb=enabled" #$flags))))
     (synopsis "2D graphics library (with X11 support)")))
 
 (define-public harfbuzz
@@ -1959,7 +1968,7 @@ printing and other features typical of a source code editor.")
 (define-public python-pycairo
   (package
     (name "python-pycairo")
-    (version "1.21.0")
+    (version "1.26.0")
     (source
      (origin
       (method url-fetch)
@@ -1967,7 +1976,7 @@ printing and other features typical of a source code editor.")
                           version "/pycairo-" version ".tar.gz"))
       (sha256
        (base32
-        "0jxpyibpjadw8ah1mqbhvryr795myiznb1ikm8wgjbamibqhf695"))))
+        "1sybz43sj4ynjahlkidrcdpdrq8yi1avkndc2hgb5pgvfjld1p9d"))))
     (build-system python-build-system)
     (native-inputs
      (list pkg-config python-pytest))
diff --git a/gnu/packages/patches/cairo-CVE-2018-19876.patch b/gnu/packages/patches/cairo-CVE-2018-19876.patch
deleted file mode 100644
index c0fba2ecaa..0000000000
--- a/gnu/packages/patches/cairo-CVE-2018-19876.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-Copied from Debian.
-
-From: Carlos Garcia Campos <cgarcia@igalia.com>
-Date: Mon, 19 Nov 2018 12:33:07 +0100
-Subject: ft: Use FT_Done_MM_Var instead of free when available in
- cairo_ft_apply_variations
-
-Fixes a crash when using freetype >= 2.9
-
-[This is considered to be security-sensitive because WebKitGTK+ sets its
-own memory allocator, which is not compatible with system free(), making
-this a remotely triggerable denial of service or memory corruption.]
-
-Origin: upstream, commit:90e85c2493fdfa3551f202ff10282463f1e36645
-Bug: https://gitlab.freedesktop.org/cairo/cairo/merge_requests/5
-Bug-Debian: https://bugs.debian.org/916389
-Bug-CVE: CVE-2018-19876
----
- src/cairo-ft-font.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/src/cairo-ft-font.c b/src/cairo-ft-font.c
-index 325dd61..981973f 100644
---- a/src/cairo-ft-font.c
-+++ b/src/cairo-ft-font.c
-@@ -2393,7 +2393,11 @@ skip:
- done:
-         free (coords);
-         free (current_coords);
-+#if HAVE_FT_DONE_MM_VAR
-+        FT_Done_MM_Var (face->glyph->library, ft_mm_var);
-+#else
-         free (ft_mm_var);
-+#endif
-     }
- }
- 
diff --git a/gnu/packages/patches/cairo-CVE-2020-35492.patch b/gnu/packages/patches/cairo-CVE-2020-35492.patch
deleted file mode 100644
index e8b90fa5c5..0000000000
--- a/gnu/packages/patches/cairo-CVE-2020-35492.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-Copied from Debian.
-
-From 03a820b173ed1fdef6ff14b4468f5dbc02ff59be Mon Sep 17 00:00:00 2001
-From: Heiko Lewin <heiko.lewin@worldiety.de>
-Date: Tue, 15 Dec 2020 16:48:19 +0100
-Subject: [PATCH] Fix mask usage in image-compositor
-
-[trimmed test case, since not used in Debian build]
-
----
- src/cairo-image-compositor.c                |   8 ++--
-
---- cairo-1.16.0.orig/src/cairo-image-compositor.c
-+++ cairo-1.16.0/src/cairo-image-compositor.c
-@@ -2601,14 +2601,14 @@ _inplace_src_spans (void *abstract_rende
- 		    unsigned num_spans)
- {
-     cairo_image_span_renderer_t *r = abstract_renderer;
--    uint8_t *m;
-+    uint8_t *m, *base = (uint8_t*)pixman_image_get_data(r->mask);
-     int x0;
- 
-     if (num_spans == 0)
- 	return CAIRO_STATUS_SUCCESS;
- 
-     x0 = spans[0].x;
--    m = r->_buf;
-+    m = base;
-     do {
- 	int len = spans[1].x - spans[0].x;
- 	if (len >= r->u.composite.run_length && spans[0].coverage == 0xff) {
-@@ -2646,7 +2646,7 @@ _inplace_src_spans (void *abstract_rende
- 				      spans[0].x, y,
- 				      spans[1].x - spans[0].x, h);
- 
--	    m = r->_buf;
-+	    m = base;
- 	    x0 = spans[1].x;
- 	} else if (spans[0].coverage == 0x0) {
- 	    if (spans[0].x != x0) {
-@@ -2675,7 +2675,7 @@ _inplace_src_spans (void *abstract_rende
- #endif
- 	    }
- 
--	    m = r->_buf;
-+	    m = base;
- 	    x0 = spans[1].x;
- 	} else {
- 	    *m++ = spans[0].coverage;
diff --git a/gnu/packages/patches/glslang-install-static-libs.patch b/gnu/packages/patches/glslang-install-static-libs.patch
deleted file mode 100644
index a155dde30e..0000000000
--- a/gnu/packages/patches/glslang-install-static-libs.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-Install OGLCompiler et.al. even when building shared libraries.  Also fix
-CMake file locations.
-
-Patch taken from Gentoo:
-
-  https://gitweb.gentoo.org/repo/gentoo.git/tree/dev-util/glslang/files/glslang-1.3.231-Install-static-libs.patch
-
-diff --git a/OGLCompilersDLL/CMakeLists.txt b/OGLCompilersDLL/CMakeLists.txt
---- a/OGLCompilersDLL/CMakeLists.txt
-+++ b/OGLCompilersDLL/CMakeLists.txt
-@@ -41,7 +41,7 @@ if(WIN32)
-     source_group("Source" FILES ${SOURCES})
- endif(WIN32)
- 
--if(ENABLE_GLSLANG_INSTALL AND NOT BUILD_SHARED_LIBS)
-+if(ENABLE_GLSLANG_INSTALL)
-     install(TARGETS OGLCompiler EXPORT glslang-targets)
- 
-     # Backward compatibility
-@@ -49,7 +49,7 @@ if(ENABLE_GLSLANG_INSTALL AND NOT BUILD_SHARED_LIBS)
-         message(WARNING \"Using `OGLCompilerTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\")
- 
-         if (NOT TARGET glslang::OGLCompiler)
--            include(\"\${CMAKE_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}/glslang-targets.cmake\")
-+            include(\"\${CMAKE_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
-         endif()
- 
-         add_library(OGLCompiler ALIAS glslang::OGLCompiler)
-diff --git a/glslang/CMakeLists.txt b/glslang/CMakeLists.txt
---- a/glslang/CMakeLists.txt
-+++ b/glslang/CMakeLists.txt
-@@ -203,7 +203,7 @@ endif()
- ################################################################################
- if(ENABLE_GLSLANG_INSTALL)
-     install(TARGETS glslang EXPORT glslang-targets)
--    if(NOT BUILD_SHARED_LIBS)
-+    if(BUILD_SHARED_LIBS)
-         install(TARGETS MachineIndependent EXPORT glslang-targets)
-         install(TARGETS GenericCodeGen EXPORT glslang-targets)
- 
-diff --git a/glslang/OSDependent/Unix/CMakeLists.txt b/glslang/OSDependent/Unix/CMakeLists.txt
---- a/glslang/OSDependent/Unix/CMakeLists.txt
-+++ b/glslang/OSDependent/Unix/CMakeLists.txt
-@@ -52,7 +52,7 @@ else()
-     target_link_libraries(OSDependent Threads::Threads)
- endif()
- 
--if(ENABLE_GLSLANG_INSTALL AND NOT BUILD_SHARED_LIBS)
-+if(ENABLE_GLSLANG_INSTALL)
-     install(TARGETS OSDependent EXPORT glslang-targets)
- 
-     # Backward compatibility
-@@ -60,7 +60,7 @@ if(ENABLE_GLSLANG_INSTALL AND NOT BUILD_SHARED_LIBS)
-         message(WARNING \"Using `OSDependentTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\")
- 
-         if (NOT TARGET glslang::OSDependent)
--            include(\"\${CMAKE_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}/glslang-targets.cmake\")
-+            include(\"\${CMAKE_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
-         endif()
- 
-         add_library(OSDependent ALIAS glslang::OSDependent)
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 44c709a880..bac90b1e07 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -10738,7 +10738,7 @@ support for Python 3 and PyPy.  It is based on cffi.")
 (define-public python-cairocffi
   (package
     (name "python-cairocffi")
-    (version "1.3.0")
+    (version "1.6.1")
     (source
      (origin
        ;; The PyPI archive does not include the documentation, so use Git.
@@ -10749,13 +10749,15 @@ support for Python 3 and PyPy.  It is based on cffi.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0lylyxyyd8csjhn5kxwzrcr6ick6pvvm1wclpmb5ni28jznxn7lb"))))
-    (build-system python-build-system)
+         "161z2bsp0ai4311mz9n0h6vmz80690jbijxx2gqkknygwm2ynjgd"))))
+    (build-system pyproject-build-system)
     (outputs '("out" "doc"))
     (inputs
      (list glib gtk+ gdk-pixbuf cairo))
     (native-inputs
-     (list python-numpy
+     (list python-flit-core
+           python-numpy
+           python-pikepdf
            python-pytest
            python-pytest-cov
            python-pytest-runner
@@ -10785,15 +10787,6 @@ support for Python 3 and PyPy.  It is based on cffi.")
                 (search-input-file inputs "/lib/libglib-2.0.so.0"))
                (("libgdk-3.so.0")
                 (search-input-file inputs "/lib/libgdk-3.so.0")))))
-         (add-after 'unpack 'disable-linters
-           ;; Their check fails; none of our business.
-           (lambda _
-             (substitute* "setup.cfg"
-               ((".*pytest-flake8.*") "")
-               ((".*pytest-isort.*") "")
-               (("--flake8") "")
-               (("--isort") ""))
-             #t))
          (add-after 'install 'install-doc
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
diff --git a/gnu/packages/sdl.scm b/gnu/packages/sdl.scm
index 3a4aafcaa7..d3a0e33b19 100644
--- a/gnu/packages/sdl.scm
+++ b/gnu/packages/sdl.scm
@@ -15,7 +15,7 @@
 ;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2023 Evgeny Pisemsky <evgeny@pisemsky.com>
-;;; Copyright © 2023 dan <i@dan.games>
+;;; Copyright © 2023, 2024 dan <i@dan.games>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -118,7 +118,7 @@ joystick, and graphics hardware.")
   (package
     (inherit sdl)
     (name "sdl2")
-    (version "2.28.5")
+    (version "2.30.1")
     (source (origin
               (method url-fetch)
               (uri
@@ -126,7 +126,7 @@ joystick, and graphics hardware.")
                               version ".tar.gz"))
               (sha256
                (base32
-                "1r36cspzv6h8abiqbbkrgm17g975p9wiziir2xabj3721dyv6b1k"))))
+                "0fj7gxc7rlzzrafnx9nmf7ws3paxy583fmx7bcbavi6gr3xmy881"))))
     (arguments
      (substitute-keyword-arguments (package-arguments sdl)
        ((#:configure-flags flags)
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index c59d0256b9..00072055d3 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -4187,7 +4187,7 @@ Wayland compositors.")
 (define-public obs-vkcapture
   (package
     (name "obs-vkcapture")
-    (version "1.3.0")
+    (version "1.5.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -4196,7 +4196,7 @@ Wayland compositors.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "18v15bfzm31qkpwipvbqgzak4z6f2hhq6mnz2bvhwnv57whirln6"))))
+                "00a69rg1inkssccqmwp1j85vrw17j2k6d5pidvzfdq94vvad10w5"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f)) ;no tests
diff --git a/gnu/packages/vulkan.scm b/gnu/packages/vulkan.scm
index 285d6be7f5..23d0c72ee3 100644
--- a/gnu/packages/vulkan.scm
+++ b/gnu/packages/vulkan.scm
@@ -1,11 +1,11 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2018, 2023 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018, 2023, 2024 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020, 2023 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2021 Mathieu Othacehe <othacehe@gnu.org>
 ;;; Copyright © 2022 Kaelyn Takata <kaelyn.alexi@protonmail.com>
-;;; Copyright © 2022 dan <i@dan.games>
+;;; Copyright © 2022, 2024 dan <i@dan.games>
 ;;; Copyright © 2023 Zheng Junjie <873216071@qq.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -37,6 +37,7 @@
   #:use-module (gnu packages bison)
   #:use-module (gnu packages check)
   #:use-module (gnu packages cmake)
+  #:use-module (gnu packages cpp)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gl)
@@ -46,22 +47,19 @@
   #:use-module (gnu packages wine)
   #:use-module (gnu packages xorg))
 
-;; Note: Remember to change vulkan-loader version when bumping this.
-(define %vulkan-sdk-version "sdk-1.3.231.1")
-
 (define-public spirv-headers
   (package
     (name "spirv-headers")
-    (version %vulkan-sdk-version)
+    (version "1.3.280.0")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/KhronosGroup/SPIRV-Headers")
-             (commit version)))
+             (commit (string-append "vulkan-sdk-" version))))
        (sha256
         (base32
-         "0z8b485hryya2g0jxv7amwg3fjj7pchbgnsa5ldf5fwgh5js0icm"))
+         "17jw5gwj2vmicyd6522b1zp7x551krfj826j0fg5kl0ixv0q08wk"))
        (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (arguments
@@ -84,15 +82,15 @@ and for the GLSL.std.450 extended instruction set.
 (define-public spirv-tools
   (package
     (name "spirv-tools")
-    (version %vulkan-sdk-version)
+    (version "1.3.280.0")
     (source
      (origin
       (method git-fetch)
       (uri (git-reference
             (url "https://github.com/KhronosGroup/SPIRV-Tools")
-            (commit version)))
+            (commit (string-append "vulkan-sdk-" version))))
       (sha256
-       (base32 "03d489ind2az7w7q1slj3mdc04372r3qqbnd7m9akxbg7yix1a5j"))
+       (base32 "1sj84ngwcgmydlj88nx1a9jfmhmxlij7wc92khp8wf1vsfplayas"))
       (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (arguments
@@ -116,15 +114,15 @@ parser,disassembler, validator, and optimizer for SPIR-V.")
 (define-public spirv-cross
   (package
     (name "spirv-cross")
-    (version %vulkan-sdk-version)
+    (version "1.3.280.0")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/KhronosGroup/SPIRV-Cross")
-             (commit version)))
+             (commit (string-append "vulkan-sdk-" version))))
        (sha256
-        (base32 "1ypbc1krkr0yywa1m976g3sjyb80l7hxwrnh6gp70w6va1dlnnn9"))
+        (base32 "1k6fbkradknxis85akzzksz9ipm3v42xvrzaamwj2lrgfm8d6r4d"))
        (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (arguments
@@ -189,22 +187,43 @@ translation between LLVM IR and SPIR-V.")
 (define-public glslang
   (package
     (name "glslang")
-    (version %vulkan-sdk-version)
+    (version "1.3.280.0")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/KhronosGroup/glslang")
-             (commit version)))
-       (patches (search-patches "glslang-install-static-libs.patch"))
+             (commit (string-append "vulkan-sdk-" version))))
        (sha256
         (base32
-         "12a1zl8qxa28nbf6m67260c0lwdw3bqbj0jz1382wgm5px1fpqw6"))
+         "1vvgqvwhsimlz8wkk38b9cvp9abggq840iws8al0znzz3mnvkfdn"))
        (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (arguments
-     '(#:tests? #f                      ;FIXME: requires bundled SPIRV-Tools
-       #:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
+     `(#:configure-flags '("-DBUILD_SHARED_LIBS=ON"
+                           "-DALLOW_EXTERNAL_SPIRV_TOOLS=ON"
+                           ,@(if (target-riscv64?)
+                                 `("-DCMAKE_EXE_LINKER_FLAGS=-latomic")
+                                 '()))
+       #:phases (modify-phases %standard-phases
+                  ,@(if (target-ppc32?)
+                        `((add-after 'unpack 'skip-failing-test
+                            (lambda _
+                              ;; TODO: Figure out why this test fails.
+                              (substitute* "Test/runtests"
+                                ((".*remap\\.invalid" all)
+                                 (string-append "# " all))))))
+                        '())
+                  (replace 'check
+                    (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
+                      (when tests?
+                        (invoke "ctest"
+                                "-j" (if parallel-tests?
+                                       (number->string (parallel-job-count))
+                                       "1")
+                                "--rerun-failed"
+                                "--output-on-failure")))))))
+    (inputs (list spirv-tools))
     (native-inputs
      (list pkg-config python))
     (home-page "https://github.com/KhronosGroup/glslang")
@@ -222,17 +241,17 @@ interpretation of the specifications for these languages.")
 (define-public vulkan-headers
   (package
     (name "vulkan-headers")
-    (version %vulkan-sdk-version)
+    (version "1.3.280.0")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/KhronosGroup/Vulkan-Headers")
-             (commit version)))
+             (commit (string-append "vulkan-sdk-" version))))
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "167zdank6pn66mzjdwgrdlmhmsy4v2k0nhw0nwg649k863rgi00j"))))
+         "13mmv5621z73hlfnsrccbcb4z0d7kwj92a081701vbpss45a4whj"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f))                    ; No tests.
@@ -246,19 +265,17 @@ interpretation of the specifications for these languages.")
 (define-public vulkan-loader
   (package
     (name "vulkan-loader")
-    ;; XXX: Take a slightly newer commit to fix a test failure on i686:
-    ;; https://github.com/KhronosGroup/Vulkan-Loader/pull/1036
-    (version "sdk-1.3.232")
+    (version "1.3.280.0")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/KhronosGroup/Vulkan-Loader")
-             (commit "v1.3.232")))
+             (commit (string-append "vulkan-sdk-" version))))
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0w69sh669sx9pwlvv2rv92ds2hm2rbzsa6qqcmd8kcad0qfq7dz2"))))
+         "0glix3clqkdbi9kqcp8abmglqpgjd2r2bjqvi11r8sair0z54hnf"))))
     (build-system cmake-build-system)
     (arguments
      (list
@@ -286,11 +303,10 @@ interpretation of the specifications for these languages.")
                     (string-append "includedir=" vulkan-headers "\n"))))))
            (add-after 'unpack 'use-system-googletest
              (lambda _
-               ;; Inform the build system that googletest is already built.
-               (substitute* "CMakeLists.txt"
-                 ((".*if\\(TARGET gtest\\)")
-                  (string-append "    find_package(GTest REQUIRED)\n"
-                                 "    if(true)")))
+               (substitute* "tests/CMakeLists.txt"
+                 (((string-append "message\\(FATAL_ERROR \"Could not "
+                                  "find googletest directory. See BUILD.md\"\\)"))
+                  "find_package(GTest REQUIRED)"))
                ;; Use the namespaced variable.
                (substitute* "tests/framework/CMakeLists.txt"
                  (("PUBLIC gtest ")
@@ -303,6 +319,10 @@ interpretation of the specifications for these languages.")
            wayland))
     (inputs
      (list vulkan-headers libxrandr))
+    (native-search-paths
+     (list (search-path-specification
+            (variable "XDG_DATA_DIRS")
+            (files '("share")))))
     (home-page
      "https://github.com/KhronosGroup/Vulkan-Loader")
     (synopsis "Khronos official ICD loader and validation layers for Vulkan")
@@ -321,26 +341,34 @@ and the ICD.")
 (define-public vulkan-tools
   (package
     (name "vulkan-tools")
-    (version %vulkan-sdk-version)
+    (version "1.3.280.0")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/KhronosGroup/Vulkan-Tools")
-             (commit version)))
+             (commit (string-append "vulkan-sdk-" version))))
        (file-name (git-file-name name version))
+       (modules '((guix build utils)))
+       (snippet #~(substitute* "tests/icd/mock_icd_tests.cpp"
+                    ;; Disable driver info test since it relies on git branch info
+                    (("ASSERT_EQ\\(std::string\\(driver_properties\\.driverInfo\\)")
+                     "// ASSERT_EQ(std::string(driver_properties.driverInfo)")))
        (sha256
         (base32
-         "0jzwjfx4c7y15wkwfhhc64rzljpi47bxrm5jw5blfsqjh8zsd27a"))))
+         "0w0m04vscr4a6vr682g3mn7mfni740cmai9ylzlgfdggb77y58xz"))))
     (build-system cmake-build-system)
     (inputs
      (list glslang libxrandr vulkan-loader wayland wayland-protocols))
     (native-inputs
-     (list pkg-config python vulkan-headers))
+     (list googletest pkg-config python volk vulkan-headers))
     (arguments
-     `(#:tests? #f                      ;no tests
-       #:configure-flags (list (string-append "-DGLSLANG_INSTALL_DIR="
-                               (assoc-ref %build-inputs "glslang")))))
+     `(#:configure-flags (list "-DBUILD_TESTS=ON")
+       #:phases (modify-phases %standard-phases
+                  (replace 'check
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      (when tests?
+                        (invoke "./tests/vulkan_tools_tests")))))))
     (home-page
      "https://github.com/KhronosGroup/Vulkan-Tools")
     (synopsis "Tools and utilities for Vulkan")
@@ -354,7 +382,7 @@ API.")
   (package
     (name "shaderc")
     ;; shaderc doesn't follow the versioning scheme of vulkan sdk
-    (version "2022.3")
+    (version "2024.0")
     (source
      (origin
        (method git-fetch)
@@ -364,13 +392,18 @@ API.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0sdbfi66zmqj0c5q5yv2zvcvry7557yzgxk2mwflyjgqh7kdhb8d"))))
+         "1m5jncn6y8c6g83f8nwh86hz33mvv03x7fyr5zq0ynwanrcpn2hb"))))
     (build-system cmake-build-system)
     (arguments
      `(;; FIXME: Skip most of the tests, because enabling system gtest breaks
        ;; the build: <https://github.com/google/shaderc/issues/470>.
        #:configure-flags
        (list "-DSHADERC_SKIP_TESTS=ON"
+             ;; The two flags are copied from:
+             ;; https://sdk.lunarg.com/sdk/download/1.3.280.0/linux/config.json
+             "-DSHADERC_ENABLE_SHARED_CRT=ON"
+             "-DSHADERC_SKIP_COPYRIGHT_CHECK=ON"
+             "-DPYTHON_EXECUTABLE=python3"
              ;; Note: despite the name, this just specifies the headers.
              (string-append "-Dglslang_SOURCE_DIR="
                             (assoc-ref %build-inputs "glslang") "/include/glslang"))
@@ -396,20 +429,11 @@ API.")
                          ,version
                          ,(package-version spirv-tools)
                          ,(package-version glslang))))
-             #t))
-         ;; see: https://github.com/google/shaderc/pull/1276
-         (add-after 'do-not-look-for-bundled-sources 'drop-additional-glslang-deps
-           (lambda _
-             (substitute* "glslc/CMakeLists.txt"
-               (("OSDependent OGLCompiler") ""))
-             (substitute* "libshaderc/CMakeLists.txt"
-               (("OSDependent OGLCompiler") ""))
-             (substitute* "libshaderc_util/CMakeLists.txt"
-               (("OSDependent OGLCompiler") "")))))))
+             #t)))))
     (inputs
-     (list glslang python spirv-headers spirv-tools))
+     (list glslang spirv-headers spirv-tools))
     (native-inputs
-     (list pkg-config))
+     (list pkg-config python))
     (home-page "https://github.com/google/shaderc")
     (synopsis "Tools for shader compilation")
     (description "Shaderc is a collection of tools, libraries, and tests for
@@ -468,51 +492,37 @@ shader compilation.")
 (define-public vulkan-validationlayers
   (package
     (name "vulkan-validationlayers")
-    (version %vulkan-sdk-version)
+    (version "1.3.280.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
                     (url
                      "https://github.com/KhronosGroup/Vulkan-ValidationLayers")
-                    (commit version)))
+                    (commit (string-append "vulkan-sdk-" version))))
               (file-name (git-file-name name version))
+              (modules '((guix build utils)))
+              ;; We don't build static libraries in SPIRV-Tools.
+              (snippet '(substitute* "tests/CMakeLists.txt"
+                          (("-static")
+                           "")))
               (sha256
                (base32
-                "07djrk6yym4vl2b52wr09r8y649v5lark5hnr5rwvlxwxdmd9g75"))))
+                "1w6fsaicrgnzkj5vz2v86a2gk1n7478q6n66ac2920avnin9a64c"))))
     (build-system cmake-build-system)
     (inputs (list glslang
                   libxrandr
                   mesa
+                  robin-hood-hashing
                   shaderc
                   spirv-tools
                   vulkan-loader
+                  vulkan-utility-libraries
                   wayland))
-    (native-inputs (list pkg-config python spirv-headers vulkan-headers))
+    (native-inputs (list googletest pkg-config python spirv-headers vulkan-headers))
     (arguments
-     (list #:tests? #f ;no tests
+     (list #:tests? #f ; tests crash on some hardware (various upstream issues)
            #:configure-flags
-           #~(list "-DUSE_ROBIN_HOOD_HASHING=OFF"
-                   (string-append "-DGLSLANG_INSTALL_DIR="
-                                  (dirname (dirname
-                                            (search-input-directory
-                                             %build-inputs
-                                             "include/glslang"))))
-                   (string-append "-DSPIRV_HEADERS_INSTALL_DIR="
-                                  (dirname (dirname
-                                            (search-input-directory
-                                             %build-inputs
-                                             "include/spirv"))))
-                   (string-append "-DSPIRV_TOOLS_INSTALL_DIR="
-                                  (dirname (dirname
-                                            (search-input-directory
-                                             %build-inputs
-                                             "include/spirv-tools"))))
-                   (string-append "-DVULKAN_HEADERS_INSTALL_DIR="
-                                  (dirname (dirname
-                                            (search-input-directory
-                                             %build-inputs
-                                             "include/vulkan"))))
-                   "-Wno-dev")
+           #~(list "-DBUILD_TESTS=ON")
            #:phases #~(modify-phases %standard-phases
                         (add-after 'install 'set-layer-path-in-manifest
                           (lambda _
@@ -522,7 +532,19 @@ shader compilation.")
                               (substitute* manifest
                                 (("\"libVkLayer_khronos_validation.so\"")
                                  (string-append "\"" #$output
-                                  "/lib/libVkLayer_khronos_validation.so\"")))))))))
+                                                "/lib/libVkLayer_khronos_validation.so\""))))))
+                        (replace 'check
+                          (lambda* (#:key tests? #:allow-other-keys)
+                            (when tests?
+                              (setenv "VK_LAYER_PATH"
+                                      (string-append (getcwd) "/layers"))
+                              (setenv "LD_LIBRARY_PATH"
+                                      (string-append #$(this-package-input
+                                                        "vulkan-loader") "/lib"))
+                              (setenv "MESA_SHADER_CACHE_DIR"
+                                      (string-append (getcwd) "/shader-cache"))
+                              (setenv "XDG_RUNTIME_DIR" (getcwd))
+                              (invoke "./tests/vk_layer_validation_tests")))))))
     (home-page "https://github.com/KhronosGroup/Vulkan-ValidationLayers")
     (synopsis "Khronos official validation layers for Vulkan")
     (description
@@ -534,16 +556,16 @@ use the Vulkan API.")
 (define-public volk
   (package
     (name "volk")
-    (version %vulkan-sdk-version)
+    (version "1.3.280.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
                     (url "https://github.com/zeux/volk")
-                    (commit version)))
+                    (commit (string-append "vulkan-sdk-" version))))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0xaw3kg754mknx8lfj1p74a9npjfvdvlpicvn0hla4495zpc10rq"))))
+                "0x4jhc8n9c4k8svmmcaxxs613xbsav7wam94gacddlm738cwp13v"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f                      ;no test
@@ -588,3 +610,27 @@ storage.")
     (home-page
      "https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator")
     (license license:expat)))
+
+(define-public vulkan-utility-libraries
+  (package
+    (name "vulkan-utility-libraries")
+    (version "1.3.280.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/KhronosGroup/Vulkan-Utility-Libraries")
+             (commit (string-append "vulkan-sdk-" version))))
+       (sha256
+        (base32 "17fmalilczs4x435f8kdx8bf0x5mnjhkmcp34xap8lanpbyzs84q"))
+       (file-name (git-file-name name version))))
+    (build-system cmake-build-system)
+    (arguments
+     (list
+      #:configure-flags #~(list "-DBUILD_TESTS=ON")))
+    (inputs (list vulkan-headers))
+    (native-inputs (list googletest magic-enum))
+    (home-page "https://github.com/KhronosGroup/Vulkan-Utility-Libraries")
+    (synopsis "Utility libraries for Vulkan developers")
+    (description "Utility libraries for Vulkan developers.")
+    (license license:asl2.0)))
diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm
index 7950de0d9b..30ca9140d0 100644
--- a/gnu/packages/xdisorg.scm
+++ b/gnu/packages/xdisorg.scm
@@ -735,7 +735,7 @@ rasterisation.")
 (define-public libdrm
   (package
     (name "libdrm")
-    (version "2.4.117")
+    (version "2.4.120")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -743,7 +743,7 @@ rasterisation.")
                     version ".tar.xz"))
               (sha256
                (base32
-                "0ar4c4ikcbm1s4sg09ld406izq5s1yk7b2n0mmvql77bwdlqv252"))))
+                "0yijzgg6rdsa68bz03sw0lcfa2nclv9m3as1cja50wkcyxim7x9v"))))
     (build-system meson-build-system)
     (arguments
      (list #:configure-flags