mirror of
				https://git.tardis.systems/mirrors/yuzu
				synced 2025-10-31 02:34:11 +01:00 
			
		
		
		
	configuration: Add settings to enable/disable specific CPU optimizations
This commit is contained in:
		
							parent
							
								
									a0ee597b19
								
							
						
					
					
						commit
						0193202964
					
				
							
								
								
									
										2
									
								
								externals/dynarmic
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
								
							
						
						
									
										2
									
								
								externals/dynarmic
									
									
									
									
										vendored
									
									
								
							| @ -1 +1 @@ | ||||
| Subproject commit 4f967387c07365b7ea35d2fa3e19b7df8872a09b | ||||
| Subproject commit 82417da7803e2cf18efc28a1cd3f3d0a4b6045ae | ||||
| @ -142,10 +142,30 @@ std::shared_ptr<Dynarmic::A32::Jit> ARM_Dynarmic_32::MakeJit(Common::PageTable& | ||||
|     // Timing
 | ||||
|     config.wall_clock_cntpct = uses_wall_clock; | ||||
| 
 | ||||
|     // Optimizations
 | ||||
|     if (Settings::values.disable_cpu_opt) { | ||||
|         config.enable_optimizations = false; | ||||
|         config.enable_fast_dispatch = false; | ||||
|     // Safe optimizations
 | ||||
|     if (!Settings::values.cpuopt_page_tables) { | ||||
|         config.page_table = nullptr; | ||||
|     } | ||||
|     if (!Settings::values.cpuopt_block_linking) { | ||||
|         config.optimizations &= ~Dynarmic::OptimizationFlag::BlockLinking; | ||||
|     } | ||||
|     if (!Settings::values.cpuopt_return_stack_buffer) { | ||||
|         config.optimizations &= ~Dynarmic::OptimizationFlag::ReturnStackBuffer; | ||||
|     } | ||||
|     if (!Settings::values.cpuopt_fast_dispatcher) { | ||||
|         config.optimizations &= ~Dynarmic::OptimizationFlag::FastDispatch; | ||||
|     } | ||||
|     if (!Settings::values.cpuopt_context_elimination) { | ||||
|         config.optimizations &= ~Dynarmic::OptimizationFlag::GetSetElimination; | ||||
|     } | ||||
|     if (!Settings::values.cpuopt_const_prop) { | ||||
|         config.optimizations &= ~Dynarmic::OptimizationFlag::ConstProp; | ||||
|     } | ||||
|     if (!Settings::values.cpuopt_misc_ir) { | ||||
|         config.optimizations &= ~Dynarmic::OptimizationFlag::MiscIROpt; | ||||
|     } | ||||
|     if (!Settings::values.cpuopt_reduce_misalign_checks) { | ||||
|         config.only_detect_misalignment_via_page_table_on_page_boundary = false; | ||||
|     } | ||||
| 
 | ||||
|     return std::make_unique<Dynarmic::A32::Jit>(config); | ||||
|  | ||||
| @ -191,15 +191,35 @@ std::shared_ptr<Dynarmic::A64::Jit> ARM_Dynarmic_64::MakeJit(Common::PageTable& | ||||
|     // Unpredictable instructions
 | ||||
|     config.define_unpredictable_behaviour = true; | ||||
| 
 | ||||
|     // Optimizations
 | ||||
|     if (Settings::values.disable_cpu_opt) { | ||||
|         config.enable_optimizations = false; | ||||
|         config.enable_fast_dispatch = false; | ||||
|     } | ||||
| 
 | ||||
|     // Timing
 | ||||
|     config.wall_clock_cntpct = uses_wall_clock; | ||||
| 
 | ||||
|     // Safe optimizations
 | ||||
|     if (!Settings::values.cpuopt_page_tables) { | ||||
|         config.page_table = nullptr; | ||||
|     } | ||||
|     if (!Settings::values.cpuopt_block_linking) { | ||||
|         config.optimizations &= ~Dynarmic::OptimizationFlag::BlockLinking; | ||||
|     } | ||||
|     if (!Settings::values.cpuopt_return_stack_buffer) { | ||||
|         config.optimizations &= ~Dynarmic::OptimizationFlag::ReturnStackBuffer; | ||||
|     } | ||||
|     if (!Settings::values.cpuopt_fast_dispatcher) { | ||||
|         config.optimizations &= ~Dynarmic::OptimizationFlag::FastDispatch; | ||||
|     } | ||||
|     if (!Settings::values.cpuopt_context_elimination) { | ||||
|         config.optimizations &= ~Dynarmic::OptimizationFlag::GetSetElimination; | ||||
|     } | ||||
|     if (!Settings::values.cpuopt_const_prop) { | ||||
|         config.optimizations &= ~Dynarmic::OptimizationFlag::ConstProp; | ||||
|     } | ||||
|     if (!Settings::values.cpuopt_misc_ir) { | ||||
|         config.optimizations &= ~Dynarmic::OptimizationFlag::MiscIROpt; | ||||
|     } | ||||
|     if (!Settings::values.cpuopt_reduce_misalign_checks) { | ||||
|         config.only_detect_misalignment_via_page_table_on_page_boundary = false; | ||||
|     } | ||||
| 
 | ||||
|     return std::make_shared<Dynarmic::A64::Jit>(config); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -427,6 +427,16 @@ struct Values { | ||||
|     // Core
 | ||||
|     Setting<bool> use_multi_core; | ||||
| 
 | ||||
|     // Cpu
 | ||||
|     bool cpuopt_page_tables; | ||||
|     bool cpuopt_block_linking; | ||||
|     bool cpuopt_return_stack_buffer; | ||||
|     bool cpuopt_fast_dispatcher; | ||||
|     bool cpuopt_context_elimination; | ||||
|     bool cpuopt_const_prop; | ||||
|     bool cpuopt_misc_ir; | ||||
|     bool cpuopt_reduce_misalign_checks; | ||||
| 
 | ||||
|     // Renderer
 | ||||
|     Setting<RendererBackend> renderer_backend; | ||||
|     bool renderer_debug; | ||||
| @ -505,7 +515,6 @@ struct Values { | ||||
|     bool dump_nso; | ||||
|     bool reporting_services; | ||||
|     bool quest_flag; | ||||
|     bool disable_cpu_opt; | ||||
|     bool disable_macro_jit; | ||||
| 
 | ||||
|     // Misceallaneous
 | ||||
|  | ||||
| @ -30,6 +30,9 @@ add_executable(yuzu | ||||
|     configuration/configure_audio.cpp | ||||
|     configuration/configure_audio.h | ||||
|     configuration/configure_audio.ui | ||||
|     configuration/configure_cpu.cpp | ||||
|     configuration/configure_cpu.h | ||||
|     configuration/configure_cpu.ui | ||||
|     configuration/configure_debug.cpp | ||||
|     configuration/configure_debug.h | ||||
|     configuration/configure_debug.ui | ||||
|  | ||||
| @ -540,8 +540,6 @@ void Config::ReadDebuggingValues() { | ||||
|     Settings::values.reporting_services = | ||||
|         ReadSetting(QStringLiteral("reporting_services"), false).toBool(); | ||||
|     Settings::values.quest_flag = ReadSetting(QStringLiteral("quest_flag"), false).toBool(); | ||||
|     Settings::values.disable_cpu_opt = | ||||
|         ReadSetting(QStringLiteral("disable_cpu_opt"), false).toBool(); | ||||
|     Settings::values.disable_macro_jit = | ||||
|         ReadSetting(QStringLiteral("disable_macro_jit"), false).toBool(); | ||||
| 
 | ||||
| @ -633,6 +631,31 @@ void Config::ReadPathValues() { | ||||
|     qt_config->endGroup(); | ||||
| } | ||||
| 
 | ||||
| void Config::ReadCpuValues() { | ||||
|     qt_config->beginGroup(QStringLiteral("Cpu")); | ||||
| 
 | ||||
|     if (global) { | ||||
|         Settings::values.cpuopt_page_tables = | ||||
|             ReadSetting(QStringLiteral("cpuopt_page_tables"), true).toBool(); | ||||
|         Settings::values.cpuopt_block_linking = | ||||
|             ReadSetting(QStringLiteral("cpuopt_block_linking"), true).toBool(); | ||||
|         Settings::values.cpuopt_return_stack_buffer = | ||||
|             ReadSetting(QStringLiteral("cpuopt_return_stack_buffer"), true).toBool(); | ||||
|         Settings::values.cpuopt_fast_dispatcher = | ||||
|             ReadSetting(QStringLiteral("cpuopt_fast_dispatcher"), true).toBool(); | ||||
|         Settings::values.cpuopt_context_elimination = | ||||
|             ReadSetting(QStringLiteral("cpuopt_context_elimination"), true).toBool(); | ||||
|         Settings::values.cpuopt_const_prop = | ||||
|             ReadSetting(QStringLiteral("cpuopt_const_prop"), true).toBool(); | ||||
|         Settings::values.cpuopt_misc_ir = | ||||
|             ReadSetting(QStringLiteral("cpuopt_misc_ir"), true).toBool(); | ||||
|         Settings::values.cpuopt_reduce_misalign_checks = | ||||
|             ReadSetting(QStringLiteral("cpuopt_reduce_misalign_checks"), true).toBool(); | ||||
|     } | ||||
| 
 | ||||
|     qt_config->endGroup(); | ||||
| } | ||||
| 
 | ||||
| void Config::ReadRendererValues() { | ||||
|     qt_config->beginGroup(QStringLiteral("Renderer")); | ||||
| 
 | ||||
| @ -829,6 +852,7 @@ void Config::ReadValues() { | ||||
|         ReadMiscellaneousValues(); | ||||
|     } | ||||
|     ReadCoreValues(); | ||||
|     ReadCpuValues(); | ||||
|     ReadRendererValues(); | ||||
|     ReadAudioValues(); | ||||
|     ReadSystemValues(); | ||||
| @ -929,6 +953,7 @@ void Config::SaveValues() { | ||||
|         SaveMiscellaneousValues(); | ||||
|     } | ||||
|     SaveCoreValues(); | ||||
|     SaveCpuValues(); | ||||
|     SaveRendererValues(); | ||||
|     SaveAudioValues(); | ||||
|     SaveSystemValues(); | ||||
| @ -1033,7 +1058,6 @@ void Config::SaveDebuggingValues() { | ||||
|     WriteSetting(QStringLiteral("dump_exefs"), Settings::values.dump_exefs, false); | ||||
|     WriteSetting(QStringLiteral("dump_nso"), Settings::values.dump_nso, false); | ||||
|     WriteSetting(QStringLiteral("quest_flag"), Settings::values.quest_flag, false); | ||||
|     WriteSetting(QStringLiteral("disable_cpu_opt"), Settings::values.disable_cpu_opt, false); | ||||
|     WriteSetting(QStringLiteral("disable_macro_jit"), Settings::values.disable_macro_jit, false); | ||||
| 
 | ||||
|     qt_config->endGroup(); | ||||
| @ -1097,6 +1121,29 @@ void Config::SavePathValues() { | ||||
|     qt_config->endGroup(); | ||||
| } | ||||
| 
 | ||||
| void Config::SaveCpuValues() { | ||||
|     qt_config->beginGroup(QStringLiteral("Cpu")); | ||||
| 
 | ||||
|     if (global) { | ||||
|         WriteSetting(QStringLiteral("cpuopt_page_tables"), Settings::values.cpuopt_page_tables, | ||||
|                      true); | ||||
|         WriteSetting(QStringLiteral("cpuopt_block_linking"), Settings::values.cpuopt_block_linking, | ||||
|                      true); | ||||
|         WriteSetting(QStringLiteral("cpuopt_return_stack_buffer"), | ||||
|                      Settings::values.cpuopt_return_stack_buffer, true); | ||||
|         WriteSetting(QStringLiteral("cpuopt_fast_dispatcher"), | ||||
|                      Settings::values.cpuopt_fast_dispatcher, true); | ||||
|         WriteSetting(QStringLiteral("cpuopt_context_elimination"), | ||||
|                      Settings::values.cpuopt_context_elimination, true); | ||||
|         WriteSetting(QStringLiteral("cpuopt_const_prop"), Settings::values.cpuopt_const_prop, true); | ||||
|         WriteSetting(QStringLiteral("cpuopt_misc_ir"), Settings::values.cpuopt_misc_ir, true); | ||||
|         WriteSetting(QStringLiteral("cpuopt_reduce_misalign_checks"), | ||||
|                      Settings::values.cpuopt_reduce_misalign_checks, true); | ||||
|     } | ||||
| 
 | ||||
|     qt_config->endGroup(); | ||||
| } | ||||
| 
 | ||||
| void Config::SaveRendererValues() { | ||||
|     qt_config->beginGroup(QStringLiteral("Renderer")); | ||||
| 
 | ||||
|  | ||||
| @ -49,6 +49,7 @@ private: | ||||
|     void ReadDisabledAddOnValues(); | ||||
|     void ReadMiscellaneousValues(); | ||||
|     void ReadPathValues(); | ||||
|     void ReadCpuValues(); | ||||
|     void ReadRendererValues(); | ||||
|     void ReadShortcutValues(); | ||||
|     void ReadSystemValues(); | ||||
| @ -73,6 +74,7 @@ private: | ||||
|     void SaveDisabledAddOnValues(); | ||||
|     void SaveMiscellaneousValues(); | ||||
|     void SavePathValues(); | ||||
|     void SaveCpuValues(); | ||||
|     void SaveRendererValues(); | ||||
|     void SaveShortcutValues(); | ||||
|     void SaveSystemValues(); | ||||
|  | ||||
| @ -78,6 +78,11 @@ | ||||
|          <string>Hotkeys</string> | ||||
|         </attribute> | ||||
|        </widget> | ||||
|        <widget class="ConfigureCpu" name="cpuTab"> | ||||
|         <attribute name="title"> | ||||
|          <string>CPU</string> | ||||
|         </attribute> | ||||
|        </widget> | ||||
|        <widget class="ConfigureGraphics" name="graphicsTab"> | ||||
|         <attribute name="title"> | ||||
|          <string>Graphics</string> | ||||
| @ -158,6 +163,12 @@ | ||||
|    <header>configuration/configure_debug.h</header> | ||||
|    <container>1</container> | ||||
|   </customwidget> | ||||
|   <customwidget> | ||||
|    <class>ConfigureCpu</class> | ||||
|    <extends>QWidget</extends> | ||||
|    <header>configuration/configure_cpu.h</header> | ||||
|    <container>1</container> | ||||
|   </customwidget> | ||||
|   <customwidget> | ||||
|    <class>ConfigureGraphics</class> | ||||
|    <extends>QWidget</extends> | ||||
|  | ||||
							
								
								
									
										64
									
								
								src/yuzu/configuration/configure_cpu.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								src/yuzu/configuration/configure_cpu.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,64 @@ | ||||
| // Copyright 2020 yuzu Emulator Project
 | ||||
| // Licensed under GPLv2 or any later version
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #include <QComboBox> | ||||
| 
 | ||||
| #include "common/common_types.h" | ||||
| #include "common/logging/log.h" | ||||
| #include "core/core.h" | ||||
| #include "core/settings.h" | ||||
| #include "ui_configure_cpu.h" | ||||
| #include "yuzu/configuration/configure_cpu.h" | ||||
| 
 | ||||
| ConfigureCpu::ConfigureCpu(QWidget* parent) : QWidget(parent), ui(new Ui::ConfigureCpu) { | ||||
|     ui->setupUi(this); | ||||
| 
 | ||||
|     SetConfiguration(); | ||||
| } | ||||
| 
 | ||||
| ConfigureCpu::~ConfigureCpu() = default; | ||||
| 
 | ||||
| void ConfigureCpu::SetConfiguration() { | ||||
|     const bool runtime_lock = !Core::System::GetInstance().IsPoweredOn(); | ||||
| 
 | ||||
|     ui->cpuopt_page_tables->setEnabled(runtime_lock); | ||||
|     ui->cpuopt_page_tables->setChecked(Settings::values.cpuopt_page_tables); | ||||
|     ui->cpuopt_block_linking->setEnabled(runtime_lock); | ||||
|     ui->cpuopt_block_linking->setChecked(Settings::values.cpuopt_block_linking); | ||||
|     ui->cpuopt_return_stack_buffer->setEnabled(runtime_lock); | ||||
|     ui->cpuopt_return_stack_buffer->setChecked(Settings::values.cpuopt_return_stack_buffer); | ||||
|     ui->cpuopt_fast_dispatcher->setEnabled(runtime_lock); | ||||
|     ui->cpuopt_fast_dispatcher->setChecked(Settings::values.cpuopt_fast_dispatcher); | ||||
|     ui->cpuopt_context_elimination->setEnabled(runtime_lock); | ||||
|     ui->cpuopt_context_elimination->setChecked(Settings::values.cpuopt_context_elimination); | ||||
|     ui->cpuopt_const_prop->setEnabled(runtime_lock); | ||||
|     ui->cpuopt_const_prop->setChecked(Settings::values.cpuopt_const_prop); | ||||
|     ui->cpuopt_misc_ir->setEnabled(runtime_lock); | ||||
|     ui->cpuopt_misc_ir->setChecked(Settings::values.cpuopt_misc_ir); | ||||
|     ui->cpuopt_reduce_misalign_checks->setEnabled(runtime_lock); | ||||
|     ui->cpuopt_reduce_misalign_checks->setChecked(Settings::values.cpuopt_reduce_misalign_checks); | ||||
| } | ||||
| 
 | ||||
| void ConfigureCpu::ApplyConfiguration() { | ||||
|     Settings::values.cpuopt_page_tables = ui->cpuopt_page_tables->isChecked(); | ||||
|     Settings::values.cpuopt_block_linking = ui->cpuopt_block_linking->isChecked(); | ||||
|     Settings::values.cpuopt_return_stack_buffer = ui->cpuopt_return_stack_buffer->isChecked(); | ||||
|     Settings::values.cpuopt_fast_dispatcher = ui->cpuopt_fast_dispatcher->isChecked(); | ||||
|     Settings::values.cpuopt_context_elimination = ui->cpuopt_context_elimination->isChecked(); | ||||
|     Settings::values.cpuopt_const_prop = ui->cpuopt_const_prop->isChecked(); | ||||
|     Settings::values.cpuopt_misc_ir = ui->cpuopt_misc_ir->isChecked(); | ||||
|     Settings::values.cpuopt_reduce_misalign_checks = ui->cpuopt_reduce_misalign_checks->isChecked(); | ||||
| } | ||||
| 
 | ||||
| void ConfigureCpu::changeEvent(QEvent* event) { | ||||
|     if (event->type() == QEvent::LanguageChange) { | ||||
|         RetranslateUI(); | ||||
|     } | ||||
| 
 | ||||
|     QWidget::changeEvent(event); | ||||
| } | ||||
| 
 | ||||
| void ConfigureCpu::RetranslateUI() { | ||||
|     ui->retranslateUi(this); | ||||
| } | ||||
							
								
								
									
										31
									
								
								src/yuzu/configuration/configure_cpu.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								src/yuzu/configuration/configure_cpu.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,31 @@ | ||||
| // Copyright 2020 yuzu Emulator Project
 | ||||
| // Licensed under GPLv2 or any later version
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include <memory> | ||||
| #include <QWidget> | ||||
| #include "core/settings.h" | ||||
| 
 | ||||
| namespace Ui { | ||||
| class ConfigureCpu; | ||||
| } | ||||
| 
 | ||||
| class ConfigureCpu : public QWidget { | ||||
|     Q_OBJECT | ||||
| 
 | ||||
| public: | ||||
|     explicit ConfigureCpu(QWidget* parent = nullptr); | ||||
|     ~ConfigureCpu() override; | ||||
| 
 | ||||
|     void ApplyConfiguration(); | ||||
| 
 | ||||
| private: | ||||
|     void changeEvent(QEvent* event) override; | ||||
|     void RetranslateUI(); | ||||
| 
 | ||||
|     void SetConfiguration(); | ||||
| 
 | ||||
|     std::unique_ptr<Ui::ConfigureCpu> ui; | ||||
| }; | ||||
							
								
								
									
										113
									
								
								src/yuzu/configuration/configure_cpu.ui
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								src/yuzu/configuration/configure_cpu.ui
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,113 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <ui version="4.0"> | ||||
|  <class>ConfigureCpu</class> | ||||
|  <widget class="QWidget" name="ConfigureCpu"> | ||||
|   <property name="geometry"> | ||||
|    <rect> | ||||
|     <x>0</x> | ||||
|     <y>0</y> | ||||
|     <width>400</width> | ||||
|     <height>321</height> | ||||
|    </rect> | ||||
|   </property> | ||||
|   <property name="windowTitle"> | ||||
|    <string>Form</string> | ||||
|   </property> | ||||
|   <layout class="QVBoxLayout"> | ||||
|    <item> | ||||
|     <layout class="QVBoxLayout"> | ||||
|      <item> | ||||
|       <widget class="QGroupBox"> | ||||
|        <property name="title"> | ||||
|         <string>Safe CPU Optimizations</string> | ||||
|        </property> | ||||
|        <layout class="QVBoxLayout"> | ||||
|         <item> | ||||
|          <widget class="QLabel"> | ||||
|           <property name="wordWrap"> | ||||
|             <bool>1</bool> | ||||
|           </property> | ||||
|           <property name="text"> | ||||
|            <string>Keep these enabled. For debugging only.</string> | ||||
|           </property> | ||||
|          </widget> | ||||
|         </item> | ||||
|         <item> | ||||
|          <widget class="QCheckBox" name="cpuopt_page_tables"> | ||||
|           <property name="text"> | ||||
|            <string>Enable inline page tables</string> | ||||
|           </property> | ||||
|          </widget> | ||||
|         </item> | ||||
|         <item> | ||||
|          <widget class="QCheckBox" name="cpuopt_block_linking"> | ||||
|           <property name="text"> | ||||
|            <string>Enable block linking</string> | ||||
|           </property> | ||||
|          </widget> | ||||
|         </item> | ||||
|         <item> | ||||
|          <widget class="QCheckBox" name="cpuopt_return_stack_buffer"> | ||||
|           <property name="text"> | ||||
|            <string>Enable return stack buffer</string> | ||||
|           </property> | ||||
|          </widget> | ||||
|         </item> | ||||
|         <item> | ||||
|          <widget class="QCheckBox" name="cpuopt_fast_dispatcher"> | ||||
|           <property name="text"> | ||||
|            <string>Enable fast dispatcher</string> | ||||
|           </property> | ||||
|          </widget> | ||||
|         </item> | ||||
|         <item> | ||||
|          <widget class="QCheckBox" name="cpuopt_context_elimination"> | ||||
|           <property name="text"> | ||||
|            <string>Enable context elimination</string> | ||||
|           </property> | ||||
|          </widget> | ||||
|         </item> | ||||
|         <item> | ||||
|          <widget class="QCheckBox" name="cpuopt_const_prop"> | ||||
|           <property name="text"> | ||||
|            <string>Enable constant propagation</string> | ||||
|           </property> | ||||
|          </widget> | ||||
|         </item> | ||||
|         <item> | ||||
|          <widget class="QCheckBox" name="cpuopt_misc_ir"> | ||||
|           <property name="text"> | ||||
|            <string>Enable miscellaneous optimizations</string> | ||||
|           </property> | ||||
|          </widget> | ||||
|         </item> | ||||
|         <item> | ||||
|          <widget class="QCheckBox" name="cpuopt_reduce_misalign_checks"> | ||||
|           <property name="text"> | ||||
|            <string>Enable misalignment check reduction</string> | ||||
|           </property> | ||||
|          </widget> | ||||
|         </item> | ||||
|        </layout> | ||||
|       </widget> | ||||
|      </item> | ||||
|     </layout> | ||||
|    </item> | ||||
|    <item> | ||||
|     <spacer name="verticalSpacer"> | ||||
|      <property name="orientation"> | ||||
|       <enum>Qt::Vertical</enum> | ||||
|      </property> | ||||
|      <property name="sizeHint" stdset="0"> | ||||
|       <size> | ||||
|        <width>20</width> | ||||
|        <height>40</height> | ||||
|       </size> | ||||
|      </property> | ||||
|     </spacer> | ||||
|    </item> | ||||
|   </layout> | ||||
|  </widget> | ||||
|  <resources/> | ||||
|  <connections/> | ||||
| </ui> | ||||
| @ -36,7 +36,6 @@ void ConfigureDebug::SetConfiguration() { | ||||
|     ui->homebrew_args_edit->setText(QString::fromStdString(Settings::values.program_args)); | ||||
|     ui->reporting_services->setChecked(Settings::values.reporting_services); | ||||
|     ui->quest_flag->setChecked(Settings::values.quest_flag); | ||||
|     ui->disable_cpu_opt->setChecked(Settings::values.disable_cpu_opt); | ||||
|     ui->enable_graphics_debugging->setEnabled(!Core::System::GetInstance().IsPoweredOn()); | ||||
|     ui->enable_graphics_debugging->setChecked(Settings::values.renderer_debug); | ||||
|     ui->disable_macro_jit->setEnabled(!Core::System::GetInstance().IsPoweredOn()); | ||||
| @ -51,7 +50,6 @@ void ConfigureDebug::ApplyConfiguration() { | ||||
|     Settings::values.program_args = ui->homebrew_args_edit->text().toStdString(); | ||||
|     Settings::values.reporting_services = ui->reporting_services->isChecked(); | ||||
|     Settings::values.quest_flag = ui->quest_flag->isChecked(); | ||||
|     Settings::values.disable_cpu_opt = ui->disable_cpu_opt->isChecked(); | ||||
|     Settings::values.renderer_debug = ui->enable_graphics_debugging->isChecked(); | ||||
|     Settings::values.disable_macro_jit = ui->disable_macro_jit->isChecked(); | ||||
|     Debugger::ToggleConsole(); | ||||
|  | ||||
| @ -228,13 +228,6 @@ | ||||
|         </property> | ||||
|        </widget> | ||||
|       </item> | ||||
|       <item> | ||||
|        <widget class="QCheckBox" name="disable_cpu_opt"> | ||||
|         <property name="text"> | ||||
|          <string>Disable CPU JIT optimizations</string> | ||||
|         </property> | ||||
|        </widget> | ||||
|       </item> | ||||
|      </layout> | ||||
|     </widget> | ||||
|    </item> | ||||
|  | ||||
| @ -42,6 +42,7 @@ void ConfigureDialog::ApplyConfiguration() { | ||||
|     ui->filesystemTab->applyConfiguration(); | ||||
|     ui->inputTab->ApplyConfiguration(); | ||||
|     ui->hotkeysTab->ApplyConfiguration(registry); | ||||
|     ui->cpuTab->ApplyConfiguration(); | ||||
|     ui->graphicsTab->ApplyConfiguration(); | ||||
|     ui->graphicsAdvancedTab->ApplyConfiguration(); | ||||
|     ui->audioTab->ApplyConfiguration(); | ||||
| @ -76,9 +77,10 @@ void ConfigureDialog::RetranslateUI() { | ||||
| Q_DECLARE_METATYPE(QList<QWidget*>); | ||||
| 
 | ||||
| void ConfigureDialog::PopulateSelectionList() { | ||||
|     const std::array<std::pair<QString, QList<QWidget*>>, 5> items{ | ||||
|     const std::array<std::pair<QString, QList<QWidget*>>, 6> items{ | ||||
|         {{tr("General"), {ui->generalTab, ui->webTab, ui->debugTab, ui->uiTab}}, | ||||
|          {tr("System"), {ui->systemTab, ui->profileManagerTab, ui->serviceTab, ui->filesystemTab}}, | ||||
|          {tr("CPU"), {ui->cpuTab}}, | ||||
|          {tr("Graphics"), {ui->graphicsTab, ui->graphicsAdvancedTab}}, | ||||
|          {tr("Audio"), {ui->audioTab}}, | ||||
|          {tr("Controls"), {ui->inputTab, ui->hotkeysTab}}}, | ||||
| @ -107,6 +109,7 @@ void ConfigureDialog::UpdateVisibleTabs() { | ||||
|         {ui->profileManagerTab, tr("Profiles")}, | ||||
|         {ui->inputTab, tr("Input")}, | ||||
|         {ui->hotkeysTab, tr("Hotkeys")}, | ||||
|         {ui->cpuTab, tr("CPU")}, | ||||
|         {ui->graphicsTab, tr("Graphics")}, | ||||
|         {ui->graphicsAdvancedTab, tr("Advanced")}, | ||||
|         {ui->audioTab, tr("Audio")}, | ||||
|  | ||||
| @ -437,8 +437,6 @@ void Config::ReadValues() { | ||||
|     Settings::values.reporting_services = | ||||
|         sdl2_config->GetBoolean("Debugging", "reporting_services", false); | ||||
|     Settings::values.quest_flag = sdl2_config->GetBoolean("Debugging", "quest_flag", false); | ||||
|     Settings::values.disable_cpu_opt = | ||||
|         sdl2_config->GetBoolean("Debugging", "disable_cpu_opt", false); | ||||
|     Settings::values.disable_macro_jit = | ||||
|         sdl2_config->GetBoolean("Debugging", "disable_macro_jit", false); | ||||
| 
 | ||||
|  | ||||
| @ -97,6 +97,39 @@ udp_pad_index= | ||||
| # 0 (default): Disabled, 1: Enabled | ||||
| use_multi_core= | ||||
| 
 | ||||
| [Cpu] | ||||
| # Enable inline page tables optimization (faster guest memory access) | ||||
| # 0: Disabled, 1 (default): Enabled | ||||
| cpuopt_page_tables = | ||||
| 
 | ||||
| # Enable block linking CPU optimization (reduce block dispatcher use during predictable jumps) | ||||
| # 0: Disabled, 1 (default): Enabled | ||||
| cpuopt_block_linking = | ||||
| 
 | ||||
| # Enable return stack buffer CPU optimization (reduce block dispatcher use during predictable returns) | ||||
| # 0: Disabled, 1 (default): Enabled | ||||
| cpuopt_return_stack_buffer = | ||||
| 
 | ||||
| # Enable fast dispatcher CPU optimization (use a two-tiered dispatcher architecture) | ||||
| # 0: Disabled, 1 (default): Enabled | ||||
| cpuopt_fast_dispatcher = | ||||
| 
 | ||||
| # Enable context elimination CPU Optimization (reduce host memory use for guest context) | ||||
| # 0: Disabled, 1 (default): Enabled | ||||
| cpuopt_context_elimination = | ||||
| 
 | ||||
| # Enable constant propagation CPU optimization (basic IR optimization) | ||||
| # 0: Disabled, 1 (default): Enabled | ||||
| cpuopt_const_prop = | ||||
| 
 | ||||
| # Enable miscellaneous CPU optimizations (basic IR optimization) | ||||
| # 0: Disabled, 1 (default): Enabled | ||||
| cpuopt_misc_ir = | ||||
| 
 | ||||
| # Enable reduction of memory misalignment checks (reduce memory fallbacks for misaligned access) | ||||
| # 0: Disabled, 1 (default): Enabled | ||||
| cpuopt_reduce_misalign_checks = | ||||
| 
 | ||||
| [Renderer] | ||||
| # Which backend API to use. | ||||
| # 0 (default): OpenGL, 1: Vulkan | ||||
| @ -283,9 +316,6 @@ dump_nso=false | ||||
| # Determines whether or not yuzu will report to the game that the emulated console is in Kiosk Mode | ||||
| # false: Retail/Normal Mode (default), true: Kiosk Mode | ||||
| quest_flag = | ||||
| # Determines whether or not JIT CPU optimizations are enabled | ||||
| # false: Optimizations Enabled, true: Optimizations Disabled | ||||
| disable_cpu_opt = | ||||
| # Enables/Disables the macro JIT compiler | ||||
| disable_macro_jit=false | ||||
| 
 | ||||
|  | ||||
| @ -12,6 +12,39 @@ const char* sdl2_config_file = R"( | ||||
| # 0 (default): Disabled, 1: Enabled | ||||
| use_multi_core= | ||||
| 
 | ||||
| [Cpu] | ||||
| # Enable inline page tables optimization (faster guest memory access) | ||||
| # 0: Disabled, 1 (default): Enabled | ||||
| cpuopt_page_tables = | ||||
| 
 | ||||
| # Enable block linking CPU optimization (reduce block dispatcher use during predictable jumps) | ||||
| # 0: Disabled, 1 (default): Enabled | ||||
| cpuopt_block_linking = | ||||
| 
 | ||||
| # Enable return stack buffer CPU optimization (reduce block dispatcher use during predictable returns) | ||||
| # 0: Disabled, 1 (default): Enabled | ||||
| cpuopt_return_stack_buffer = | ||||
| 
 | ||||
| # Enable fast dispatcher CPU optimization (use a two-tiered dispatcher architecture) | ||||
| # 0: Disabled, 1 (default): Enabled | ||||
| cpuopt_fast_dispatcher = | ||||
| 
 | ||||
| # Enable context elimination CPU Optimization (reduce host memory use for guest context) | ||||
| # 0: Disabled, 1 (default): Enabled | ||||
| cpuopt_context_elimination = | ||||
| 
 | ||||
| # Enable constant propagation CPU optimization (basic IR optimization) | ||||
| # 0: Disabled, 1 (default): Enabled | ||||
| cpuopt_const_prop = | ||||
| 
 | ||||
| # Enable miscellaneous CPU optimizations (basic IR optimization) | ||||
| # 0: Disabled, 1 (default): Enabled | ||||
| cpuopt_misc_ir = | ||||
| 
 | ||||
| # Enable reduction of memory misalignment checks (reduce memory fallbacks for misaligned access) | ||||
| # 0: Disabled, 1 (default): Enabled | ||||
| cpuopt_reduce_misalign_checks = | ||||
| 
 | ||||
| [Renderer] | ||||
| # Whether to use software or hardware rendering. | ||||
| # 0: Software, 1 (default): Hardware | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user