Subject: [bug#69461] [mesa-updates 13/13] gnu: Add directx-shader-compiler.

From: dan <[email-masked]>
Date: Thu, 29 Feb 2024 01:31:46 +0800

* gnu/packages/vulkan.scm (directx-headers-for-dxc): New variable.
* gnu/packages/vulkan.scm (directx-shader-compiler): New variable.

Change-Id: I6e81f59ebd7122c007cce2df820359c055df5fd9
---
 gnu/packages/vulkan.scm | 72 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 72 insertions(+)

diff --git a/gnu/packages/vulkan.scm b/gnu/packages/vulkan.scm
index 599b0a47d3..2597f6d701 100644
--- a/gnu/packages/vulkan.scm
+++ b/gnu/packages/vulkan.scm
@@ -44,7 +44,9 @@ (define-module (gnu packages vulkan)
   #:use-module (gnu packages llvm)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages version-control)
   #:use-module (gnu packages wine)
+  #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg))
 
 (define %vulkan-sdk-version "vulkan-sdk-1.3.275.0")
@@ -582,3 +584,73 @@ (define-public vulkan-utility-libraries
     (synopsis "Utility libraries for Vulkan developers")
     (description "Utility libraries for Vulkan developers.")
     (license license:asl2.0)))
+
+;; directx-shader-compiler depends on an old version of directx-headers.
+(define directx-headers-for-dxc
+  (let ((commit "980971e835876dc0cde415e8f9bc646e64667bf7")
+        (revision "115"))
+    (origin
+      (method git-fetch)
+      (uri (git-reference (url
+                           "https://github.com/microsoft/DirectX-Headers.git")
+                          (commit commit)))
+      (file-name (git-file-name "directx-headers-for-dxc"
+                                (git-version "0" revision commit)))
+      (sha256 (base32 "0c7l2xdsbr132ga2nyqjhz9xa42dxvhh9idjxnl673mz5kab1j6h")))))
+
+(define-public directx-shader-compiler
+  ;; This commit drops the dependency on effcee.
+  (let ((commit "5f7834de562eeda3689fba0824008e1bcd7958b8")
+        (revision "0"))
+    (package
+      (name "directx-shader-compiler")
+      (version "1.7.2308")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/microsoft/DirectXShaderCompiler.git")
+               (commit commit)))
+         (file-name (git-file-name "directx-shader-compiler"
+                                   (git-version version revision commit)))
+         (sha256
+          (base32 "0awnn5qb9hci3pprl6p84y4hlh6xibgsv0vwp6sm6n7wn71z2cb9"))
+         (modules '((guix build utils)))
+         (snippet '(substitute* "CMakeLists.txt"
+                     (("add_subdirectory\\(external\\)")
+                      "find_package(SPIRV-Tools REQUIRED)
+find_package(SPIRV-Tools-opt CONFIG REQUIRED)")))))
+      (build-system cmake-build-system)
+      (arguments
+       (list
+        #:configure-flags #~(list "-G"
+                             "Unix Makefiles"
+                             "-C"
+                             "../source/cmake/caches/PredefinedParams.cmake"
+                             (string-append "-DSPIRV_HEADER_INCLUDE_DIR="
+                                            #$(this-package-input
+                                               "spirv-headers") "/include")
+                             (string-append "-DSPIRV_TOOLS_INCLUDE_DIR="
+                                            #$(this-package-input
+                                               "spirv-tools") "/include")
+                             (string-append "-DDIRECTX_HEADER_INCLUDE_DIR="
+                                            #$directx-headers-for-dxc
+                                            "/include"))
+        #:phases #~(modify-phases %standard-phases
+                     (replace 'install
+                       (lambda* (#:key make-flags outputs #:allow-other-keys)
+                         (apply invoke "make" "install-distribution"
+                                make-flags))))))
+      (inputs (list libxml2 spirv-headers spirv-tools))
+      (native-inputs (list git python))
+      (home-page "https://github.com/microsoft/DirectXShaderCompiler")
+      (synopsis
+       "Compiler and related tools used to compile High-Level Shader Language (HLSL)")
+      (description
+       "The DirectX Shader Compiler project includes a compiler and related
+tools used to compile High-Level Shader Language (HLSL) programs into DirectX
+Intermediate Language (DXIL) representation. Applications that make use of
+DirectX for graphics, games, and computation can use it to generate shader
+programs.")
+      (license license:ncsa))))
+
-- 
2.41.0