From 0193202964449ba7a6ae46d614a63bf5caa589a7 Mon Sep 17 00:00:00 2001 From: MerryMage Date: Sat, 11 Jul 2020 14:26:36 +0100 Subject: configuration: Add settings to enable/disable specific CPU optimizations --- src/yuzu/configuration/configure_cpu.cpp | 64 ++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/yuzu/configuration/configure_cpu.cpp (limited to 'src/yuzu/configuration/configure_cpu.cpp') diff --git a/src/yuzu/configuration/configure_cpu.cpp b/src/yuzu/configuration/configure_cpu.cpp new file mode 100644 index 000000000..28e010b6b --- /dev/null +++ b/src/yuzu/configuration/configure_cpu.cpp @@ -0,0 +1,64 @@ +// Copyright 2020 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include + +#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); +} -- cgit v1.2.3 From 505aa3a4c1eb2384ab5a46aecf6431db239b74e3 Mon Sep 17 00:00:00 2001 From: MerryMage Date: Sat, 11 Jul 2020 16:25:49 +0100 Subject: configure_cpu: Show/Hide debugging options --- src/yuzu/configuration/configure_cpu.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'src/yuzu/configuration/configure_cpu.cpp') diff --git a/src/yuzu/configuration/configure_cpu.cpp b/src/yuzu/configuration/configure_cpu.cpp index 28e010b6b..4fc392a7e 100644 --- a/src/yuzu/configuration/configure_cpu.cpp +++ b/src/yuzu/configuration/configure_cpu.cpp @@ -15,6 +15,9 @@ ConfigureCpu::ConfigureCpu(QWidget* parent) : QWidget(parent), ui(new Ui::Config ui->setupUi(this); SetConfiguration(); + + connect(ui->accuracy, qOverload(&QComboBox::currentIndexChanged), this, + &ConfigureCpu::UpdateGroups); } ConfigureCpu::~ConfigureCpu() = default; @@ -22,6 +25,10 @@ ConfigureCpu::~ConfigureCpu() = default; void ConfigureCpu::SetConfiguration() { const bool runtime_lock = !Core::System::GetInstance().IsPoweredOn(); + ui->accuracy->setEnabled(runtime_lock); + ui->accuracy->setCurrentIndex(static_cast(Settings::values.cpu_accuracy)); + UpdateGroups(static_cast(Settings::values.cpu_accuracy)); + ui->cpuopt_page_tables->setEnabled(runtime_lock); ui->cpuopt_page_tables->setChecked(Settings::values.cpuopt_page_tables); ui->cpuopt_block_linking->setEnabled(runtime_lock); @@ -40,7 +47,22 @@ void ConfigureCpu::SetConfiguration() { ui->cpuopt_reduce_misalign_checks->setChecked(Settings::values.cpuopt_reduce_misalign_checks); } +void ConfigureCpu::UpdateGroups(int index) { + switch (index) { + case 0: + default: + ui->group_safe->setVisible(false); + break; + case 1: + ui->group_safe->setVisible(true); + break; + } +} + void ConfigureCpu::ApplyConfiguration() { + Settings::values.cpu_accuracy = + static_cast(ui->accuracy->currentIndex()); + 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(); -- cgit v1.2.3 From a67d00ef31aba1c45dde956b48844f91427963a1 Mon Sep 17 00:00:00 2001 From: MerryMage Date: Sun, 12 Jul 2020 12:06:04 +0100 Subject: configure_cpu: Split optimization settings off into Debug tab --- src/yuzu/configuration/configure_cpu.cpp | 51 ++++++++------------------------ 1 file changed, 13 insertions(+), 38 deletions(-) (limited to 'src/yuzu/configuration/configure_cpu.cpp') diff --git a/src/yuzu/configuration/configure_cpu.cpp b/src/yuzu/configuration/configure_cpu.cpp index 4fc392a7e..7493e5ffb 100644 --- a/src/yuzu/configuration/configure_cpu.cpp +++ b/src/yuzu/configuration/configure_cpu.cpp @@ -3,6 +3,7 @@ // Refer to the license.txt file included. #include +#include #include "common/common_types.h" #include "common/logging/log.h" @@ -16,8 +17,8 @@ ConfigureCpu::ConfigureCpu(QWidget* parent) : QWidget(parent), ui(new Ui::Config SetConfiguration(); - connect(ui->accuracy, qOverload(&QComboBox::currentIndexChanged), this, - &ConfigureCpu::UpdateGroups); + connect(ui->accuracy, qOverload(&QComboBox::activated), this, + &ConfigureCpu::AccuracyUpdated); } ConfigureCpu::~ConfigureCpu() = default; @@ -27,50 +28,24 @@ void ConfigureCpu::SetConfiguration() { ui->accuracy->setEnabled(runtime_lock); ui->accuracy->setCurrentIndex(static_cast(Settings::values.cpu_accuracy)); - UpdateGroups(static_cast(Settings::values.cpu_accuracy)); - - 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::UpdateGroups(int index) { - switch (index) { - case 0: - default: - ui->group_safe->setVisible(false); - break; - case 1: - ui->group_safe->setVisible(true); - break; +void ConfigureCpu::AccuracyUpdated(int index) { + if (static_cast(index) == Settings::CPUAccuracy::DebugMode) { + const auto result = QMessageBox::warning(this, tr("Setting CPU to Debug Mode"), + tr("CPU Debug Mode is only intended for developer " + "use. Are you sure you want to enable this?"), + QMessageBox::Yes | QMessageBox::No); + if (result == QMessageBox::No) { + ui->accuracy->setCurrentIndex(static_cast(Settings::CPUAccuracy::Accurate)); + return; + } } } void ConfigureCpu::ApplyConfiguration() { Settings::values.cpu_accuracy = static_cast(ui->accuracy->currentIndex()); - - 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) { -- cgit v1.2.3