diff --git a/src/MeloNX/MeloNX.xcodeproj/project.pbxproj b/src/MeloNX/MeloNX.xcodeproj/project.pbxproj index 8f38b769d..747e12b8c 100644 --- a/src/MeloNX/MeloNX.xcodeproj/project.pbxproj +++ b/src/MeloNX/MeloNX.xcodeproj/project.pbxproj @@ -528,6 +528,9 @@ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX", "$(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; @@ -591,6 +594,9 @@ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX", "$(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/stossy11.xcuserdatad/UserInterfaceState.xcuserstate b/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/stossy11.xcuserdatad/UserInterfaceState.xcuserstate index 90b22f5bf..38981031d 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.xcodeproj/xcshareddata/xcschemes/MeloNX.xcscheme b/src/MeloNX/MeloNX.xcodeproj/xcshareddata/xcschemes/MeloNX.xcscheme index c0d279fbb..3ba310666 100644 --- a/src/MeloNX/MeloNX.xcodeproj/xcshareddata/xcschemes/MeloNX.xcscheme +++ b/src/MeloNX/MeloNX.xcodeproj/xcshareddata/xcschemes/MeloNX.xcscheme @@ -58,7 +58,6 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - enableAddressSanitizer = "YES" launchStyle = "0" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" diff --git a/src/MeloNX/MeloNX/Dependencies/Dynamic Libraries/libMoltenVK.dylib b/src/MeloNX/MeloNX/Dependencies/Dynamic Libraries/libMoltenVK.dylib index 845e2ef50..4787d35a7 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/Views/ContentView.swift b/src/MeloNX/MeloNX/Views/ContentView.swift index 135aa01f9..2b9b16daa 100644 --- a/src/MeloNX/MeloNX/Views/ContentView.swift +++ b/src/MeloNX/MeloNX/Views/ContentView.swift @@ -47,10 +47,15 @@ struct ContentView: View { if let game { - Text("Loading...") - .onAppear { + ZStack { + SDLViewRepresentable { displayid in start(displayid: 0) } + Text("Loading...") + .onAppear { + // start(displayid: 0) + } + } } else { HStack { GameListView(startemu: $game) @@ -92,10 +97,10 @@ struct ContentView: View { additionalArgs: [ // "--display-id", String(displayid) ], - debuglogs: true, - tracelogs: true, + 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 ) @@ -129,7 +134,8 @@ struct ContentView: View { "MVK_DEBUG": "1", "MVK_CONFIG_DEBUG": "1", "MVK_CONFIG_PREALLOCATE_DESCRIPTORS": "1", - // "MVK_CONFIG_VK_SEMAPHORE_SUPPORT_STYLE": "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", @@ -140,7 +146,7 @@ struct ContentView: View { ] settings.forEach { strins in - setenv(strins.key, strins.value, 1) + setenv(strins.key, strins.value, 1) } } diff --git a/src/Ryujinx.Graphics.Vulkan/DescriptorSetCollection.cs b/src/Ryujinx.Graphics.Vulkan/DescriptorSetCollection.cs index 846dd5c7d..9a792a544 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 @@ -103,10 +140,12 @@ namespace Ryujinx.Graphics.Vulkan DstSet = _descriptorSets[setIndex], DstBinding = (uint)baseBinding, DescriptorType = type, - DescriptorCount = (uint)imageInfo.Length, + DescriptorCount = (uint)1, PImageInfo = pImageInfo, }; + + _holder.Api.UpdateDescriptorSets(_holder.Device, 1, writeDescriptorSet, 0, null); } } diff --git a/src/Ryujinx.Graphics.Vulkan/HardwareCapabilities.cs b/src/Ryujinx.Graphics.Vulkan/HardwareCapabilities.cs index 273f91fa8..f89ca788f 100644 --- a/src/Ryujinx.Graphics.Vulkan/HardwareCapabilities.cs +++ b/src/Ryujinx.Graphics.Vulkan/HardwareCapabilities.cs @@ -103,18 +103,18 @@ namespace Ryujinx.Graphics.Vulkan SupportsShaderStencilExport = supportsShaderStencilExport; SupportsShaderStorageImageMultisample = supportsShaderStorageImageMultisample; SupportsConditionalRendering = supportsConditionalRendering; - SupportsExtendedDynamicState = false; + SupportsExtendedDynamicState = supportsExtendedDynamicState; SupportsMultiView = supportsMultiView; SupportsNullDescriptors = (OperatingSystem.IsIOS() ? false : supportsNullDescriptors); - SupportsPushDescriptors = (OperatingSystem.IsIOS() ? false : SupportsPushDescriptors); + SupportsPushDescriptors = (OperatingSystem.IsIOS() ? false : supportsPushDescriptors); SupportsPrimitiveTopologyListRestart = supportsPrimitiveTopologyListRestart; SupportsPrimitiveTopologyPatchListRestart = supportsPrimitiveTopologyPatchListRestart; - SupportsTransformFeedback = false; + SupportsTransformFeedback = supportsTransformFeedback; SupportsTransformFeedbackQueries = supportsTransformFeedbackQueries; SupportsPreciseOcclusionQueries = supportsPreciseOcclusionQueries; SupportsPipelineStatisticsQuery = supportsPipelineStatisticsQuery; - SupportsGeometryShader = false; - SupportsTessellationShader = false; + SupportsGeometryShader = supportsGeometryShader; + SupportsTessellationShader = supportsTessellationShader; SupportsViewportArray2 = supportsViewportArray2; SupportsHostImportedMemory = supportsHostImportedMemory; SupportsDepthClipControl = supportsDepthClipControl; diff --git a/src/Ryujinx.Headless.SDL2/WindowBase.cs b/src/Ryujinx.Headless.SDL2/WindowBase.cs index 9603a86be..8b24f1b9d 100644 --- a/src/Ryujinx.Headless.SDL2/WindowBase.cs +++ b/src/Ryujinx.Headless.SDL2/WindowBase.cs @@ -185,7 +185,8 @@ namespace Ryujinx.Headless.SDL2 FullscreenFlag = SDL_WindowFlags.SDL_WINDOW_FULLSCREEN_DESKTOP; } - WindowHandle = SDL_CreateWindow($"Ryujinx {Program.Version}{titleNameSection}{titleVersionSection}{titleIdSection}{titleArchSection}", SDL_WINDOWPOS_CENTERED_DISPLAY(DisplayId), SDL_WINDOWPOS_CENTERED_DISPLAY(DisplayId), Width, Height, DefaultFlags | FullscreenFlag | GetWindowFlags()); + WindowHandle = SDL_GetWindowFromID(1); + // WindowHandle = SDL_CreateWindow($"Ryujinx {Program.Version}{titleNameSection}{titleVersionSection}{titleIdSection}{titleArchSection}", SDL_WINDOWPOS_CENTERED_DISPLAY(DisplayId), SDL_WINDOWPOS_CENTERED_DISPLAY(DisplayId), Width, Height, DefaultFlags | FullscreenFlag | GetWindowFlags()); if (WindowHandle == IntPtr.Zero) {