forked from Mirror/Ryujinx
Implement color space passthrough option (#5531)
Co-authored-by: jcm <butt@butts.com>
This commit is contained in:
parent
42750a74f8
commit
773e239db7
13 changed files with 97 additions and 13 deletions
|
@ -14,6 +14,13 @@ tab_width = 4
|
||||||
end_of_line = lf
|
end_of_line = lf
|
||||||
insert_final_newline = true
|
insert_final_newline = true
|
||||||
|
|
||||||
|
# JSON files
|
||||||
|
[*.json]
|
||||||
|
|
||||||
|
# Indentation and spacing
|
||||||
|
indent_size = 2
|
||||||
|
tab_width = 2
|
||||||
|
|
||||||
# C# files
|
# C# files
|
||||||
[*.cs]
|
[*.cs]
|
||||||
|
|
||||||
|
|
|
@ -186,6 +186,7 @@ namespace Ryujinx.Ava
|
||||||
ConfigurationState.Instance.Graphics.AntiAliasing.Event += UpdateAntiAliasing;
|
ConfigurationState.Instance.Graphics.AntiAliasing.Event += UpdateAntiAliasing;
|
||||||
ConfigurationState.Instance.Graphics.ScalingFilter.Event += UpdateScalingFilter;
|
ConfigurationState.Instance.Graphics.ScalingFilter.Event += UpdateScalingFilter;
|
||||||
ConfigurationState.Instance.Graphics.ScalingFilterLevel.Event += UpdateScalingFilterLevel;
|
ConfigurationState.Instance.Graphics.ScalingFilterLevel.Event += UpdateScalingFilterLevel;
|
||||||
|
ConfigurationState.Instance.Graphics.EnableColorSpacePassthrough.Event += UpdateColorSpacePassthrough;
|
||||||
|
|
||||||
ConfigurationState.Instance.Multiplayer.LanInterfaceId.Event += UpdateLanInterfaceIdState;
|
ConfigurationState.Instance.Multiplayer.LanInterfaceId.Event += UpdateLanInterfaceIdState;
|
||||||
|
|
||||||
|
@ -229,6 +230,11 @@ namespace Ryujinx.Ava
|
||||||
_renderer.Window?.SetScalingFilterLevel(ConfigurationState.Instance.Graphics.ScalingFilterLevel.Value);
|
_renderer.Window?.SetScalingFilterLevel(ConfigurationState.Instance.Graphics.ScalingFilterLevel.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void UpdateColorSpacePassthrough(object sender, ReactiveEventArgs<bool> e)
|
||||||
|
{
|
||||||
|
_renderer.Window?.SetColorSpacePassthrough((bool)ConfigurationState.Instance.Graphics.EnableColorSpacePassthrough.Value);
|
||||||
|
}
|
||||||
|
|
||||||
private void ShowCursor()
|
private void ShowCursor()
|
||||||
{
|
{
|
||||||
Dispatcher.UIThread.Post(() =>
|
Dispatcher.UIThread.Post(() =>
|
||||||
|
@ -461,6 +467,7 @@ namespace Ryujinx.Ava
|
||||||
ConfigurationState.Instance.Graphics.ScalingFilter.Event -= UpdateScalingFilter;
|
ConfigurationState.Instance.Graphics.ScalingFilter.Event -= UpdateScalingFilter;
|
||||||
ConfigurationState.Instance.Graphics.ScalingFilterLevel.Event -= UpdateScalingFilterLevel;
|
ConfigurationState.Instance.Graphics.ScalingFilterLevel.Event -= UpdateScalingFilterLevel;
|
||||||
ConfigurationState.Instance.Graphics.AntiAliasing.Event -= UpdateAntiAliasing;
|
ConfigurationState.Instance.Graphics.AntiAliasing.Event -= UpdateAntiAliasing;
|
||||||
|
ConfigurationState.Instance.Graphics.EnableColorSpacePassthrough.Event -= UpdateColorSpacePassthrough;
|
||||||
|
|
||||||
_topLevel.PointerMoved -= TopLevel_PointerEnterOrMoved;
|
_topLevel.PointerMoved -= TopLevel_PointerEnterOrMoved;
|
||||||
_topLevel.PointerEnter -= TopLevel_PointerEnterOrMoved;
|
_topLevel.PointerEnter -= TopLevel_PointerEnterOrMoved;
|
||||||
|
@ -887,6 +894,7 @@ namespace Ryujinx.Ava
|
||||||
_renderer?.Window?.SetAntiAliasing((Graphics.GAL.AntiAliasing)ConfigurationState.Instance.Graphics.AntiAliasing.Value);
|
_renderer?.Window?.SetAntiAliasing((Graphics.GAL.AntiAliasing)ConfigurationState.Instance.Graphics.AntiAliasing.Value);
|
||||||
_renderer?.Window?.SetScalingFilter((Graphics.GAL.ScalingFilter)ConfigurationState.Instance.Graphics.ScalingFilter.Value);
|
_renderer?.Window?.SetScalingFilter((Graphics.GAL.ScalingFilter)ConfigurationState.Instance.Graphics.ScalingFilter.Value);
|
||||||
_renderer?.Window?.SetScalingFilterLevel(ConfigurationState.Instance.Graphics.ScalingFilterLevel.Value);
|
_renderer?.Window?.SetScalingFilterLevel(ConfigurationState.Instance.Graphics.ScalingFilterLevel.Value);
|
||||||
|
_renderer?.Window?.SetColorSpacePassthrough(ConfigurationState.Instance.Graphics.EnableColorSpacePassthrough.Value);
|
||||||
|
|
||||||
Width = (int)RendererHost.Bounds.Width;
|
Width = (int)RendererHost.Bounds.Width;
|
||||||
Height = (int)RendererHost.Bounds.Height;
|
Height = (int)RendererHost.Bounds.Height;
|
||||||
|
|
|
@ -620,6 +620,8 @@
|
||||||
"SettingsTabHotkeysVolumeDownHotkey": "Decrease Volume:",
|
"SettingsTabHotkeysVolumeDownHotkey": "Decrease Volume:",
|
||||||
"SettingsEnableMacroHLE": "Enable Macro HLE",
|
"SettingsEnableMacroHLE": "Enable Macro HLE",
|
||||||
"SettingsEnableMacroHLETooltip": "High-level emulation of GPU Macro code.\n\nImproves performance, but may cause graphical glitches in some games.\n\nLeave ON if unsure.",
|
"SettingsEnableMacroHLETooltip": "High-level emulation of GPU Macro code.\n\nImproves performance, but may cause graphical glitches in some games.\n\nLeave ON if unsure.",
|
||||||
|
"SettingsEnableColorSpacePassthrough": "Color Space Passthrough",
|
||||||
|
"SettingsEnableColorSpacePassthroughTooltip": "Directs the Vulkan backend to pass through color information without specifying a color space. For users with wide gamut displays, this may result in more vibrant colors, at the cost of color correctness.",
|
||||||
"VolumeShort": "Vol",
|
"VolumeShort": "Vol",
|
||||||
"UserProfilesManageSaves": "Manage Saves",
|
"UserProfilesManageSaves": "Manage Saves",
|
||||||
"DeleteUserSave": "Do you want to delete user save for this game?",
|
"DeleteUserSave": "Do you want to delete user save for this game?",
|
||||||
|
|
|
@ -145,6 +145,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||||
public bool EnableShaderCache { get; set; }
|
public bool EnableShaderCache { get; set; }
|
||||||
public bool EnableTextureRecompression { get; set; }
|
public bool EnableTextureRecompression { get; set; }
|
||||||
public bool EnableMacroHLE { get; set; }
|
public bool EnableMacroHLE { get; set; }
|
||||||
|
public bool EnableColorSpacePassthrough { get; set; }
|
||||||
public bool EnableFileLog { get; set; }
|
public bool EnableFileLog { get; set; }
|
||||||
public bool EnableStub { get; set; }
|
public bool EnableStub { get; set; }
|
||||||
public bool EnableInfo { get; set; }
|
public bool EnableInfo { get; set; }
|
||||||
|
@ -419,6 +420,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||||
EnableShaderCache = config.Graphics.EnableShaderCache;
|
EnableShaderCache = config.Graphics.EnableShaderCache;
|
||||||
EnableTextureRecompression = config.Graphics.EnableTextureRecompression;
|
EnableTextureRecompression = config.Graphics.EnableTextureRecompression;
|
||||||
EnableMacroHLE = config.Graphics.EnableMacroHLE;
|
EnableMacroHLE = config.Graphics.EnableMacroHLE;
|
||||||
|
EnableColorSpacePassthrough = config.Graphics.EnableColorSpacePassthrough;
|
||||||
ResolutionScale = config.Graphics.ResScale == -1 ? 4 : config.Graphics.ResScale - 1;
|
ResolutionScale = config.Graphics.ResScale == -1 ? 4 : config.Graphics.ResScale - 1;
|
||||||
CustomResolutionScale = config.Graphics.ResScaleCustom;
|
CustomResolutionScale = config.Graphics.ResScaleCustom;
|
||||||
MaxAnisotropy = config.Graphics.MaxAnisotropy == -1 ? 0 : (int)(MathF.Log2(config.Graphics.MaxAnisotropy));
|
MaxAnisotropy = config.Graphics.MaxAnisotropy == -1 ? 0 : (int)(MathF.Log2(config.Graphics.MaxAnisotropy));
|
||||||
|
@ -506,6 +508,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||||
config.Graphics.EnableShaderCache.Value = EnableShaderCache;
|
config.Graphics.EnableShaderCache.Value = EnableShaderCache;
|
||||||
config.Graphics.EnableTextureRecompression.Value = EnableTextureRecompression;
|
config.Graphics.EnableTextureRecompression.Value = EnableTextureRecompression;
|
||||||
config.Graphics.EnableMacroHLE.Value = EnableMacroHLE;
|
config.Graphics.EnableMacroHLE.Value = EnableMacroHLE;
|
||||||
|
config.Graphics.EnableColorSpacePassthrough.Value = EnableColorSpacePassthrough;
|
||||||
config.Graphics.ResScale.Value = ResolutionScale == 4 ? -1 : ResolutionScale + 1;
|
config.Graphics.ResScale.Value = ResolutionScale == 4 ? -1 : ResolutionScale + 1;
|
||||||
config.Graphics.ResScaleCustom.Value = CustomResolutionScale;
|
config.Graphics.ResScaleCustom.Value = CustomResolutionScale;
|
||||||
config.Graphics.MaxAnisotropy.Value = MaxAnisotropy == 0 ? -1 : MathF.Pow(2, MaxAnisotropy);
|
config.Graphics.MaxAnisotropy.Value = MaxAnisotropy == 0 ? -1 : MathF.Pow(2, MaxAnisotropy);
|
||||||
|
|
|
@ -73,6 +73,10 @@
|
||||||
ToolTip.Tip="{locale:Locale SettingsEnableMacroHLETooltip}">
|
ToolTip.Tip="{locale:Locale SettingsEnableMacroHLETooltip}">
|
||||||
<TextBlock Text="{locale:Locale SettingsEnableMacroHLE}" />
|
<TextBlock Text="{locale:Locale SettingsEnableMacroHLE}" />
|
||||||
</CheckBox>
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding EnableColorSpacePassthrough}"
|
||||||
|
ToolTip.Tip="{locale:Locale SettingsEnableColorSpacePassthroughTooltip}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsEnableColorSpacePassthrough}" />
|
||||||
|
</CheckBox>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<TextBlock VerticalAlignment="Center"
|
<TextBlock VerticalAlignment="Center"
|
||||||
|
|
|
@ -13,5 +13,6 @@ namespace Ryujinx.Graphics.GAL
|
||||||
void SetAntiAliasing(AntiAliasing antialiasing);
|
void SetAntiAliasing(AntiAliasing antialiasing);
|
||||||
void SetScalingFilter(ScalingFilter type);
|
void SetScalingFilter(ScalingFilter type);
|
||||||
void SetScalingFilterLevel(float level);
|
void SetScalingFilterLevel(float level);
|
||||||
|
void SetColorSpacePassthrough(bool colorSpacePassThroughEnabled);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,5 +38,7 @@ namespace Ryujinx.Graphics.GAL.Multithreading
|
||||||
public void SetScalingFilter(ScalingFilter type) { }
|
public void SetScalingFilter(ScalingFilter type) { }
|
||||||
|
|
||||||
public void SetScalingFilterLevel(float level) { }
|
public void SetScalingFilterLevel(float level) { }
|
||||||
|
|
||||||
|
public void SetColorSpacePassthrough(bool colorSpacePassthroughEnabled) { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,6 +67,11 @@ namespace Ryujinx.Graphics.Gpu
|
||||||
/// Enables or disables recompression of compressed textures that are not natively supported by the host.
|
/// Enables or disables recompression of compressed textures that are not natively supported by the host.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static bool EnableTextureRecompression = false;
|
public static bool EnableTextureRecompression = false;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Enables or disables color space passthrough, if available.
|
||||||
|
/// </summary>
|
||||||
|
public static bool EnableColorSpacePassthrough = false;
|
||||||
}
|
}
|
||||||
#pragma warning restore CA2211
|
#pragma warning restore CA2211
|
||||||
}
|
}
|
||||||
|
|
|
@ -307,6 +307,8 @@ namespace Ryujinx.Graphics.OpenGL
|
||||||
_updateScalingFilter = true;
|
_updateScalingFilter = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetColorSpacePassthrough(bool colorSpacePassthroughEnabled) { }
|
||||||
|
|
||||||
private void UpdateEffect()
|
private void UpdateEffect()
|
||||||
{
|
{
|
||||||
if (_updateEffect)
|
if (_updateEffect)
|
||||||
|
|
|
@ -28,7 +28,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
private int _width;
|
private int _width;
|
||||||
private int _height;
|
private int _height;
|
||||||
private bool _vsyncEnabled;
|
private bool _vsyncEnabled;
|
||||||
private bool _vsyncModeChanged;
|
private bool _swapchainIsDirty;
|
||||||
private VkFormat _format;
|
private VkFormat _format;
|
||||||
private AntiAliasing _currentAntiAliasing;
|
private AntiAliasing _currentAntiAliasing;
|
||||||
private bool _updateEffect;
|
private bool _updateEffect;
|
||||||
|
@ -38,6 +38,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
private float _scalingFilterLevel;
|
private float _scalingFilterLevel;
|
||||||
private bool _updateScalingFilter;
|
private bool _updateScalingFilter;
|
||||||
private ScalingFilter _currentScalingFilter;
|
private ScalingFilter _currentScalingFilter;
|
||||||
|
private bool _colorSpacePassthroughEnabled;
|
||||||
|
|
||||||
public unsafe Window(VulkanRenderer gd, SurfaceKHR surface, PhysicalDevice physicalDevice, Device device)
|
public unsafe Window(VulkanRenderer gd, SurfaceKHR surface, PhysicalDevice physicalDevice, Device device)
|
||||||
{
|
{
|
||||||
|
@ -60,7 +61,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
private void RecreateSwapchain()
|
private void RecreateSwapchain()
|
||||||
{
|
{
|
||||||
var oldSwapchain = _swapchain;
|
var oldSwapchain = _swapchain;
|
||||||
_vsyncModeChanged = false;
|
_swapchainIsDirty = false;
|
||||||
|
|
||||||
for (int i = 0; i < _swapchainImageViews.Length; i++)
|
for (int i = 0; i < _swapchainImageViews.Length; i++)
|
||||||
{
|
{
|
||||||
|
@ -106,7 +107,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
imageCount = capabilities.MaxImageCount;
|
imageCount = capabilities.MaxImageCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
var surfaceFormat = ChooseSwapSurfaceFormat(surfaceFormats);
|
var surfaceFormat = ChooseSwapSurfaceFormat(surfaceFormats, _colorSpacePassthroughEnabled);
|
||||||
|
|
||||||
var extent = ChooseSwapExtent(capabilities);
|
var extent = ChooseSwapExtent(capabilities);
|
||||||
|
|
||||||
|
@ -178,22 +179,40 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
return new Auto<DisposableImageView>(new DisposableImageView(_gd.Api, _device, imageView));
|
return new Auto<DisposableImageView>(new DisposableImageView(_gd.Api, _device, imageView));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static SurfaceFormatKHR ChooseSwapSurfaceFormat(SurfaceFormatKHR[] availableFormats)
|
private static SurfaceFormatKHR ChooseSwapSurfaceFormat(SurfaceFormatKHR[] availableFormats, bool colorSpacePassthroughEnabled)
|
||||||
{
|
{
|
||||||
if (availableFormats.Length == 1 && availableFormats[0].Format == VkFormat.Undefined)
|
if (availableFormats.Length == 1 && availableFormats[0].Format == VkFormat.Undefined)
|
||||||
{
|
{
|
||||||
return new SurfaceFormatKHR(VkFormat.B8G8R8A8Unorm, ColorSpaceKHR.PaceSrgbNonlinearKhr);
|
return new SurfaceFormatKHR(VkFormat.B8G8R8A8Unorm, ColorSpaceKHR.PaceSrgbNonlinearKhr);
|
||||||
}
|
}
|
||||||
|
var formatToReturn = availableFormats[0];
|
||||||
|
if (colorSpacePassthroughEnabled)
|
||||||
|
{
|
||||||
|
foreach (var format in availableFormats)
|
||||||
|
{
|
||||||
|
if (format.Format == VkFormat.B8G8R8A8Unorm && format.ColorSpace == ColorSpaceKHR.SpacePassThroughExt)
|
||||||
|
{
|
||||||
|
formatToReturn = format;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (format.Format == VkFormat.B8G8R8A8Unorm && format.ColorSpace == ColorSpaceKHR.PaceSrgbNonlinearKhr)
|
||||||
|
{
|
||||||
|
formatToReturn = format;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
foreach (var format in availableFormats)
|
foreach (var format in availableFormats)
|
||||||
{
|
{
|
||||||
if (format.Format == VkFormat.B8G8R8A8Unorm && format.ColorSpace == ColorSpaceKHR.PaceSrgbNonlinearKhr)
|
if (format.Format == VkFormat.B8G8R8A8Unorm && format.ColorSpace == ColorSpaceKHR.PaceSrgbNonlinearKhr)
|
||||||
{
|
{
|
||||||
return format;
|
formatToReturn = format;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return availableFormats[0];
|
return formatToReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static CompositeAlphaFlagsKHR ChooseCompositeAlpha(CompositeAlphaFlagsKHR supportedFlags)
|
private static CompositeAlphaFlagsKHR ChooseCompositeAlpha(CompositeAlphaFlagsKHR supportedFlags)
|
||||||
|
@ -259,7 +278,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
|
|
||||||
if (acquireResult == Result.ErrorOutOfDateKhr ||
|
if (acquireResult == Result.ErrorOutOfDateKhr ||
|
||||||
acquireResult == Result.SuboptimalKhr ||
|
acquireResult == Result.SuboptimalKhr ||
|
||||||
_vsyncModeChanged)
|
_swapchainIsDirty)
|
||||||
{
|
{
|
||||||
RecreateSwapchain();
|
RecreateSwapchain();
|
||||||
}
|
}
|
||||||
|
@ -443,6 +462,12 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
_updateScalingFilter = true;
|
_updateScalingFilter = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void SetColorSpacePassthrough(bool colorSpacePassthroughEnabled)
|
||||||
|
{
|
||||||
|
_colorSpacePassthroughEnabled = colorSpacePassthroughEnabled;
|
||||||
|
_swapchainIsDirty = true;
|
||||||
|
}
|
||||||
|
|
||||||
private void UpdateEffect()
|
private void UpdateEffect()
|
||||||
{
|
{
|
||||||
if (_updateEffect)
|
if (_updateEffect)
|
||||||
|
@ -559,7 +584,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
public override void ChangeVSyncMode(bool vsyncEnabled)
|
public override void ChangeVSyncMode(bool vsyncEnabled)
|
||||||
{
|
{
|
||||||
_vsyncEnabled = vsyncEnabled;
|
_vsyncEnabled = vsyncEnabled;
|
||||||
_vsyncModeChanged = true;
|
_swapchainIsDirty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void Dispose(bool disposing)
|
protected virtual void Dispose(bool disposing)
|
||||||
|
|
|
@ -14,5 +14,6 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
public abstract void SetAntiAliasing(AntiAliasing effect);
|
public abstract void SetAntiAliasing(AntiAliasing effect);
|
||||||
public abstract void SetScalingFilter(ScalingFilter scalerType);
|
public abstract void SetScalingFilter(ScalingFilter scalerType);
|
||||||
public abstract void SetScalingFilterLevel(float scale);
|
public abstract void SetScalingFilterLevel(float scale);
|
||||||
|
public abstract void SetColorSpacePassthrough(bool colorSpacePassthroughEnabled);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@ namespace Ryujinx.Ui.Common.Configuration
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The current version of the file format
|
/// The current version of the file format
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const int CurrentVersion = 47;
|
public const int CurrentVersion = 48;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Version of the configuration file format
|
/// Version of the configuration file format
|
||||||
|
@ -186,6 +186,11 @@ namespace Ryujinx.Ui.Common.Configuration
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool EnableMacroHLE { get; set; }
|
public bool EnableMacroHLE { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Enables or disables color space passthrough, if available.
|
||||||
|
/// </summary>
|
||||||
|
public bool EnableColorSpacePassthrough { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Enables or disables profiled translation cache persistency
|
/// Enables or disables profiled translation cache persistency
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -485,6 +485,11 @@ namespace Ryujinx.Ui.Common.Configuration
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public ReactiveObject<bool> EnableMacroHLE { get; private set; }
|
public ReactiveObject<bool> EnableMacroHLE { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Enables or disables color space passthrough, if available.
|
||||||
|
/// </summary>
|
||||||
|
public ReactiveObject<bool> EnableColorSpacePassthrough { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Graphics backend
|
/// Graphics backend
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -535,6 +540,8 @@ namespace Ryujinx.Ui.Common.Configuration
|
||||||
PreferredGpu.Event += static (sender, e) => LogValueChange(e, nameof(PreferredGpu));
|
PreferredGpu.Event += static (sender, e) => LogValueChange(e, nameof(PreferredGpu));
|
||||||
EnableMacroHLE = new ReactiveObject<bool>();
|
EnableMacroHLE = new ReactiveObject<bool>();
|
||||||
EnableMacroHLE.Event += static (sender, e) => LogValueChange(e, nameof(EnableMacroHLE));
|
EnableMacroHLE.Event += static (sender, e) => LogValueChange(e, nameof(EnableMacroHLE));
|
||||||
|
EnableColorSpacePassthrough = new ReactiveObject<bool>();
|
||||||
|
EnableColorSpacePassthrough.Event += static (sender, e) => LogValueChange(e, nameof(EnableColorSpacePassthrough));
|
||||||
AntiAliasing = new ReactiveObject<AntiAliasing>();
|
AntiAliasing = new ReactiveObject<AntiAliasing>();
|
||||||
AntiAliasing.Event += static (sender, e) => LogValueChange(e, nameof(AntiAliasing));
|
AntiAliasing.Event += static (sender, e) => LogValueChange(e, nameof(AntiAliasing));
|
||||||
ScalingFilter = new ReactiveObject<ScalingFilter>();
|
ScalingFilter = new ReactiveObject<ScalingFilter>();
|
||||||
|
@ -667,6 +674,7 @@ namespace Ryujinx.Ui.Common.Configuration
|
||||||
EnableShaderCache = Graphics.EnableShaderCache,
|
EnableShaderCache = Graphics.EnableShaderCache,
|
||||||
EnableTextureRecompression = Graphics.EnableTextureRecompression,
|
EnableTextureRecompression = Graphics.EnableTextureRecompression,
|
||||||
EnableMacroHLE = Graphics.EnableMacroHLE,
|
EnableMacroHLE = Graphics.EnableMacroHLE,
|
||||||
|
EnableColorSpacePassthrough = Graphics.EnableColorSpacePassthrough,
|
||||||
EnablePtc = System.EnablePtc,
|
EnablePtc = System.EnablePtc,
|
||||||
EnableInternetAccess = System.EnableInternetAccess,
|
EnableInternetAccess = System.EnableInternetAccess,
|
||||||
EnableFsIntegrityChecks = System.EnableFsIntegrityChecks,
|
EnableFsIntegrityChecks = System.EnableFsIntegrityChecks,
|
||||||
|
@ -772,6 +780,7 @@ namespace Ryujinx.Ui.Common.Configuration
|
||||||
Graphics.EnableShaderCache.Value = true;
|
Graphics.EnableShaderCache.Value = true;
|
||||||
Graphics.EnableTextureRecompression.Value = false;
|
Graphics.EnableTextureRecompression.Value = false;
|
||||||
Graphics.EnableMacroHLE.Value = true;
|
Graphics.EnableMacroHLE.Value = true;
|
||||||
|
Graphics.EnableColorSpacePassthrough.Value = false;
|
||||||
Graphics.AntiAliasing.Value = AntiAliasing.None;
|
Graphics.AntiAliasing.Value = AntiAliasing.None;
|
||||||
Graphics.ScalingFilter.Value = ScalingFilter.Bilinear;
|
Graphics.ScalingFilter.Value = ScalingFilter.Bilinear;
|
||||||
Graphics.ScalingFilterLevel.Value = 80;
|
Graphics.ScalingFilterLevel.Value = 80;
|
||||||
|
@ -1391,6 +1400,15 @@ namespace Ryujinx.Ui.Common.Configuration
|
||||||
configurationFileUpdated = true;
|
configurationFileUpdated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (configurationFileFormat.Version < 48)
|
||||||
|
{
|
||||||
|
Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 48.");
|
||||||
|
|
||||||
|
configurationFileFormat.EnableColorSpacePassthrough = false;
|
||||||
|
|
||||||
|
configurationFileUpdated = true;
|
||||||
|
}
|
||||||
|
|
||||||
Logger.EnableFileLog.Value = configurationFileFormat.EnableFileLog;
|
Logger.EnableFileLog.Value = configurationFileFormat.EnableFileLog;
|
||||||
Graphics.ResScale.Value = configurationFileFormat.ResScale;
|
Graphics.ResScale.Value = configurationFileFormat.ResScale;
|
||||||
Graphics.ResScaleCustom.Value = configurationFileFormat.ResScaleCustom;
|
Graphics.ResScaleCustom.Value = configurationFileFormat.ResScaleCustom;
|
||||||
|
@ -1426,6 +1444,7 @@ namespace Ryujinx.Ui.Common.Configuration
|
||||||
Graphics.EnableShaderCache.Value = configurationFileFormat.EnableShaderCache;
|
Graphics.EnableShaderCache.Value = configurationFileFormat.EnableShaderCache;
|
||||||
Graphics.EnableTextureRecompression.Value = configurationFileFormat.EnableTextureRecompression;
|
Graphics.EnableTextureRecompression.Value = configurationFileFormat.EnableTextureRecompression;
|
||||||
Graphics.EnableMacroHLE.Value = configurationFileFormat.EnableMacroHLE;
|
Graphics.EnableMacroHLE.Value = configurationFileFormat.EnableMacroHLE;
|
||||||
|
Graphics.EnableColorSpacePassthrough.Value = configurationFileFormat.EnableColorSpacePassthrough;
|
||||||
System.EnablePtc.Value = configurationFileFormat.EnablePtc;
|
System.EnablePtc.Value = configurationFileFormat.EnablePtc;
|
||||||
System.EnableInternetAccess.Value = configurationFileFormat.EnableInternetAccess;
|
System.EnableInternetAccess.Value = configurationFileFormat.EnableInternetAccess;
|
||||||
System.EnableFsIntegrityChecks.Value = configurationFileFormat.EnableFsIntegrityChecks;
|
System.EnableFsIntegrityChecks.Value = configurationFileFormat.EnableFsIntegrityChecks;
|
||||||
|
|
Loading…
Reference in a new issue