diff --git a/Directory.Packages.props b/Directory.Packages.props
index 44f9b5d40..40275763b 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -33,15 +33,15 @@
-
+
-
-
-
+
+
+
diff --git a/src/MeloNX/MeloNX.xcodeproj/project.pbxproj b/src/MeloNX/MeloNX.xcodeproj/project.pbxproj
index f5830e149..649ef8227 100644
--- a/src/MeloNX/MeloNX.xcodeproj/project.pbxproj
+++ b/src/MeloNX/MeloNX.xcodeproj/project.pbxproj
@@ -8,7 +8,7 @@
/* Begin PBXBuildFile section */
4E80AA212CD705DD00029585 /* SDL in Frameworks */ = {isa = PBXBuildFile; productRef = 4E80AA202CD705DD00029585 /* SDL */; };
- 4E80AA632CD7122800029585 /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4E80AA622CD7122800029585 /* GameController.framework */; };
+ CA5941A82CE3142E00C2BC10 /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4E80AA622CD7122800029585 /* GameController.framework */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -104,7 +104,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 4E80AA632CD7122800029585 /* GameController.framework in Frameworks */,
+ CA5941A82CE3142E00C2BC10 /* GameController.framework in Frameworks */,
4E80AA212CD705DD00029585 /* SDL in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -485,6 +485,10 @@
"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
+ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
+ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
+ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
+ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.stossy11.MeloNX;
@@ -525,6 +529,10 @@
"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
+ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
+ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
+ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
+ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.stossy11.MeloNX;
diff --git a/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/brandon.xcuserdatad/UserInterfaceState.xcuserstate b/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/brandon.xcuserdatad/UserInterfaceState.xcuserstate
new file mode 100644
index 000000000..93454cd76
Binary files /dev/null and b/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/brandon.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/src/MeloNX/MeloNX/Views/ContentView.swift b/src/MeloNX/MeloNX/Views/ContentView.swift
index 0c09b0f00..60f0525f4 100644
--- a/src/MeloNX/MeloNX/Views/ContentView.swift
+++ b/src/MeloNX/MeloNX/Views/ContentView.swift
@@ -54,12 +54,9 @@ struct ContentView: View {
}
func start(displayid: UInt32) {
- setupVirtualController()
- if theWindow == nil {
- // Ensure theWindow is set
- theWindow = UIApplication.shared.windows.first
- }
+
+
let config = Ryujinx.Configuration(
gamepath: game!.path,
@@ -72,9 +69,19 @@ struct ContentView: View {
inputids: ["1-47150005-05ac-0000-0100-00004f066d01"],
ryufullscreen: true
)
+
+
// Start the emulation
do {
+ if theWindow == nil {
+ // Ensure theWindow is set
+ theWindow = UIApplication.shared.windows.first
+ }
+ setupVirtualController()
+
try Ryujinx().start(with: config)
+
+
} catch {
print("Error \(error.localizedDescription)")
}
diff --git a/src/Ryujinx.Graphics.Vulkan/DescriptorSetCollection.cs b/src/Ryujinx.Graphics.Vulkan/DescriptorSetCollection.cs
index 846dd5c7d..dddd16e13 100644
--- a/src/Ryujinx.Graphics.Vulkan/DescriptorSetCollection.cs
+++ b/src/Ryujinx.Graphics.Vulkan/DescriptorSetCollection.cs
@@ -48,32 +48,58 @@ namespace Ryujinx.Graphics.Vulkan
}
public unsafe void UpdateBuffers(int setIndex, int baseBinding, ReadOnlySpan bufferInfo, DescriptorType type)
+{
+
+ // DEBUG: Validate inputs
+ if (bufferInfo.Length == 0)
+ {
+ Console.WriteLine("bufferInfo is empty.");
+ return;
+ }
+
+ // DEBUG: Check if _descriptorSets and _holder.Device are properly initialized
+ if (_descriptorSets == null || _descriptorSets.Length <= setIndex)
+ {
+ throw new Exception("Descriptor set at the specified index is null or out of range.");
+ }
+
+ if (_holder?.Device == null)
+ {
+ throw new Exception("_holder.Device is null or uninitialized.");
+ }
+
+ // DEBUG: Check each DescriptorBufferInfo in the span
+ foreach (var info in bufferInfo)
+ {
+ if (info.Buffer.Handle == 0)
{
- if (bufferInfo.Length == 0)
- {
- return;
- }
-
- fixed (DescriptorBufferInfo* pBufferInfo = bufferInfo)
- {
- var writeDescriptorSet = new WriteDescriptorSet
- {
- SType = StructureType.WriteDescriptorSet,
- DstSet = _descriptorSets[setIndex],
- DstBinding = (uint)baseBinding,
- DescriptorType = type,
- DescriptorCount = (uint)bufferInfo.Length,
- PBufferInfo = pBufferInfo,
- };
-
- _holder.Api.UpdateDescriptorSets(_holder.Device, 1, writeDescriptorSet, 0, null);
- }
+ throw new Exception("One of the buffers in bufferInfo is null or uninitialized.");
}
+ }
+
+ // Proceed if all checks pass
+ fixed (DescriptorBufferInfo* pBufferInfo = bufferInfo)
+ {
+ var writeDescriptorSet = new WriteDescriptorSet
+ {
+ SType = StructureType.WriteDescriptorSet,
+ DstSet = _descriptorSets[setIndex],
+ DstBinding = (uint)baseBinding,
+ DescriptorType = type,
+ DescriptorCount = (uint)bufferInfo.Length,
+ PBufferInfo = pBufferInfo
+ };
+
+ // Update descriptor sets
+ _holder.Api.UpdateDescriptorSets(_holder.Device, 1, writeDescriptorSet, 0, null);
+ }
+}
public unsafe void UpdateImage(int setIndex, int bindingIndex, DescriptorImageInfo imageInfo, DescriptorType type)
{
if (imageInfo.ImageView.Handle != 0UL)
{
+
var writeDescriptorSet = new WriteDescriptorSet
{
SType = StructureType.WriteDescriptorSet,
@@ -90,11 +116,22 @@ namespace Ryujinx.Graphics.Vulkan
public unsafe void UpdateImages(int setIndex, int baseBinding, ReadOnlySpan imageInfo, DescriptorType type)
{
+
+ // DEBUG: Check if imageInfo is Empty
if (imageInfo.Length == 0)
{
+
+ Console.WriteLine("Error: imageInfo is empty.");
return;
}
+ // DEBUG: Check the values inside imageInfo
+ foreach (var info in imageInfo)
+ {
+ Console.WriteLine($"Buffer Handle: {info.ImageView.Handle}");
+ }
+
+
fixed (DescriptorImageInfo* pImageInfo = imageInfo)
{
var writeDescriptorSet = new WriteDescriptorSet
@@ -107,6 +144,8 @@ namespace Ryujinx.Graphics.Vulkan
PImageInfo = pImageInfo,
};
+
+
_holder.Api.UpdateDescriptorSets(_holder.Device, 1, writeDescriptorSet, 0, null);
}
}
diff --git a/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs b/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs
index e0fe5d89a..0c52fa36b 100644
--- a/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs
+++ b/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs
@@ -110,7 +110,7 @@ namespace Ryujinx.Graphics.Vulkan
_textures.AsSpan().Fill(initialImageInfo);
_images.AsSpan().Fill(initialImageInfo);
- if (gd.Capabilities.SupportsNullDescriptors)
+ if (gd.Capabilities.SupportsNullDescriptors && !OperatingSystem.IsIOS())
{
// If null descriptors are supported, we can pass null as the handle.
_dummyBuffer = null;