aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXpl0itR <xpl0itr@outlook.com>2020-03-30 22:38:52 +0100
committerGitHub <noreply@github.com>2020-03-31 08:38:52 +1100
commit12d49c37d219950ccb22c3979ecb0b34262a7155 (patch)
treeac6e73776a332e833d0f59d1b72f281eaff07098
parent5a52ca5071425e3f9600576679bec609e7cead89 (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.cs7
-rw-r--r--Ryujinx.Common/Configuration/ConfigurationState.cs18
-rw-r--r--Ryujinx.Graphics.GAL/Capabilities.cs12
-rw-r--r--Ryujinx.Graphics.Gpu/GraphicsConfig.cs5
-rw-r--r--Ryujinx.Graphics.Gpu/Image/Sampler.cs8
-rw-r--r--Ryujinx.Graphics.OpenGL/HwCapabilities.cs4
-rw-r--r--Ryujinx.Graphics.OpenGL/Renderer.cs3
-rw-r--r--Ryujinx/Config.json4
-rw-r--r--Ryujinx/Ui/MainWindow.cs1
-rw-r--r--Ryujinx/Ui/SwitchSettings.cs3
-rw-r--r--Ryujinx/Ui/SwitchSettings.glade53
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>