diff --git a/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/stossy11.xcuserdatad/UserInterfaceState.xcuserstate b/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/stossy11.xcuserdatad/UserInterfaceState.xcuserstate
index 38981031d..e1e9ff137 100644
Binary files a/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/stossy11.xcuserdatad/UserInterfaceState.xcuserstate and b/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/stossy11.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/src/MeloNX/MeloNX/Core/Swift/Ryujinx.swift b/src/MeloNX/MeloNX/Core/Swift/Ryujinx.swift
index a00489b2c..93faef1c7 100644
--- a/src/MeloNX/MeloNX/Core/Swift/Ryujinx.swift
+++ b/src/MeloNX/MeloNX/Core/Swift/Ryujinx.swift
@@ -106,8 +106,12 @@ class Ryujinx {
         args.append(contentsOf: ["--disable-shader-cache", "true"])
         args.append(contentsOf: ["--disable-docked-mode", "true"])
         args.append(contentsOf: ["--enable-texture-recompression", "true"])
-        args.append(contentsOf: ["--enable-debug-logs", String(config.debuglogs)])
-        args.append(contentsOf: ["--enable-trace-logs", String(config.tracelogs)])
+        if config.debuglogs {
+            args.append(contentsOf: ["--enable-debug-logs", String(config.debuglogs)])
+        }
+        if config.tracelogs {
+            args.append(contentsOf: ["--enable-trace-logs", String(config.tracelogs)])
+        }
 
         // List the input ids
         if config.listinputids {
@@ -117,7 +121,7 @@ class Ryujinx {
         // Append the input ids (limit to 4 just in case)
         if !config.inputids.isEmpty {
             config.inputids.prefix(4).enumerated().forEach { index, inputId in
-                // args.append(contentsOf: ["--input-id-\(index + 1)", inputId])
+                args.append(contentsOf: ["--input-id-\(index + 1)", inputId])
             }
         }
 
diff --git a/src/MeloNX/MeloNX/Dependencies/Dynamic Libraries/libMoltenVK.dylib b/src/MeloNX/MeloNX/Dependencies/Dynamic Libraries/libMoltenVK.dylib
index 4787d35a7..e2f6bb2d9 100755
Binary files a/src/MeloNX/MeloNX/Dependencies/Dynamic Libraries/libMoltenVK.dylib and b/src/MeloNX/MeloNX/Dependencies/Dynamic Libraries/libMoltenVK.dylib differ
diff --git a/src/MeloNX/MeloNX/Dependencies/XCFrameworks/MoltenVK.xcframework/ios-arm64/MoltenVK.framework/MoltenVK b/src/MeloNX/MeloNX/Dependencies/XCFrameworks/MoltenVK.xcframework/ios-arm64/MoltenVK.framework/MoltenVK
index 845e2ef50..e2f6bb2d9 100755
Binary files a/src/MeloNX/MeloNX/Dependencies/XCFrameworks/MoltenVK.xcframework/ios-arm64/MoltenVK.framework/MoltenVK and b/src/MeloNX/MeloNX/Dependencies/XCFrameworks/MoltenVK.xcframework/ios-arm64/MoltenVK.framework/MoltenVK differ
diff --git a/src/MeloNX/MeloNX/Views/ContentView.swift b/src/MeloNX/MeloNX/Views/ContentView.swift
index 2b9b16daa..154e32d22 100644
--- a/src/MeloNX/MeloNX/Views/ContentView.swift
+++ b/src/MeloNX/MeloNX/Views/ContentView.swift
@@ -9,20 +9,32 @@ import SwiftUI
 import SDL2
 import GameController
 
+struct MoltenVKSettings: Codable, Hashable {
+    let string: String
+    var value: String
+}
+
 struct ContentView: View {
     @State public var theWindow: UIWindow? = nil
     @State private var virtualController: GCVirtualController?
     @State var game: URL? = nil
     @State var controllerss: [Controller] = []
     
+    @State private var settings: [MoltenVKSettings] = [
+        MoltenVKSettings(string: "MVK_CONFIG_SYNCHRONOUS_QUEUE_SUBMITS", value: "0"),
+        MoltenVKSettings(string: "MVK_CONFIG_PREFILL_METAL_COMMAND_BUFFERS", value: "0"),
+        MoltenVKSettings(string: "MVK_CONFIG_MAX_ACTIVE_METAL_COMMAND_BUFFERS_PER_QUEUE", value: "1024"),
+        MoltenVKSettings(string: "MVK_CONFIG_USE_METAL_ARGUMENT_BUFFERS", value: "0"),
+        MoltenVKSettings(string: "MVK_CONFIG_RESUME_LOST_DEVICE", value: "1")
+    ]
+    
     init() {
-        setMoltenVKSettings()
         // Initialize SDL
         DispatchQueue.main.async { [self] in
+            setMoltenVKSettings()
             SDL_SetMainReady()
             SDL_iPhoneSetEventPump(SDL_TRUE)
             SDL_Init(SDL_INIT_VIDEO)
-            
             patchMakeKeyAndVisible()
         }
     }
@@ -62,30 +74,22 @@ struct ContentView: View {
                     .onAppear() {
                         Ryujinx().getConnectedControllers()
                     }
-                /*
+                
                 List {
-                    ForEach(Ryujinx().controllerMap) { controllers in
-                        Button {
-                            if controllerss.contains(where: { $0.id == controllers.id }) {
-                                controllerss.removeAll(where: { $0.id == controllers.id })
-                            } else {
-                                controllerss.append(controllers)
-                            }
-                        } label: {
-                            if controllerss.contains(where: { $0.id == controllers.id }) {
-                                HStack {
-                                    Text(controllers.name)
-                                    Spacer()
-                                    Text("enabled")
+                    ForEach($settings, id: \.self) { $setting in
+                        HStack {
+                            Text(setting.string)
+                                .padding()
+                            TextField("Value", text: $setting.value)
+                                .textFieldStyle(RoundedBorderTextFieldStyle())
+                                .onChange(of: setting.value) { newValue in
+                                    setenv(setting.string, newValue, 1)
                                 }
-                            } else {
-                                Text(controllers.name)
-                            }
                         }
                     }
                  
                 }
-                 */
+                 
             }
         }
     }
@@ -100,7 +104,7 @@ struct ContentView: View {
             debuglogs: false,
             tracelogs: false,
             listinputids: false,
-            inputids: [], //"1-1fd70005-057e-0000-0920-0000ff870000"], // "2-1fd70005-057e-0000-0920-0000ff870000"],
+            inputids: ["1-1fd70005-057e-0000-0920-0000ff870000"], // "2-1fd70005-057e-0000-0920-0000ff870000"],
             ryufullscreen: true
             
         )
@@ -128,27 +132,9 @@ struct ContentView: View {
     
     
     private func setMoltenVKSettings() {
-        
-        
-        let settings: [String: String] = [
-            "MVK_DEBUG": "1",
-            "MVK_CONFIG_DEBUG": "1",
-            "MVK_CONFIG_PREALLOCATE_DESCRIPTORS": "1",
-            "MVK_CONFIG_TEXTURE_1D_AS_2D": "0",
-            "MVK_CONFIG_SYNCHRONOUS_QUEUE_SUBMITS": "0",
-            "MVK_CONFIG_PREFILL_METAL_COMMAND_BUFFERS": "3",
-            "MVK_CONFIG_MAX_ACTIVE_METAL_COMMAND_BUFFERS_PER_QUEUE": "512",
-            "MVK_CONFIG_USE_METAL_ARGUMENT_BUFFERS": "1",
-            "MVK_USE_METAL_PRIVATE_API": "1",
-            "MVK_CONFIG_RESUME_LOST_DEVICE": "1",
-            "MVK_CONFIG_USE_METAL_PRIVATE_API": "1",
-            // "MVK_CONFIG_ALLOW_METAL_NON_STANDARD_IMAGE_COPIES": "1"
-        ]
-        
-        settings.forEach { strins in
-           setenv(strins.key, strins.value, 1)
+        settings.forEach { setting in
+            setenv(setting.string, setting.value, 1)
         }
-        
     }
 }
 
diff --git a/src/Ryujinx.Graphics.Vulkan/DescriptorSetCollection.cs b/src/Ryujinx.Graphics.Vulkan/DescriptorSetCollection.cs
index 9a792a544..531bbb75e 100644
--- a/src/Ryujinx.Graphics.Vulkan/DescriptorSetCollection.cs
+++ b/src/Ryujinx.Graphics.Vulkan/DescriptorSetCollection.cs
@@ -130,6 +130,7 @@ namespace Ryujinx.Graphics.Vulkan
             {
                 Console.WriteLine($"Buffer Handle: {info.ImageView.Handle}");
             }
+            Console.WriteLine($"SetIndex: {setIndex}, BaseBinding: {baseBinding}, DescriptorType: {type}, ImageInfo Count: {imageInfo.Length}");
 
 
             fixed (DescriptorImageInfo* pImageInfo = imageInfo)
@@ -140,7 +141,7 @@ namespace Ryujinx.Graphics.Vulkan
                     DstSet = _descriptorSets[setIndex],
                     DstBinding = (uint)baseBinding,
                     DescriptorType = type,
-                    DescriptorCount = (uint)1,
+                    DescriptorCount = (uint)imageInfo.Length,
                     PImageInfo = pImageInfo,
                 };
 
@@ -179,7 +180,7 @@ namespace Ryujinx.Graphics.Vulkan
                             DstSet = _descriptorSets[setIndex],
                             DstBinding = (uint)(baseBinding + i),
                             DescriptorType = DescriptorType.CombinedImageSampler,
-                            DescriptorCount = (uint)count,
+                            DescriptorCount = 1,
                             PImageInfo = pImageInfo,
                         };
 
@@ -235,7 +236,7 @@ namespace Ryujinx.Graphics.Vulkan
                             DstSet = _descriptorSets[setIndex],
                             DstBinding = (uint)baseBinding + i,
                             DescriptorType = type,
-                            DescriptorCount = count,
+                            DescriptorCount = 1,
                             PTexelBufferView = pTexelBufferView + i,
                         };
 
