mirror of
				https://git.suyu.dev/suyu/suyu.git
				synced 2025-10-30 06:16:40 +08:00 
			
		
		
		
	configuration: Add Paranoid CPU accuracy level
Disables most optimizations for the paranoid.
This commit is contained in:
		
							parent
							
								
									664d8c8732
								
							
						
					
					
						commit
						3c8547160d
					
				| @ -38,6 +38,7 @@ enum class CPUAccuracy : u32 { | |||||||
|     Auto = 0, |     Auto = 0, | ||||||
|     Accurate = 1, |     Accurate = 1, | ||||||
|     Unsafe = 2, |     Unsafe = 2, | ||||||
|  |     Paranoid = 3, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| enum class FullscreenMode : u32 { | enum class FullscreenMode : u32 { | ||||||
| @ -470,7 +471,7 @@ struct Values { | |||||||
| 
 | 
 | ||||||
|     // Cpu
 |     // Cpu
 | ||||||
|     RangedSetting<CPUAccuracy> cpu_accuracy{CPUAccuracy::Auto, CPUAccuracy::Auto, |     RangedSetting<CPUAccuracy> cpu_accuracy{CPUAccuracy::Auto, CPUAccuracy::Auto, | ||||||
|                                             CPUAccuracy::Unsafe, "cpu_accuracy"}; |                                             CPUAccuracy::Paranoid, "cpu_accuracy"}; | ||||||
|     // TODO: remove cpu_accuracy_first_time, migration setting added 8 July 2021
 |     // TODO: remove cpu_accuracy_first_time, migration setting added 8 July 2021
 | ||||||
|     BasicSetting<bool> cpu_accuracy_first_time{true, "cpu_accuracy_first_time"}; |     BasicSetting<bool> cpu_accuracy_first_time{true, "cpu_accuracy_first_time"}; | ||||||
|     BasicSetting<bool> cpu_debug_mode{false, "cpu_debug_mode"}; |     BasicSetting<bool> cpu_debug_mode{false, "cpu_debug_mode"}; | ||||||
|  | |||||||
| @ -186,8 +186,7 @@ std::shared_ptr<Dynarmic::A32::Jit> ARM_Dynarmic_32::MakeJit(Common::PageTable* | |||||||
|         if (!Settings::values.cpuopt_recompile_exclusives) { |         if (!Settings::values.cpuopt_recompile_exclusives) { | ||||||
|             config.recompile_on_exclusive_fastmem_failure = false; |             config.recompile_on_exclusive_fastmem_failure = false; | ||||||
|         } |         } | ||||||
|     } |     } else { | ||||||
| 
 |  | ||||||
|         // Unsafe optimizations
 |         // Unsafe optimizations
 | ||||||
|         if (Settings::values.cpu_accuracy.GetValue() == Settings::CPUAccuracy::Unsafe) { |         if (Settings::values.cpu_accuracy.GetValue() == Settings::CPUAccuracy::Unsafe) { | ||||||
|             config.unsafe_optimizations = true; |             config.unsafe_optimizations = true; | ||||||
| @ -217,6 +216,13 @@ std::shared_ptr<Dynarmic::A32::Jit> ARM_Dynarmic_32::MakeJit(Common::PageTable* | |||||||
|             config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreGlobalMonitor; |             config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreGlobalMonitor; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         // Paranoia mode for debugging optimizations
 | ||||||
|  |         if (Settings::values.cpu_accuracy.GetValue() == Settings::CPUAccuracy::Paranoid) { | ||||||
|  |             config.unsafe_optimizations = false; | ||||||
|  |             config.optimizations = Dynarmic::no_optimizations; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     return std::make_unique<Dynarmic::A32::Jit>(config); |     return std::make_unique<Dynarmic::A32::Jit>(config); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -246,8 +246,7 @@ std::shared_ptr<Dynarmic::A64::Jit> ARM_Dynarmic_64::MakeJit(Common::PageTable* | |||||||
|         if (!Settings::values.cpuopt_recompile_exclusives) { |         if (!Settings::values.cpuopt_recompile_exclusives) { | ||||||
|             config.recompile_on_exclusive_fastmem_failure = false; |             config.recompile_on_exclusive_fastmem_failure = false; | ||||||
|         } |         } | ||||||
|     } |     } else { | ||||||
| 
 |  | ||||||
|         // Unsafe optimizations
 |         // Unsafe optimizations
 | ||||||
|         if (Settings::values.cpu_accuracy.GetValue() == Settings::CPUAccuracy::Unsafe) { |         if (Settings::values.cpu_accuracy.GetValue() == Settings::CPUAccuracy::Unsafe) { | ||||||
|             config.unsafe_optimizations = true; |             config.unsafe_optimizations = true; | ||||||
| @ -277,6 +276,13 @@ std::shared_ptr<Dynarmic::A64::Jit> ARM_Dynarmic_64::MakeJit(Common::PageTable* | |||||||
|             config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreGlobalMonitor; |             config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreGlobalMonitor; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         // Paranoia mode for debugging optimizations
 | ||||||
|  |         if (Settings::values.cpu_accuracy.GetValue() == Settings::CPUAccuracy::Paranoid) { | ||||||
|  |             config.unsafe_optimizations = false; | ||||||
|  |             config.optimizations = Dynarmic::no_optimizations; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     return std::make_shared<Dynarmic::A64::Jit>(config); |     return std::make_shared<Dynarmic::A64::Jit>(config); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -52,6 +52,11 @@ | |||||||
|                <string>Unsafe</string> |                <string>Unsafe</string> | ||||||
|               </property> |               </property> | ||||||
|              </item> |              </item> | ||||||
|  |              <item> | ||||||
|  |               <property name="text"> | ||||||
|  |                <string>Paranoid</string> | ||||||
|  |               </property> | ||||||
|  |              </item> | ||||||
|             </widget> |             </widget> | ||||||
|            </item> |            </item> | ||||||
|           </layout> |           </layout> | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user