diff --git a/Directory.Packages.props b/Directory.Packages.props
index b2a838496..e1cd66d78 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -39,7 +39,7 @@
-
+
@@ -59,4 +59,4 @@
-
\ No newline at end of file
+
diff --git a/distribution/macos/construct_universal_dylib.py b/distribution/macos/construct_universal_dylib.py
index 5d9321860..18b84399f 100644
--- a/distribution/macos/construct_universal_dylib.py
+++ b/distribution/macos/construct_universal_dylib.py
@@ -47,14 +47,12 @@ def get_new_name(
input_component = str(input_dylib_path).replace(str(input_directory), "")[1:]
return Path(os.path.join(output_directory, input_component))
-
-def is_fat_file(dylib_path: Path) -> str:
- res = subprocess.check_output([LIPO, "-info", str(dylib_path.absolute())]).decode(
- "utf-8"
- )
-
- return not res.split("\n")[0].startswith("Non-fat file")
-
+def get_archs(dylib_path: Path) -> list[str]:
+ res = subprocess.check_output([LIPO, "-info", str(dylib_path)]).decode("utf-8")
+ if res.startswith("Non-fat file"):
+ return [res.split(":")[-1].strip()]
+ else:
+ return res.split("are:")[-1].strip().split()
def construct_universal_dylib(
arm64_input_dylib_path: Path, x86_64_input_dylib_path: Path, output_dylib_path: Path
@@ -69,11 +67,12 @@ def construct_universal_dylib(
os.path.basename(arm64_input_dylib_path.resolve()), output_dylib_path
)
else:
- if is_fat_file(arm64_input_dylib_path) or not x86_64_input_dylib_path.exists():
- with open(output_dylib_path, "wb") as dst:
- with open(arm64_input_dylib_path, "rb") as src:
- dst.write(src.read())
- else:
+ arm64_archs = get_archs(arm64_input_dylib_path)
+ x86_64_archs = get_archs(x86_64_input_dylib_path) if x86_64_input_dylib_path.exists() else []
+
+ if "arm64" in arm64_archs and "x86_64" in arm64_archs:
+ shutil.copy2(arm64_input_dylib_path, output_dylib_path)
+ elif x86_64_archs:
subprocess.check_call(
[
LIPO,
diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineLayoutFactory.cs b/src/Ryujinx.Graphics.Vulkan/PipelineLayoutFactory.cs
index 612a8b25d..d8fe67d68 100644
--- a/src/Ryujinx.Graphics.Vulkan/PipelineLayoutFactory.cs
+++ b/src/Ryujinx.Graphics.Vulkan/PipelineLayoutFactory.cs
@@ -17,22 +17,10 @@ namespace Ryujinx.Graphics.Vulkan
DescriptorSetLayout[] layouts = new DescriptorSetLayout[setDescriptors.Count];
bool[] updateAfterBindFlags = new bool[setDescriptors.Count];
- bool isMoltenVk = gd.IsMoltenVk;
-
for (int setIndex = 0; setIndex < setDescriptors.Count; setIndex++)
{
ResourceDescriptorCollection rdc = setDescriptors[setIndex];
- ResourceStages activeStages = ResourceStages.None;
-
- if (isMoltenVk)
- {
- for (int descIndex = 0; descIndex < rdc.Descriptors.Count; descIndex++)
- {
- activeStages |= rdc.Descriptors[descIndex].Stages;
- }
- }
-
DescriptorSetLayoutBinding[] layoutBindings = new DescriptorSetLayoutBinding[rdc.Descriptors.Count];
bool hasArray = false;
@@ -42,13 +30,6 @@ namespace Ryujinx.Graphics.Vulkan
ResourceDescriptor descriptor = rdc.Descriptors[descIndex];
ResourceStages stages = descriptor.Stages;
- if (descriptor.Type == ResourceType.StorageBuffer && isMoltenVk)
- {
- // There's a bug on MoltenVK where using the same buffer across different stages
- // causes invalid resource errors, allow the binding on all active stages as workaround.
- stages = activeStages;
- }
-
layoutBindings[descIndex] = new DescriptorSetLayoutBinding
{
Binding = (uint)descriptor.Binding,
diff --git a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
index 5f1c50b00..d748f806f 100644
--- a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
+++ b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
@@ -435,8 +435,8 @@ namespace Ryujinx.Graphics.Vulkan
_physicalDevice.IsDeviceExtensionPresent(ExtExtendedDynamicState.ExtensionName),
features2.Features.MultiViewport && !(IsMoltenVk && Vendor == Vendor.Amd), // Workaround for AMD on MoltenVK issue
featuresRobustness2.NullDescriptor || IsMoltenVk,
- supportsPushDescriptors && !IsMoltenVk,
- propertiesPushDescriptor.MaxPushDescriptors,
+ supportsPushDescriptors,
+ IsMoltenVk ? 16 : propertiesPushDescriptor.MaxPushDescriptors, // Prevents vertex explosions on MoltenVK.
featuresPrimitiveTopologyListRestart.PrimitiveTopologyListRestart,
featuresPrimitiveTopologyListRestart.PrimitiveTopologyPatchListRestart,
supportsTransformFeedback,
@@ -775,7 +775,7 @@ namespace Ryujinx.Graphics.Vulkan
supportsShaderBallot: false,
supportsShaderBarrierDivergence: Vendor != Vendor.Intel,
supportsShaderFloat64: Capabilities.SupportsShaderFloat64,
- supportsTextureGatherOffsets: features2.Features.ShaderImageGatherExtended && !IsMoltenVk,
+ supportsTextureGatherOffsets: features2.Features.ShaderImageGatherExtended,
supportsTextureShadowLod: false,
supportsVertexStoreAndAtomics: features2.Features.VertexPipelineStoresAndAtomics,
supportsViewportIndexVertexTessellation: featuresVk12.ShaderOutputViewportIndex,
diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj
index 3d40ae64e..d94bf5819 100644
--- a/src/Ryujinx/Ryujinx.csproj
+++ b/src/Ryujinx/Ryujinx.csproj
@@ -64,7 +64,7 @@
-
+