diff options
author | Sandro <sandro.jaeckel@gmail.com> | 2022-03-27 17:00:33 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-27 17:00:33 +0200 |
commit | 1bf32e43deaf8a89aac50fb9e24667714c20bc9d (patch) | |
tree | 5589fb3a9f5da8f9b7921c3028f14dc3b90c8d48 /pkgs/os-specific | |
parent | 05fc9a6c90aada4938fdbfd3e25d8434c307706b (diff) | |
parent | 2f4eedc4017a82a88b3dbc4d4b98fb1b1dcf299c (diff) |
Merge pull request #163474 from reckenrode/dxvk-refactor
Diffstat (limited to 'pkgs/os-specific')
-rw-r--r-- | pkgs/os-specific/darwin/moltenvk/default.nix | 4 | ||||
-rw-r--r-- | pkgs/os-specific/darwin/moltenvk/dxvk-moltenvk-compat.patch | 59 |
2 files changed, 63 insertions, 0 deletions
diff --git a/pkgs/os-specific/darwin/moltenvk/default.nix b/pkgs/os-specific/darwin/moltenvk/default.nix index ba8bc605e8b45..dc7f3f58fd3a8 100644 --- a/pkgs/os-specific/darwin/moltenvk/default.nix +++ b/pkgs/os-specific/darwin/moltenvk/default.nix @@ -43,6 +43,10 @@ stdenvNoCC.mkDerivation rec { # MoltenVK requires specific versions of its dependencies. # Pin them here except for cereal, which is four years old and has several CVEs. passthru = { + # The patch required to support DXVK may different from version to version. This should never + # be used except with DXVK, so there’s no package for it. To emphasize that this patch should + # never be used except with DXVK, `dxvk` provides a function for applying this patch. + dxvkPatch = ./dxvk-moltenvk-compat.patch; glslang = (glslang.overrideAttrs (old: { src = fetchFromGitHub { owner = "KhronosGroup"; diff --git a/pkgs/os-specific/darwin/moltenvk/dxvk-moltenvk-compat.patch b/pkgs/os-specific/darwin/moltenvk/dxvk-moltenvk-compat.patch new file mode 100644 index 0000000000000..7d16fdf703318 --- /dev/null +++ b/pkgs/os-specific/darwin/moltenvk/dxvk-moltenvk-compat.patch @@ -0,0 +1,59 @@ +Source: https://github.com/Gcenx/MoltenVK/commit/1f268bd45f6c928784d7cb90dedce382895f10ae + +Fake extensions for DXVK; +- _features.geometryShader +- _features.tessellationShader +- _features.shaderCullDistance + +Enabled defaults; +- MVK_ALLOW_METAL_FENCES=1 +- MVK_CONFIG_RESUME_LOST_DEVICE=1 +--- + MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm | 3 +++ + MoltenVK/MoltenVK/Utility/MVKEnvironment.h | 4 ++-- + 2 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm +index bc6d19df..e1959c6e 100644 +--- a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm ++++ b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm +@@ -1656,6 +1656,8 @@ + _features.robustBufferAccess = true; // XXX Required by Vulkan spec + _features.fullDrawIndexUint32 = true; + _features.independentBlend = true; ++ _features.geometryShader = true; // XXX Required by DXVK for D3D10 ++ _features.tessellationShader = true; // XXX Required by DXVK for D3D11 + _features.sampleRateShading = true; + _features.depthBiasClamp = true; + _features.fillModeNonSolid = true; +@@ -1669,6 +1671,7 @@ + _features.shaderUniformBufferArrayDynamicIndexing = true; + _features.shaderStorageBufferArrayDynamicIndexing = true; + _features.shaderClipDistance = true; ++ _features.shaderCullDistance = true; // XXX Required by DXVK for 10level9 + _features.shaderInt16 = true; + _features.multiDrawIndirect = true; + _features.inheritedQueries = true; +diff --git a/MoltenVK/MoltenVK/Utility/MVKEnvironment.h b/MoltenVK/MoltenVK/Utility/MVKEnvironment.h +index 81d0defc..80c414d3 100644 +--- a/MoltenVK/MoltenVK/Utility/MVKEnvironment.h ++++ b/MoltenVK/MoltenVK/Utility/MVKEnvironment.h +@@ -240,7 +240,7 @@ void mvkSetConfig(const MVKConfiguration& mvkConfig); + # define MVK_ALLOW_METAL_EVENTS 1 + #endif + #ifndef MVK_ALLOW_METAL_FENCES +-# define MVK_ALLOW_METAL_FENCES 0 ++# define MVK_ALLOW_METAL_FENCES 1 // XXX Required by DXVK for Apple/NVidia GPUs (better FPS than CPU Emulation) + #endif + + /** Substitute Metal 2D textures for Vulkan 1D images. Enabled by default. */ +@@ -275,7 +275,7 @@ void mvkSetConfig(const MVKConfiguration& mvkConfig); + + /** Resume MVKDevice VK_ERROR_DEVICE_LOST errors that do not cause MVKPhysicalDevice errors. Disabled by default. */ + #ifndef MVK_CONFIG_RESUME_LOST_DEVICE +-# define MVK_CONFIG_RESUME_LOST_DEVICE 0 ++# define MVK_CONFIG_RESUME_LOST_DEVICE 1 + #endif + + /** Support Metal argument buffers. Disabled by default. */ + \ No newline at end of file |