diff options
| author | LC <mathew1800@gmail.com> | 2021-03-28 09:29:08 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-03-28 09:29:08 -0400 |
| commit | 7a16231e98687457afedaa2b848e95e020a148c7 (patch) | |
| tree | b6a01d3ccea975de4fa485021554787166623d2c /Source/Android/app/src/main/java | |
| parent | 18e7009db2f8e6173f68d3c64253d8fdfcc59058 (diff) | |
| parent | ed5e61a250c4e41636d578f56ff6a0a5fc164003 (diff) | |
Merge pull request #9614 from JosJuice/okay-fine-i-give-in
Android: Add "Synchronize GPU Thread" setting (SyncOnSkipIdle/SyncGPU)
Diffstat (limited to 'Source/Android/app/src/main/java')
2 files changed, 70 insertions, 0 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.java index d4bb8accce..4d26c39aa8 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.java @@ -11,6 +11,7 @@ public enum BooleanSetting implements AbstractBooleanSetting MAIN_DSP_HLE(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "DSPHLE", true), MAIN_FASTMEM(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "Fastmem", true), MAIN_CPU_THREAD(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "CPUThread", true), + MAIN_SYNC_ON_SKIP_IDLE(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "SyncOnSkipIdle", true), MAIN_OVERRIDE_REGION_SETTINGS(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "OverrideRegionSettings", false), MAIN_AUDIO_STRETCH(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "AudioStretch", false), @@ -19,6 +20,7 @@ public enum BooleanSetting implements AbstractBooleanSetting "WiimoteContinuousScanning", false), MAIN_WIIMOTE_ENABLE_SPEAKER(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "WiimoteEnableSpeaker", false), + MAIN_SYNC_GPU(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "SyncGPU", false), MAIN_OVERCLOCK_ENABLE(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "OverclockEnable", false), MAIN_AUTO_DISC_CHANGE(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "AutoDiscChange", false), MAIN_ALLOW_SD_WRITES(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "WiiSDCardAllowWrites", diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java index 3ff8e963c3..bbfccfd2e8 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java @@ -434,6 +434,71 @@ public final class SettingsFragmentPresenter private void addAdvancedSettings(ArrayList<SettingsItem> sl) { + final int SYNC_GPU_NEVER = 0; + final int SYNC_GPU_ON_IDLE_SKIP = 1; + final int SYNC_GPU_ALWAYS = 2; + + AbstractIntSetting synchronizeGpuThread = new AbstractIntSetting() + { + @Override + public int getInt(Settings settings) + { + if (BooleanSetting.MAIN_SYNC_GPU.getBoolean(settings)) + { + return SYNC_GPU_ALWAYS; + } + else + { + boolean syncOnSkipIdle = BooleanSetting.MAIN_SYNC_ON_SKIP_IDLE.getBoolean(settings); + return syncOnSkipIdle ? SYNC_GPU_ON_IDLE_SKIP : SYNC_GPU_NEVER; + } + } + + @Override + public void setInt(Settings settings, int newValue) + { + switch (newValue) + { + case SYNC_GPU_NEVER: + BooleanSetting.MAIN_SYNC_ON_SKIP_IDLE.setBoolean(settings, false); + BooleanSetting.MAIN_SYNC_GPU.setBoolean(settings, false); + break; + + case SYNC_GPU_ON_IDLE_SKIP: + BooleanSetting.MAIN_SYNC_ON_SKIP_IDLE.setBoolean(settings, true); + BooleanSetting.MAIN_SYNC_GPU.setBoolean(settings, false); + break; + + case SYNC_GPU_ALWAYS: + BooleanSetting.MAIN_SYNC_ON_SKIP_IDLE.setBoolean(settings, true); + BooleanSetting.MAIN_SYNC_GPU.setBoolean(settings, true); + break; + } + } + + @Override + public boolean isOverridden(Settings settings) + { + return BooleanSetting.MAIN_SYNC_ON_SKIP_IDLE.isOverridden(settings) || + BooleanSetting.MAIN_SYNC_GPU.isOverridden(settings); + } + + @Override + public boolean isRuntimeEditable() + { + return BooleanSetting.MAIN_SYNC_ON_SKIP_IDLE.isRuntimeEditable() && + BooleanSetting.MAIN_SYNC_GPU.isRuntimeEditable(); + } + + @Override + public boolean delete(Settings settings) + { + // Not short circuiting + return BooleanSetting.MAIN_SYNC_ON_SKIP_IDLE.delete(settings) & + BooleanSetting.MAIN_SYNC_GPU.delete(settings); + } + }; + // TODO: Having different emuCoresEntries/emuCoresValues for each architecture is annoying. // The proper solution would be to have one set of entries and one set of values // and exclude the values that aren't present in PowerPC::AvailableCPUCores(). @@ -461,6 +526,9 @@ public final class SettingsFragmentPresenter R.string.overclock_enable_description)); sl.add(new PercentSliderSetting(FloatSetting.MAIN_OVERCLOCK, R.string.overclock_title, R.string.overclock_title_description, 0, 400, "%")); + sl.add(new SingleChoiceSetting(synchronizeGpuThread, R.string.synchronize_gpu_thread, + R.string.synchronize_gpu_thread_description, R.array.synchronizeGpuThreadEntries, + R.array.synchronizeGpuThreadValues)); } private void addGcPadSettings(ArrayList<SettingsItem> sl) |
