diff --git a/src/SharpEmu.GUI/MainWindow.axaml.cs b/src/SharpEmu.GUI/MainWindow.axaml.cs index 8e7432d0..f3bbc567 100644 --- a/src/SharpEmu.GUI/MainWindow.axaml.cs +++ b/src/SharpEmu.GUI/MainWindow.axaml.cs @@ -242,7 +242,9 @@ public partial class MainWindow : Window EnvLogNpToggle.IsCheckedChanged += (_, _) => SetEnvironmentToggle("SHARPEMU_LOG_NP", EnvLogNpToggle.IsChecked == true); EnvGuestImageCpuSyncToggle.IsCheckedChanged += (_, _) => - SetGuestImageCpuSync(EnvGuestImageCpuSyncToggle.IsChecked == true); + SetEnvironmentToggle( + "SHARPEMU_GUEST_IMAGE_CPU_SYNC", + EnvGuestImageCpuSyncToggle.IsChecked == true); LanguageBox.SelectionChanged += (_, _) => OnLanguageChanged(); GameList.AddHandler(ContextRequestedEvent, OnGameContextRequested, RoutingStrategies.Tunnel); @@ -853,10 +855,8 @@ public partial class MainWindow : Window EnvLogDirectMemoryToggle.IsChecked = _settings.EnvironmentToggles.Contains("SHARPEMU_LOG_DIRECT_MEMORY"); EnvLogIoToggle.IsChecked = _settings.EnvironmentToggles.Contains("SHARPEMU_LOG_IO"); EnvLogNpToggle.IsChecked = _settings.EnvironmentToggles.Contains("SHARPEMU_LOG_NP"); - EnvGuestImageCpuSyncToggle.IsChecked = IsEnvironmentEnabled( - _settings.EnvironmentToggles, - "SHARPEMU_GUEST_IMAGE_CPU_SYNC", - defaultValue: true); + EnvGuestImageCpuSyncToggle.IsChecked = + _settings.EnvironmentToggles.Contains("SHARPEMU_GUEST_IMAGE_CPU_SYNC"); WindowModeBox.SelectedIndex = ChoiceIndex(_settings.WindowMode, "Windowed", "Borderless", "Exclusive"); LoadHostDisplayOptions(); ScalingModeBox.SelectedIndex = ChoiceIndex(_settings.ScalingMode, "Fit", "Cover", "Stretch", "Integer"); @@ -1083,40 +1083,6 @@ public partial class MainWindow : Window } } - private void SetGuestImageCpuSync(bool enabled) - { - const string name = "SHARPEMU_GUEST_IMAGE_CPU_SYNC"; - _settings.EnvironmentToggles.RemoveAll(entry => - string.Equals(entry, name, StringComparison.OrdinalIgnoreCase) || - string.Equals(entry, name + "=0", StringComparison.OrdinalIgnoreCase)); - if (!enabled) - { - _settings.EnvironmentToggles.Add(name + "=0"); - } - } - - private static bool IsEnvironmentEnabled( - IEnumerable entries, - string name, - bool defaultValue) - { - foreach (var entry in entries) - { - if (string.Equals(entry, name + "=0", StringComparison.OrdinalIgnoreCase)) - { - return false; - } - - if (string.Equals(entry, name, StringComparison.OrdinalIgnoreCase) || - string.Equals(entry, name + "=1", StringComparison.OrdinalIgnoreCase)) - { - return true; - } - } - - return defaultValue; - } - private string SelectedLogLevel() { return LogLevelBox.SelectedIndex switch diff --git a/src/SharpEmu.GUI/PerGameSettingsDialog.cs b/src/SharpEmu.GUI/PerGameSettingsDialog.cs index 6be8a823..4b81b7db 100644 --- a/src/SharpEmu.GUI/PerGameSettingsDialog.cs +++ b/src/SharpEmu.GUI/PerGameSettingsDialog.cs @@ -241,7 +241,7 @@ public sealed class PerGameSettingsDialog : Window _hdrMode.SelectedItem = ChoiceOrDefault(HdrModes, global.HdrMode, "Auto"); foreach (var (name, box) in _envBoxes) { - box.IsChecked = IsEnvironmentEnabled(global.EnvironmentToggles, name, defaultValue: name == "SHARPEMU_GUEST_IMAGE_CPU_SYNC"); + box.IsChecked = IsEnvironmentEnabled(global.EnvironmentToggles, name, defaultValue: false); } if (existing is null) @@ -295,7 +295,7 @@ public sealed class PerGameSettingsDialog : Window _envRow.IsOverridden = true; foreach (var (name, box) in _envBoxes) { - box.IsChecked = IsEnvironmentEnabled(env, name, defaultValue: name == "SHARPEMU_GUEST_IMAGE_CPU_SYNC"); + box.IsChecked = IsEnvironmentEnabled(env, name, defaultValue: false); } } } @@ -396,17 +396,10 @@ public sealed class PerGameSettingsDialog : Window private List BuildEnvironmentEntries() { - const string guestImageCpuSync = "SHARPEMU_GUEST_IMAGE_CPU_SYNC"; - var entries = _envBoxes - .Where(entry => entry.Name != guestImageCpuSync && entry.Box.IsChecked == true) + return _envBoxes + .Where(entry => entry.Box.IsChecked == true) .Select(entry => entry.Name) .ToList(); - if (_envBoxes.First(entry => entry.Name == guestImageCpuSync).Box.IsChecked != true) - { - entries.Add(guestImageCpuSync + "=0"); - } - - return entries; } private static bool IsEnvironmentEnabled( diff --git a/src/SharpEmu.HLE/GuestImageWriteTracker.cs b/src/SharpEmu.HLE/GuestImageWriteTracker.cs index 638519ed..920f733a 100644 --- a/src/SharpEmu.HLE/GuestImageWriteTracker.cs +++ b/src/SharpEmu.HLE/GuestImageWriteTracker.cs @@ -87,13 +87,10 @@ public static unsafe class GuestImageWriteTracker private static RangeSnapshot _rangeSnapshot = RangeSnapshot.Empty; - // CPU-written guest image synchronization is the compatible default. A few - // titles (currently GTA V) require the lower-overhead watch-only path and - // opt out explicitly with SHARPEMU_GUEST_IMAGE_CPU_SYNC=0. private static readonly bool _enabled = - !string.Equals( + string.Equals( Environment.GetEnvironmentVariable("SHARPEMU_GUEST_IMAGE_CPU_SYNC"), - "0", + "1", StringComparison.Ordinal); private static readonly (bool Wildcard, ulong[] Addresses) _lifetimeTraceFilter = ParseAddressList(Environment.GetEnvironmentVariable("SHARPEMU_TRACE_GUEST_IMAGE_ADDRS"));