From 07de13a47bef73a0e6590711390d32a6507256df Mon Sep 17 00:00:00 2001 From: Emmanuel Hansen Date: Wed, 4 Sep 2024 15:57:00 -0500 Subject: [PATCH] Add native AOT support - Add native AOT solution config - Simplify assembly access in application library class - Make GetFunctionPointerForDelegate as explicit as possible --- .../Ryujinx.Graphics.GAL.csproj | 2 +- .../App/ApplicationLibrary.cs | 2 +- src/Ryujinx/Ryujinx.csproj | 13 + .../UI/Views/Main/MainMenuBarView.axaml.cs | 5 +- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 18 +- src/Ryujinx/rd.xml | 536 ++++++++++++++++++ 6 files changed, 563 insertions(+), 13 deletions(-) create mode 100644 src/Ryujinx/rd.xml diff --git a/src/Ryujinx.Graphics.GAL/Ryujinx.Graphics.GAL.csproj b/src/Ryujinx.Graphics.GAL/Ryujinx.Graphics.GAL.csproj index baab4d007..8f18bad31 100644 --- a/src/Ryujinx.Graphics.GAL/Ryujinx.Graphics.GAL.csproj +++ b/src/Ryujinx.Graphics.GAL/Ryujinx.Graphics.GAL.csproj @@ -1,4 +1,4 @@ - + true diff --git a/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs b/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs index e686659fd..58018fa15 100644 --- a/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs +++ b/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs @@ -86,7 +86,7 @@ namespace Ryujinx.UI.App.Common private static byte[] GetResourceBytes(string resourceName) { - Stream resourceStream = Assembly.GetCallingAssembly().GetManifestResourceStream(resourceName); + Stream resourceStream = typeof(ApplicationLibrary).Assembly.GetManifestResourceStream(resourceName); if (resourceStream != null) { byte[] resourceByteArray = new byte[resourceStream.Length]; diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index f2f144b28..d93df0b55 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -168,4 +168,17 @@ + + + + + true + true + false + false + Speed + true + false + full + diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs index ec98e31ba..3aeafd842 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs @@ -40,13 +40,12 @@ namespace Ryujinx.Ava.UI.Views.Main { List checkBoxes = []; - foreach (object item in Enum.GetValues(typeof(FileTypes))) + foreach (FileTypes fileName in Enum.GetValues()) { - string fileName = Enum.GetName(typeof(FileTypes), item); checkBoxes.Add(new CheckBox { Content = $".{fileName}", - IsChecked = ((FileTypes)item).GetConfigValue(ConfigurationState.Instance.UI.ShownFileTypes), + IsChecked = fileName.GetConfigValue(ConfigurationState.Instance.UI.ShownFileTypes), Command = MiniCommand.Create(() => Window.ToggleFileType(fileName)), }); } diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index 9da1f5bba..853286111 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -30,6 +30,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Reactive.Linq; +using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Threading; using System.Threading.Tasks; @@ -581,6 +582,7 @@ namespace Ryujinx.Ava.UI.Windows GraphicsConfig.TextureDumpFormatPng = ConfigurationState.Instance.Graphics.TexturesDumpFileFormat == TextureFileFormat.Png; GraphicsConfig.EnableTextureDump = ConfigurationState.Instance.Graphics.EnableTextureDump; GraphicsConfig.EnableTextureRealTimeEdit = ConfigurationState.Instance.Graphics.EnableTextureRealTimeEdit; + GraphicsConfig.EnableMacroJit = RuntimeFeature.IsDynamicCodeSupported ? ConfigurationState.Instance.Graphics.EnableMacroHLE : false; #pragma warning restore IDE0055 } @@ -676,18 +678,18 @@ namespace Ryujinx.Ava.UI.Windows ReloadGameList(); } - public void ToggleFileType(string fileType) + public void ToggleFileType(FileTypes fileType) { _ = fileType switch { #pragma warning disable IDE0055 // Disable formatting - "NSP" => ConfigurationState.Instance.UI.ShownFileTypes.NSP.Value = !ConfigurationState.Instance.UI.ShownFileTypes.NSP, - "PFS0" => ConfigurationState.Instance.UI.ShownFileTypes.PFS0.Value = !ConfigurationState.Instance.UI.ShownFileTypes.PFS0, - "XCI" => ConfigurationState.Instance.UI.ShownFileTypes.XCI.Value = !ConfigurationState.Instance.UI.ShownFileTypes.XCI, - "NCA" => ConfigurationState.Instance.UI.ShownFileTypes.NCA.Value = !ConfigurationState.Instance.UI.ShownFileTypes.NCA, - "NRO" => ConfigurationState.Instance.UI.ShownFileTypes.NRO.Value = !ConfigurationState.Instance.UI.ShownFileTypes.NRO, - "NSO" => ConfigurationState.Instance.UI.ShownFileTypes.NSO.Value = !ConfigurationState.Instance.UI.ShownFileTypes.NSO, - _ => throw new ArgumentOutOfRangeException(fileType), + FileTypes.NSP => ConfigurationState.Instance.UI.ShownFileTypes.NSP.Value = !ConfigurationState.Instance.UI.ShownFileTypes.NSP, + FileTypes.PFS0 => ConfigurationState.Instance.UI.ShownFileTypes.PFS0.Value = !ConfigurationState.Instance.UI.ShownFileTypes.PFS0, + FileTypes.XCI => ConfigurationState.Instance.UI.ShownFileTypes.XCI.Value = !ConfigurationState.Instance.UI.ShownFileTypes.XCI, + FileTypes.NCA => ConfigurationState.Instance.UI.ShownFileTypes.NCA.Value = !ConfigurationState.Instance.UI.ShownFileTypes.NCA, + FileTypes.NRO => ConfigurationState.Instance.UI.ShownFileTypes.NRO.Value = !ConfigurationState.Instance.UI.ShownFileTypes.NRO, + FileTypes.NSO => ConfigurationState.Instance.UI.ShownFileTypes.NSO.Value = !ConfigurationState.Instance.UI.ShownFileTypes.NSO, + _ => throw new ArgumentOutOfRangeException(fileType.ToString()), #pragma warning restore IDE0055 }; diff --git a/src/Ryujinx/rd.xml b/src/Ryujinx/rd.xml new file mode 100644 index 000000000..2faf502ad --- /dev/null +++ b/src/Ryujinx/rd.xml @@ -0,0 +1,536 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file