diff --git a/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs b/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs
index e0fe5d89a..155525ecd 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;
@@ -580,9 +580,12 @@ namespace Ryujinx.Graphics.Vulkan
                             {
                                 texture.Sampler = _dummySampler.GetSampler().Get(cbs).Value;
                             }
+
+                            Span<DescriptorImageInfo> singleTexture = textures.Slice(i, 1);
+                            dsc.UpdateImages(0, binding + i, singleTexture, DescriptorType.CombinedImageSampler);
                         }
 
-                        dsc.UpdateImages(0, binding, textures[..count], DescriptorType.CombinedImageSampler);
+                        // dsc.UpdateImages(0, binding, textures[..count], DescriptorType.CombinedImageSampler);
                     }
                     else
                     {
@@ -605,9 +608,11 @@ namespace Ryujinx.Graphics.Vulkan
                         for (int i = 0; i < count; i++)
                         {
                             images[i].ImageView = _imageRefs[binding + i]?.Get(cbs).Value ?? default;
+                            Span<DescriptorImageInfo> singleImage = images.Slice(i, 1);
+                            dsc.UpdateImages(0, binding + i, singleImage, DescriptorType.StorageImage);
                         }
 
-                        dsc.UpdateImages(0, binding, images[..count], DescriptorType.StorageImage);
+                        // dsc.UpdateImages(0, binding, images[..count], DescriptorType.StorageImage);
                     }
                     else
                     {
diff --git a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
index d379b9c18..3a2b104ce 100644
--- a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
+++ b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
@@ -318,7 +318,7 @@ namespace Ryujinx.Graphics.Vulkan
                 _physicalDevice.IsDeviceExtensionPresent(ExtConditionalRendering.ExtensionName),
                 _physicalDevice.IsDeviceExtensionPresent(ExtExtendedDynamicState.ExtensionName),
                 features2.Features.MultiViewport && !(IsMoltenVk && Vendor == Vendor.Amd), // Workaround for AMD on MoltenVK issue
-                featuresRobustness2.NullDescriptor || IsMoltenVk,
+                featuresRobustness2.NullDescriptor || !IsMoltenVk,
                 _physicalDevice.IsDeviceExtensionPresent(KhrPushDescriptor.ExtensionName),
                 featuresPrimitiveTopologyListRestart.PrimitiveTopologyListRestart,
                 featuresPrimitiveTopologyListRestart.PrimitiveTopologyPatchListRestart,