Bring back old changes and enable Metal Argument Buffers

This commit is contained in:
stossy11 2024-11-23 22:20:59 +11:00
parent 05d1730c17
commit b9163f9fde
8 changed files with 85 additions and 34 deletions

View File

@ -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;

View File

@ -58,7 +58,6 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
enableAddressSanitizer = "YES"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"

View File

@ -47,9 +47,14 @@ struct ContentView: View {
if let game {
ZStack {
SDLViewRepresentable { displayid in
start(displayid: 0)
}
Text("Loading...")
.onAppear {
start(displayid: 0)
// start(displayid: 0)
}
}
} else {
HStack {
@ -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",

View File

@ -49,11 +49,35 @@ namespace Ryujinx.Graphics.Vulkan
public unsafe void UpdateBuffers(int setIndex, int baseBinding, ReadOnlySpan<DescriptorBufferInfo> 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)
{
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
@ -63,9 +87,10 @@ namespace Ryujinx.Graphics.Vulkan
DstBinding = (uint)baseBinding,
DescriptorType = type,
DescriptorCount = (uint)bufferInfo.Length,
PBufferInfo = pBufferInfo,
PBufferInfo = pBufferInfo
};
// Update descriptor sets
_holder.Api.UpdateDescriptorSets(_holder.Device, 1, writeDescriptorSet, 0, null);
}
}
@ -74,6 +99,7 @@ namespace Ryujinx.Graphics.Vulkan
{
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<DescriptorImageInfo> 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);
}
}

View File

@ -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;

View File

@ -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)
{