diff options
| author | Xpl0itR <xpl0itr@outlook.com> | 2020-03-30 22:38:52 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-03-31 08:38:52 +1100 |
| commit | 12d49c37d219950ccb22c3979ecb0b34262a7155 (patch) | |
| tree | ac6e73776a332e833d0f59d1b72f281eaff07098 | |
| parent | 5a52ca5071425e3f9600576679bec609e7cead89 (diff) | |
Make max anisotropy configurable (#1043)
* Make max anisotropy configurable
* Move opengl command to opengl project
* Add GUI option
| -rw-r--r-- | Ryujinx.Common/Configuration/ConfigurationFileFormat.cs | 7 | ||||
| -rw-r--r-- | Ryujinx.Common/Configuration/ConfigurationState.cs | 18 | ||||
| -rw-r--r-- | Ryujinx.Graphics.GAL/Capabilities.cs | 12 | ||||
| -rw-r--r-- | Ryujinx.Graphics.Gpu/GraphicsConfig.cs | 5 | ||||
| -rw-r--r-- | Ryujinx.Graphics.Gpu/Image/Sampler.cs | 8 | ||||
| -rw-r--r-- | Ryujinx.Graphics.OpenGL/HwCapabilities.cs | 4 | ||||
| -rw-r--r-- | Ryujinx.Graphics.OpenGL/Renderer.cs | 3 | ||||
| -rw-r--r-- | Ryujinx/Config.json | 4 | ||||
| -rw-r--r-- | Ryujinx/Ui/MainWindow.cs | 1 | ||||
| -rw-r--r-- | Ryujinx/Ui/SwitchSettings.cs | 3 | ||||
| -rw-r--r-- | Ryujinx/Ui/SwitchSettings.glade | 53 |
11 files changed, 108 insertions, 10 deletions
diff --git a/Ryujinx.Common/Configuration/ConfigurationFileFormat.cs b/Ryujinx.Common/Configuration/ConfigurationFileFormat.cs index e4cd63d6..9123f044 100644 --- a/Ryujinx.Common/Configuration/ConfigurationFileFormat.cs +++ b/Ryujinx.Common/Configuration/ConfigurationFileFormat.cs @@ -19,11 +19,16 @@ namespace Ryujinx.Configuration /// <summary> /// The current version of the file format /// </summary> - public const int CurrentVersion = 3; + public const int CurrentVersion = 4; public int Version { get; set; } /// <summary> + /// Max Anisotropy. Values range from 0 - 16. Set to -1 to let the game decide. + /// </summary> + public float MaxAnisotropy { get; set; } + + /// <summary> /// Dumps shaders in this local directory /// </summary> public string GraphicsShadersDumpPath { get; set; } diff --git a/Ryujinx.Common/Configuration/ConfigurationState.cs b/Ryujinx.Common/Configuration/ConfigurationState.cs index e563008a..67628aa1 100644 --- a/Ryujinx.Common/Configuration/ConfigurationState.cs +++ b/Ryujinx.Common/Configuration/ConfigurationState.cs @@ -236,6 +236,11 @@ namespace Ryujinx.Configuration public class GraphicsSection { /// <summary> + /// Max Anisotropy. Values range from 0 - 16. Set to -1 to let the game decide. + /// </summary> + public ReactiveObject<float> MaxAnisotropy { get; private set; } + + /// <summary> /// Dumps shaders in this local directory /// </summary> public ReactiveObject<string> ShadersDumpPath { get; private set; } @@ -247,6 +252,7 @@ namespace Ryujinx.Configuration public GraphicsSection() { + MaxAnisotropy = new ReactiveObject<float>(); ShadersDumpPath = new ReactiveObject<string>(); EnableVsync = new ReactiveObject<bool>(); } @@ -302,6 +308,7 @@ namespace Ryujinx.Configuration ConfigurationFileFormat configurationFile = new ConfigurationFileFormat { Version = ConfigurationFileFormat.CurrentVersion, + MaxAnisotropy = Graphics.MaxAnisotropy, GraphicsShadersDumpPath = Graphics.ShadersDumpPath, LoggingEnableDebug = Logger.EnableDebug, LoggingEnableStub = Logger.EnableStub, @@ -349,6 +356,7 @@ namespace Ryujinx.Configuration public void LoadDefault() { + Graphics.MaxAnisotropy.Value = -1; Graphics.ShadersDumpPath.Value = ""; Logger.EnableDebug.Value = false; Logger.EnableStub.Value = true; @@ -487,6 +495,16 @@ namespace Ryujinx.Configuration configurationFileUpdated = true; } + if (configurationFileFormat.Version < 4) + { + Common.Logging.Logger.PrintWarning(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 4."); + + configurationFileFormat.MaxAnisotropy = -1; + + configurationFileUpdated = true; + } + + Graphics.MaxAnisotropy.Value = configurationFileFormat.MaxAnisotropy; Graphics.ShadersDumpPath.Value = configurationFileFormat.GraphicsShadersDumpPath; Logger.EnableDebug.Value = configurationFileFormat.LoggingEnableDebug; Logger.EnableStub.Value = configurationFileFormat.LoggingEnableStub; diff --git a/Ryujinx.Graphics.GAL/Capabilities.cs b/Ryujinx.Graphics.GAL/Capabilities.cs index b75ceb94..8ea4c02a 100644 --- a/Ryujinx.Graphics.GAL/Capabilities.cs +++ b/Ryujinx.Graphics.GAL/Capabilities.cs @@ -8,16 +8,20 @@ namespace Ryujinx.Graphics.GAL public int MaximumComputeSharedMemorySize { get; } public int StorageBufferOffsetAlignment { get; } + public float MaxSupportedAnisotropy { get; } + public Capabilities( - bool supportsAstcCompression, - bool supportsNonConstantTextureOffset, - int maximumComputeSharedMemorySize, - int storageBufferOffsetAlignment) + bool supportsAstcCompression, + bool supportsNonConstantTextureOffset, + int maximumComputeSharedMemorySize, + int storageBufferOffsetAlignment, + float maxSupportedAnisotropy) { SupportsAstcCompression = supportsAstcCompression; SupportsNonConstantTextureOffset = supportsNonConstantTextureOffset; MaximumComputeSharedMemorySize = maximumComputeSharedMemorySize; StorageBufferOffsetAlignment = storageBufferOffsetAlignment; + MaxSupportedAnisotropy = maxSupportedAnisotropy; } } }
\ No newline at end of file diff --git a/Ryujinx.Graphics.Gpu/GraphicsConfig.cs b/Ryujinx.Graphics.Gpu/GraphicsConfig.cs index 468d3a34..4bda7c19 100644 --- a/Ryujinx.Graphics.Gpu/GraphicsConfig.cs +++ b/Ryujinx.Graphics.Gpu/GraphicsConfig.cs @@ -6,6 +6,11 @@ namespace Ryujinx.Graphics.Gpu public static class GraphicsConfig { /// <summary> + /// Max Anisotropy. Values range from 0 - 16. Set to -1 to let the game decide. + /// </summary> + public static float MaxAnisotropy; + + /// <summary> /// Base directory used to write shader code dumps. /// Set to null to disable code dumping. /// </summary> diff --git a/Ryujinx.Graphics.Gpu/Image/Sampler.cs b/Ryujinx.Graphics.Gpu/Image/Sampler.cs index 45f5f519..827d6077 100644 --- a/Ryujinx.Graphics.Gpu/Image/Sampler.cs +++ b/Ryujinx.Graphics.Gpu/Image/Sampler.cs @@ -40,7 +40,11 @@ namespace Ryujinx.Graphics.Gpu.Image float maxLod = descriptor.UnpackMaxLod(); float mipLodBias = descriptor.UnpackMipLodBias(); - float maxAnisotropy = descriptor.UnpackMaxAnisotropy(); + float maxRequestedAnisotropy = GraphicsConfig.MaxAnisotropy >= 0 && GraphicsConfig.MaxAnisotropy <= 16 ? GraphicsConfig.MaxAnisotropy : descriptor.UnpackMaxAnisotropy(); + float maxSupportedAnisotropy = context.Capabilities.MaxSupportedAnisotropy; + + if (maxRequestedAnisotropy > maxSupportedAnisotropy) + maxRequestedAnisotropy = maxSupportedAnisotropy; HostSampler = context.Renderer.CreateSampler(new SamplerCreateInfo( minFilter, @@ -54,7 +58,7 @@ namespace Ryujinx.Graphics.Gpu.Image minLod, maxLod, mipLodBias, - maxAnisotropy)); + maxRequestedAnisotropy)); } /// <summary> diff --git a/Ryujinx.Graphics.OpenGL/HwCapabilities.cs b/Ryujinx.Graphics.OpenGL/HwCapabilities.cs index 3d72cb7d..4b572af8 100644 --- a/Ryujinx.Graphics.OpenGL/HwCapabilities.cs +++ b/Ryujinx.Graphics.OpenGL/HwCapabilities.cs @@ -22,12 +22,16 @@ namespace Ryujinx.Graphics.OpenGL public static GpuVendor Vendor => _gpuVendor.Value; + private static Lazy<float> _maxSupportedAnisotropy = new Lazy<float>(GL.GetFloat((GetPName)All.MaxTextureMaxAnisotropy)); + public static bool SupportsAstcCompression => _supportsAstcCompression.Value; public static bool SupportsNonConstantTextureOffset => _gpuVendor.Value == GpuVendor.Nvidia; public static int MaximumComputeSharedMemorySize => _maximumComputeSharedMemorySize.Value; public static int StorageBufferOffsetAlignment => _storageBufferOffsetAlignment.Value; + public static float MaxSupportedAnisotropy => _maxSupportedAnisotropy.Value; + private static bool HasExtension(string name) { int numExtensions = GL.GetInteger(GetPName.NumExtensions); diff --git a/Ryujinx.Graphics.OpenGL/Renderer.cs b/Ryujinx.Graphics.OpenGL/Renderer.cs index cf2adc45..504a947b 100644 --- a/Ryujinx.Graphics.OpenGL/Renderer.cs +++ b/Ryujinx.Graphics.OpenGL/Renderer.cs @@ -67,7 +67,8 @@ namespace Ryujinx.Graphics.OpenGL HwCapabilities.SupportsAstcCompression, HwCapabilities.SupportsNonConstantTextureOffset, HwCapabilities.MaximumComputeSharedMemorySize, - HwCapabilities.StorageBufferOffsetAlignment); + HwCapabilities.StorageBufferOffsetAlignment, + HwCapabilities.MaxSupportedAnisotropy); } public ulong GetCounter(CounterType type) diff --git a/Ryujinx/Config.json b/Ryujinx/Config.json index 80430899..8a365550 100644 --- a/Ryujinx/Config.json +++ b/Ryujinx/Config.json @@ -1,5 +1,6 @@ { - "version": 2, + "version": 4, + "max_anisotropy": -1, "graphics_shaders_dump_path": "", "logging_enable_debug": false, "logging_enable_stub": true, @@ -12,6 +13,7 @@ "enable_file_log": true, "system_language": "AmericanEnglish", "system_region": "USA", + "system_time_zone": "UTC", "docked_mode": false, "enable_discord_integration": true, "enable_vsync": true, diff --git a/Ryujinx/Ui/MainWindow.cs b/Ryujinx/Ui/MainWindow.cs index e6c632d9..16438ecc 100644 --- a/Ryujinx/Ui/MainWindow.cs +++ b/Ryujinx/Ui/MainWindow.cs @@ -308,6 +308,7 @@ namespace Ryujinx.Ui HLE.Switch device = InitializeSwitchInstance(); // TODO: Move this somewhere else + reloadable? + Graphics.Gpu.GraphicsConfig.MaxAnisotropy = ConfigurationState.Instance.Graphics.MaxAnisotropy; Graphics.Gpu.GraphicsConfig.ShadersDumpPath = ConfigurationState.Instance.Graphics.ShadersDumpPath; if (Directory.Exists(path)) diff --git a/Ryujinx/Ui/SwitchSettings.cs b/Ryujinx/Ui/SwitchSettings.cs index 777313a1..8ff40427 100644 --- a/Ryujinx/Ui/SwitchSettings.cs +++ b/Ryujinx/Ui/SwitchSettings.cs @@ -52,6 +52,7 @@ namespace Ryujinx.Ui [GUI] ToggleButton _browseDir; [GUI] ToggleButton _removeDir; [GUI] Entry _graphicsShadersDumpPath; + [GUI] ComboBoxText _anisotropy; [GUI] Image _controller1Image; [GUI] ComboBoxText _controller1Type; @@ -215,6 +216,7 @@ namespace Ryujinx.Ui _systemLanguageSelect.SetActiveId(ConfigurationState.Instance.System.Language.Value.ToString()); _systemRegionSelect .SetActiveId(ConfigurationState.Instance.System.Region.Value.ToString()); _systemTimeZoneSelect.SetActiveId(timeZoneContentManager.SanityCheckDeviceLocationName()); + _anisotropy .SetActiveId(ConfigurationState.Instance.Graphics.MaxAnisotropy.Value.ToString()); _controller1Type .SetActiveId(ConfigurationState.Instance.Hid.ControllerType.Value.ToString()); Controller_Changed(null, null, _controller1Type.ActiveId, _controller1Image); @@ -458,6 +460,7 @@ namespace Ryujinx.Ui ConfigurationState.Instance.System.Language.Value = (Language)Enum.Parse(typeof(Language), _systemLanguageSelect.ActiveId); ConfigurationState.Instance.System.Region.Value = (Configuration.System.Region)Enum.Parse(typeof(Configuration.System.Region), _systemRegionSelect.ActiveId); + ConfigurationState.Instance.Graphics.MaxAnisotropy.Value = float.Parse(_anisotropy.ActiveId); ConfigurationState.Instance.Hid.ControllerType.Value = (ControllerType)Enum.Parse(typeof(ControllerType), _controller1Type.ActiveId); ConfigurationState.Instance.Ui.CustomThemePath.Value = _custThemePath.Buffer.Text; ConfigurationState.Instance.Graphics.ShadersDumpPath.Value = _graphicsShadersDumpPath.Buffer.Text; diff --git a/Ryujinx/Ui/SwitchSettings.glade b/Ryujinx/Ui/SwitchSettings.glade index fc9413ec..7c934639 100644 --- a/Ryujinx/Ui/SwitchSettings.glade +++ b/Ryujinx/Ui/SwitchSettings.glade @@ -177,8 +177,8 @@ <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="position">2</property> <property name="padding">5</property> + <property name="position">2</property> </packing> </child> <child> @@ -247,6 +247,11 @@ </packing> </child> </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> </child> </object> <packing> @@ -1456,6 +1461,52 @@ <property name="expand">False</property> <property name="fill">True</property> <property name="padding">5</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="tooltip_text" translatable="yes">Graphics Shaders Dump Path</property> + <property name="label" translatable="yes">Anisotropic Filtering:</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="padding">5</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkComboBoxText" id="_anisotropy"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="tooltip_text" translatable="yes">Change System TimeZone</property> + <property name="active_id">-1</property> + <items> + <item id="-1" translatable="yes">Auto</item> + <item id="2" translatable="yes">2x</item> + <item id="4" translatable="yes">4x</item> + <item id="8" translatable="yes">8x</item> + <item id="16" translatable="yes">16x</item> + </items> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="padding">5</property> <property name="position">4</property> </packing> </child> |
