Merge pull request #8819 from liamwhite/cash-money
video_core: add option for pessimistic flushing
This commit is contained in:
		| @@ -195,6 +195,7 @@ void RestoreGlobalState(bool is_powered_on) { | |||||||
|     values.shader_backend.SetGlobal(true); |     values.shader_backend.SetGlobal(true); | ||||||
|     values.use_asynchronous_shaders.SetGlobal(true); |     values.use_asynchronous_shaders.SetGlobal(true); | ||||||
|     values.use_fast_gpu_time.SetGlobal(true); |     values.use_fast_gpu_time.SetGlobal(true); | ||||||
|  |     values.use_pessimistic_flushes.SetGlobal(true); | ||||||
|     values.bg_red.SetGlobal(true); |     values.bg_red.SetGlobal(true); | ||||||
|     values.bg_green.SetGlobal(true); |     values.bg_green.SetGlobal(true); | ||||||
|     values.bg_blue.SetGlobal(true); |     values.bg_blue.SetGlobal(true); | ||||||
|   | |||||||
| @@ -446,6 +446,7 @@ struct Values { | |||||||
|                                                           ShaderBackend::SPIRV, "shader_backend"}; |                                                           ShaderBackend::SPIRV, "shader_backend"}; | ||||||
|     SwitchableSetting<bool> use_asynchronous_shaders{false, "use_asynchronous_shaders"}; |     SwitchableSetting<bool> use_asynchronous_shaders{false, "use_asynchronous_shaders"}; | ||||||
|     SwitchableSetting<bool> use_fast_gpu_time{true, "use_fast_gpu_time"}; |     SwitchableSetting<bool> use_fast_gpu_time{true, "use_fast_gpu_time"}; | ||||||
|  |     SwitchableSetting<bool> use_pessimistic_flushes{false, "use_pessimistic_flushes"}; | ||||||
|  |  | ||||||
|     SwitchableSetting<u8> bg_red{0, "bg_red"}; |     SwitchableSetting<u8> bg_red{0, "bg_red"}; | ||||||
|     SwitchableSetting<u8> bg_green{0, "bg_green"}; |     SwitchableSetting<u8> bg_green{0, "bg_green"}; | ||||||
|   | |||||||
| @@ -12,6 +12,7 @@ | |||||||
| #include "common/common_funcs.h" | #include "common/common_funcs.h" | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "common/div_ceil.h" | #include "common/div_ceil.h" | ||||||
|  | #include "common/settings.h" | ||||||
| #include "core/memory.h" | #include "core/memory.h" | ||||||
|  |  | ||||||
| namespace VideoCommon { | namespace VideoCommon { | ||||||
| @@ -219,7 +220,9 @@ public: | |||||||
|             NotifyRasterizer<false>(word_index, untracked_words[word_index], cached_bits); |             NotifyRasterizer<false>(word_index, untracked_words[word_index], cached_bits); | ||||||
|             untracked_words[word_index] |= cached_bits; |             untracked_words[word_index] |= cached_bits; | ||||||
|             cpu_words[word_index] |= cached_bits; |             cpu_words[word_index] |= cached_bits; | ||||||
|             cached_words[word_index] = 0; |             if (!Settings::values.use_pessimistic_flushes) { | ||||||
|  |                 cached_words[word_index] = 0; | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -684,6 +684,7 @@ void Config::ReadRendererValues() { | |||||||
|     ReadGlobalSetting(Settings::values.shader_backend); |     ReadGlobalSetting(Settings::values.shader_backend); | ||||||
|     ReadGlobalSetting(Settings::values.use_asynchronous_shaders); |     ReadGlobalSetting(Settings::values.use_asynchronous_shaders); | ||||||
|     ReadGlobalSetting(Settings::values.use_fast_gpu_time); |     ReadGlobalSetting(Settings::values.use_fast_gpu_time); | ||||||
|  |     ReadGlobalSetting(Settings::values.use_pessimistic_flushes); | ||||||
|     ReadGlobalSetting(Settings::values.bg_red); |     ReadGlobalSetting(Settings::values.bg_red); | ||||||
|     ReadGlobalSetting(Settings::values.bg_green); |     ReadGlobalSetting(Settings::values.bg_green); | ||||||
|     ReadGlobalSetting(Settings::values.bg_blue); |     ReadGlobalSetting(Settings::values.bg_blue); | ||||||
| @@ -1300,6 +1301,7 @@ void Config::SaveRendererValues() { | |||||||
|                  Settings::values.shader_backend.UsingGlobal()); |                  Settings::values.shader_backend.UsingGlobal()); | ||||||
|     WriteGlobalSetting(Settings::values.use_asynchronous_shaders); |     WriteGlobalSetting(Settings::values.use_asynchronous_shaders); | ||||||
|     WriteGlobalSetting(Settings::values.use_fast_gpu_time); |     WriteGlobalSetting(Settings::values.use_fast_gpu_time); | ||||||
|  |     WriteGlobalSetting(Settings::values.use_pessimistic_flushes); | ||||||
|     WriteGlobalSetting(Settings::values.bg_red); |     WriteGlobalSetting(Settings::values.bg_red); | ||||||
|     WriteGlobalSetting(Settings::values.bg_green); |     WriteGlobalSetting(Settings::values.bg_green); | ||||||
|     WriteGlobalSetting(Settings::values.bg_blue); |     WriteGlobalSetting(Settings::values.bg_blue); | ||||||
|   | |||||||
| @@ -28,6 +28,7 @@ void ConfigureGraphicsAdvanced::SetConfiguration() { | |||||||
|     ui->use_vsync->setChecked(Settings::values.use_vsync.GetValue()); |     ui->use_vsync->setChecked(Settings::values.use_vsync.GetValue()); | ||||||
|     ui->use_asynchronous_shaders->setChecked(Settings::values.use_asynchronous_shaders.GetValue()); |     ui->use_asynchronous_shaders->setChecked(Settings::values.use_asynchronous_shaders.GetValue()); | ||||||
|     ui->use_fast_gpu_time->setChecked(Settings::values.use_fast_gpu_time.GetValue()); |     ui->use_fast_gpu_time->setChecked(Settings::values.use_fast_gpu_time.GetValue()); | ||||||
|  |     ui->use_pessimistic_flushes->setChecked(Settings::values.use_pessimistic_flushes.GetValue()); | ||||||
|  |  | ||||||
|     if (Settings::IsConfiguringGlobal()) { |     if (Settings::IsConfiguringGlobal()) { | ||||||
|         ui->gpu_accuracy->setCurrentIndex( |         ui->gpu_accuracy->setCurrentIndex( | ||||||
| @@ -55,6 +56,8 @@ void ConfigureGraphicsAdvanced::ApplyConfiguration() { | |||||||
|                                              use_asynchronous_shaders); |                                              use_asynchronous_shaders); | ||||||
|     ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_fast_gpu_time, |     ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_fast_gpu_time, | ||||||
|                                              ui->use_fast_gpu_time, use_fast_gpu_time); |                                              ui->use_fast_gpu_time, use_fast_gpu_time); | ||||||
|  |     ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_pessimistic_flushes, | ||||||
|  |                                              ui->use_pessimistic_flushes, use_pessimistic_flushes); | ||||||
| } | } | ||||||
|  |  | ||||||
| void ConfigureGraphicsAdvanced::changeEvent(QEvent* event) { | void ConfigureGraphicsAdvanced::changeEvent(QEvent* event) { | ||||||
| @@ -77,6 +80,8 @@ void ConfigureGraphicsAdvanced::SetupPerGameUI() { | |||||||
|         ui->use_asynchronous_shaders->setEnabled( |         ui->use_asynchronous_shaders->setEnabled( | ||||||
|             Settings::values.use_asynchronous_shaders.UsingGlobal()); |             Settings::values.use_asynchronous_shaders.UsingGlobal()); | ||||||
|         ui->use_fast_gpu_time->setEnabled(Settings::values.use_fast_gpu_time.UsingGlobal()); |         ui->use_fast_gpu_time->setEnabled(Settings::values.use_fast_gpu_time.UsingGlobal()); | ||||||
|  |         ui->use_pessimistic_flushes->setEnabled( | ||||||
|  |             Settings::values.use_pessimistic_flushes.UsingGlobal()); | ||||||
|         ui->anisotropic_filtering_combobox->setEnabled( |         ui->anisotropic_filtering_combobox->setEnabled( | ||||||
|             Settings::values.max_anisotropy.UsingGlobal()); |             Settings::values.max_anisotropy.UsingGlobal()); | ||||||
|  |  | ||||||
| @@ -89,6 +94,9 @@ void ConfigureGraphicsAdvanced::SetupPerGameUI() { | |||||||
|                                             use_asynchronous_shaders); |                                             use_asynchronous_shaders); | ||||||
|     ConfigurationShared::SetColoredTristate(ui->use_fast_gpu_time, |     ConfigurationShared::SetColoredTristate(ui->use_fast_gpu_time, | ||||||
|                                             Settings::values.use_fast_gpu_time, use_fast_gpu_time); |                                             Settings::values.use_fast_gpu_time, use_fast_gpu_time); | ||||||
|  |     ConfigurationShared::SetColoredTristate(ui->use_pessimistic_flushes, | ||||||
|  |                                             Settings::values.use_pessimistic_flushes, | ||||||
|  |                                             use_pessimistic_flushes); | ||||||
|     ConfigurationShared::SetColoredComboBox( |     ConfigurationShared::SetColoredComboBox( | ||||||
|         ui->gpu_accuracy, ui->label_gpu_accuracy, |         ui->gpu_accuracy, ui->label_gpu_accuracy, | ||||||
|         static_cast<int>(Settings::values.gpu_accuracy.GetValue(true))); |         static_cast<int>(Settings::values.gpu_accuracy.GetValue(true))); | ||||||
|   | |||||||
| @@ -39,6 +39,7 @@ private: | |||||||
|     ConfigurationShared::CheckState use_vsync; |     ConfigurationShared::CheckState use_vsync; | ||||||
|     ConfigurationShared::CheckState use_asynchronous_shaders; |     ConfigurationShared::CheckState use_asynchronous_shaders; | ||||||
|     ConfigurationShared::CheckState use_fast_gpu_time; |     ConfigurationShared::CheckState use_fast_gpu_time; | ||||||
|  |     ConfigurationShared::CheckState use_pessimistic_flushes; | ||||||
|  |  | ||||||
|     const Core::System& system; |     const Core::System& system; | ||||||
| }; | }; | ||||||
|   | |||||||
| @@ -99,6 +99,16 @@ | |||||||
|           </property> |           </property> | ||||||
|          </widget> |          </widget> | ||||||
|         </item> |         </item> | ||||||
|  |         <item> | ||||||
|  |          <widget class="QCheckBox" name="use_pessimistic_flushes"> | ||||||
|  |           <property name="toolTip"> | ||||||
|  |             <string>Enables pessimistic buffer flushes. This option will force unmodified buffers to be flushed, which can cost performance.</string> | ||||||
|  |           </property> | ||||||
|  |           <property name="text"> | ||||||
|  |            <string>Use pessimistic buffer flushes (Hack)</string> | ||||||
|  |           </property> | ||||||
|  |          </widget> | ||||||
|  |         </item> | ||||||
|         <item> |         <item> | ||||||
|          <widget class="QWidget" name="af_layout" native="true"> |          <widget class="QWidget" name="af_layout" native="true"> | ||||||
|           <layout class="QHBoxLayout" name="horizontalLayout_1"> |           <layout class="QHBoxLayout" name="horizontalLayout_1"> | ||||||
|   | |||||||
| @@ -314,6 +314,7 @@ void Config::ReadValues() { | |||||||
|     ReadSetting("Renderer", Settings::values.nvdec_emulation); |     ReadSetting("Renderer", Settings::values.nvdec_emulation); | ||||||
|     ReadSetting("Renderer", Settings::values.accelerate_astc); |     ReadSetting("Renderer", Settings::values.accelerate_astc); | ||||||
|     ReadSetting("Renderer", Settings::values.use_fast_gpu_time); |     ReadSetting("Renderer", Settings::values.use_fast_gpu_time); | ||||||
|  |     ReadSetting("Renderer", Settings::values.use_pessimistic_flushes); | ||||||
|  |  | ||||||
|     ReadSetting("Renderer", Settings::values.bg_red); |     ReadSetting("Renderer", Settings::values.bg_red); | ||||||
|     ReadSetting("Renderer", Settings::values.bg_green); |     ReadSetting("Renderer", Settings::values.bg_green); | ||||||
|   | |||||||
| @@ -319,6 +319,10 @@ use_asynchronous_gpu_emulation = | |||||||
| # 0: Off, 1 (default): On | # 0: Off, 1 (default): On | ||||||
| use_fast_gpu_time = | use_fast_gpu_time = | ||||||
|  |  | ||||||
|  | # Force unmodified buffers to be flushed, which can cost performance. | ||||||
|  | # 0: Off (default), 1: On | ||||||
|  | use_pessimistic_flushes = | ||||||
|  |  | ||||||
| # Whether to use garbage collection or not for GPU caches. | # Whether to use garbage collection or not for GPU caches. | ||||||
| # 0 (default): Off, 1: On | # 0 (default): Off, 1: On | ||||||
| use_caches_gc = | use_caches_gc = | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user