mirror of
				https://git.tardis.systems/mirrors/yuzu
				synced 2025-10-31 02:34:11 +01:00 
			
		
		
		
	dynarmic: Add Unsafe_InaccurateNaN optimization
This commit is contained in:
		
							parent
							
								
									1ff341f3dc
								
							
						
					
					
						commit
						57c9da1b39
					
				
							
								
								
									
										2
									
								
								externals/dynarmic
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
								
							
						
						
									
										2
									
								
								externals/dynarmic
									
									
									
									
										vendored
									
									
								
							| @ -1 +1 @@ | ||||
| Subproject commit 4a9a0d07f7376b439430e686721e8176c7b56ce7 | ||||
| Subproject commit 6023bcd8ad8c95bb08edf48cb889bfe99ff86be7 | ||||
| @ -181,6 +181,9 @@ std::shared_ptr<Dynarmic::A32::Jit> ARM_Dynarmic_32::MakeJit(Common::PageTable& | ||||
|         if (Settings::values.cpuopt_unsafe_reduce_fp_error) { | ||||
|             config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_ReducedErrorFP; | ||||
|         } | ||||
|         if (Settings::values.cpuopt_unsafe_inaccurate_nan) { | ||||
|             config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_InaccurateNaN; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     return std::make_unique<Dynarmic::A32::Jit>(config); | ||||
|  | ||||
| @ -212,6 +212,9 @@ std::shared_ptr<Dynarmic::A64::Jit> ARM_Dynarmic_64::MakeJit(Common::PageTable& | ||||
|         if (Settings::values.cpuopt_unsafe_reduce_fp_error) { | ||||
|             config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_ReducedErrorFP; | ||||
|         } | ||||
|         if (Settings::values.cpuopt_unsafe_inaccurate_nan) { | ||||
|             config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_InaccurateNaN; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     return std::make_shared<Dynarmic::A64::Jit>(config); | ||||
|  | ||||
| @ -131,6 +131,7 @@ struct Values { | ||||
| 
 | ||||
|     bool cpuopt_unsafe_unfuse_fma; | ||||
|     bool cpuopt_unsafe_reduce_fp_error; | ||||
|     bool cpuopt_unsafe_inaccurate_nan; | ||||
| 
 | ||||
|     // Renderer
 | ||||
|     Setting<RendererBackend> renderer_backend; | ||||
|  | ||||
| @ -764,6 +764,8 @@ void Config::ReadCpuValues() { | ||||
|             ReadSetting(QStringLiteral("cpuopt_unsafe_unfuse_fma"), true).toBool(); | ||||
|         Settings::values.cpuopt_unsafe_reduce_fp_error = | ||||
|             ReadSetting(QStringLiteral("cpuopt_unsafe_reduce_fp_error"), true).toBool(); | ||||
|         Settings::values.cpuopt_unsafe_inaccurate_nan = | ||||
|             ReadSetting(QStringLiteral("cpuopt_unsafe_inaccurate_nan"), true).toBool(); | ||||
|     } | ||||
| 
 | ||||
|     qt_config->endGroup(); | ||||
| @ -1327,6 +1329,8 @@ void Config::SaveCpuValues() { | ||||
|                      Settings::values.cpuopt_unsafe_unfuse_fma, true); | ||||
|         WriteSetting(QStringLiteral("cpuopt_unsafe_reduce_fp_error"), | ||||
|                      Settings::values.cpuopt_unsafe_reduce_fp_error, true); | ||||
|         WriteSetting(QStringLiteral("cpuopt_unsafe_inaccurate_nan"), | ||||
|                      Settings::values.cpuopt_unsafe_inaccurate_nan, true); | ||||
|     } | ||||
| 
 | ||||
|     qt_config->endGroup(); | ||||
|  | ||||
| @ -36,6 +36,8 @@ void ConfigureCpu::SetConfiguration() { | ||||
|     ui->cpuopt_unsafe_unfuse_fma->setChecked(Settings::values.cpuopt_unsafe_unfuse_fma); | ||||
|     ui->cpuopt_unsafe_reduce_fp_error->setEnabled(runtime_lock); | ||||
|     ui->cpuopt_unsafe_reduce_fp_error->setChecked(Settings::values.cpuopt_unsafe_reduce_fp_error); | ||||
|     ui->cpuopt_unsafe_inaccurate_nan->setEnabled(runtime_lock); | ||||
|     ui->cpuopt_unsafe_inaccurate_nan->setChecked(Settings::values.cpuopt_unsafe_inaccurate_nan); | ||||
| } | ||||
| 
 | ||||
| void ConfigureCpu::AccuracyUpdated(int index) { | ||||
| @ -61,6 +63,7 @@ void ConfigureCpu::ApplyConfiguration() { | ||||
|         static_cast<Settings::CPUAccuracy>(ui->accuracy->currentIndex()); | ||||
|     Settings::values.cpuopt_unsafe_unfuse_fma = ui->cpuopt_unsafe_unfuse_fma->isChecked(); | ||||
|     Settings::values.cpuopt_unsafe_reduce_fp_error = ui->cpuopt_unsafe_reduce_fp_error->isChecked(); | ||||
|     Settings::values.cpuopt_unsafe_inaccurate_nan = ui->cpuopt_unsafe_inaccurate_nan->isChecked(); | ||||
| } | ||||
| 
 | ||||
| void ConfigureCpu::changeEvent(QEvent* event) { | ||||
|  | ||||
| @ -109,6 +109,18 @@ | ||||
|           </property> | ||||
|          </widget> | ||||
|         </item> | ||||
|         <item> | ||||
|          <widget class="QCheckBox" name="cpuopt_unsafe_inaccurate_nan"> | ||||
|           <property name="text"> | ||||
|            <string>Inaccurate NaN handling</string> | ||||
|           </property> | ||||
|           <property name="toolTip"> | ||||
|            <string> | ||||
|             <div>This option improves speed by removing NaN checking. Please note this also reduces accuracy of certain floating-point instructions.</div> | ||||
|            </string> | ||||
|           </property> | ||||
|          </widget> | ||||
|         </item> | ||||
|        </layout> | ||||
|       </widget> | ||||
|      </item> | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user