about summary refs log tree commit diff
path: root/nixpkgs/pkgs/misc/dxvk/dxvk.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/misc/dxvk/dxvk.nix')
-rw-r--r--nixpkgs/pkgs/misc/dxvk/dxvk.nix52
1 files changed, 52 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/misc/dxvk/dxvk.nix b/nixpkgs/pkgs/misc/dxvk/dxvk.nix
new file mode 100644
index 000000000000..40b674df9225
--- /dev/null
+++ b/nixpkgs/pkgs/misc/dxvk/dxvk.nix
@@ -0,0 +1,52 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, glslang
+, meson
+, ninja
+, windows
+, src
+, version
+, dxvkPatches
+}:
+
+stdenv.mkDerivation {
+  pname = "dxvk";
+  inherit src version;
+
+  nativeBuildInputs = [ glslang meson ninja ];
+  buildInputs = [ windows.pthreads ];
+
+  patches = dxvkPatches;
+
+  # Replace use of DXVK’s threading classes with the ones from the C++ standard library, which uses
+  # mcfgthreads in nixpkgs.
+  postPatch = ''
+    for class in mutex recursive_mutex condition_variable; do
+      for file in $(grep -rl dxvk::$class *); do
+        if [ "$(basename "$file")" != "thread.h" ]; then
+          substituteInPlace "$file" --replace dxvk::$class std::$class
+        fi
+      done
+    done
+  '';
+
+  mesonFlags =
+    let
+      arch = if stdenv.is32bit then "32" else "64";
+    in
+    [
+      "--buildtype" "release"
+      "--cross-file" "build-win${arch}.txt"
+      "--prefix" "${placeholder "out"}"
+    ];
+
+  meta = {
+    description = "A Vulkan-based translation layer for Direct3D 9/10/11";
+    homepage = "https://github.com/doitsujin/dxvk";
+    changelog = "https://github.com/doitsujin/dxvk/releases";
+    maintainers = [ lib.maintainers.reckenrode ];
+    license = lib.licenses.zlib;
+    platforms = lib.platforms.windows;
+  };
+}