@ -5,88 +5,83 @@
# include <memory>
# include <memory>
# include "common/common_types.h"
# include "common/common_types.h"
# include "common/settings.h"
# include "common/settings.h"
# include "configuration/shared_widget.h"
# include "core/core.h"
# include "core/core.h"
# include "ui_configure_cpu.h"
# include "ui_configure_cpu.h"
# include "yuzu/configuration/configuration_shared.h"
# include "yuzu/configuration/configuration_shared.h"
# include "yuzu/configuration/configure_cpu.h"
# include "yuzu/configuration/configure_cpu.h"
ConfigureCpu : : ConfigureCpu ( const Core : : System & system_ ,
ConfigureCpu : : ConfigureCpu (
std : : shared_ptr < std : : forward_list < ConfigurationShared : : Tab * > > group ,
const Core : : System & system_ ,
QWidget * parent )
std : : shared_ptr < std : : forward_list < ConfigurationShared : : Tab * > > group ,
: Tab ( group , parent ) , ui { std : : make_unique < Ui : : ConfigureCpu > ( ) } , system { system_ } {
const ConfigurationShared : : TranslationMap & translations_ ,
const ConfigurationShared : : ComboboxTranslationMap & combobox_translations_ , QWidget * parent )
: Tab ( group , parent ) , ui { std : : make_unique < Ui : : ConfigureCpu > ( ) } , system { system_ } ,
translations { translations_ } , combobox_translations { combobox_translations_ } {
ui - > setupUi ( this ) ;
ui - > setupUi ( this ) ;
SetupPerGameUI ( ) ;
Setup ( ) ;
SetConfiguration ( ) ;
SetConfiguration ( ) ;
connect ( ui- > accuracy, qOverload < int > ( & QComboBox : : currentIndexChanged ) , this ,
connect ( accuracy_combobox , qOverload < int > ( & QComboBox : : currentIndexChanged ) , this ,
& ConfigureCpu : : UpdateGroup ) ;
& ConfigureCpu : : UpdateGroup ) ;
}
}
ConfigureCpu : : ~ ConfigureCpu ( ) = default ;
ConfigureCpu : : ~ ConfigureCpu ( ) = default ;
void ConfigureCpu : : SetConfiguration ( ) {
void ConfigureCpu : : SetConfiguration ( ) { }
void ConfigureCpu : : Setup ( ) {
const bool runtime_lock = ! system . IsPoweredOn ( ) ;
const bool runtime_lock = ! system . IsPoweredOn ( ) ;
auto * accuracy_layout = ui - > widget_accuracy - > layout ( ) ;
auto * unsafe_layout = ui - > unsafe_widget - > layout ( ) ;
std : : map < std : : string , QWidget * > unsafe_hold { } ;
ui - > accuracy - > setEnabled ( runtime_lock ) ;
std : : forward_list < Settings : : BasicSetting * > settings ;
ui - > cpuopt_unsafe_unfuse_fma - > setEnabled ( runtime_lock ) ;
const auto push = [ & ] ( Settings : : Category category ) {
ui - > cpuopt_unsafe_reduce_fp_error - > setEnabled ( runtime_lock ) ;
for ( const auto setting : Settings : : values . linkage . by_category [ category ] ) {
ui - > cpuopt_unsafe_ignore_standard_fpcr - > setEnabled ( runtime_lock ) ;
settings . push_front ( setting ) ;
ui - > cpuopt_unsafe_inaccurate_nan - > setEnabled ( runtime_lock ) ;
}
ui - > cpuopt_unsafe_fastmem_check - > setEnabled ( runtime_lock ) ;
} ;
ui - > cpuopt_unsafe_ignore_global_monitor - > setEnabled ( runtime_lock ) ;
ui - > cpuopt_unsafe_unfuse_fma - > setChecked ( Settings : : values . cpuopt_unsafe_unfuse_fma . GetValue ( ) ) ;
push ( Settings : : Category : : Cpu ) ;
ui - > cpuopt_unsafe_reduce_fp_error - > setChecked (
push ( Settings : : Category : : CpuUnsafe ) ;
Settings : : values . cpuopt_unsafe_reduce_fp_error . GetValue ( ) ) ;
ui - > cpuopt_unsafe_ignore_standard_fpcr - > setChecked (
Settings : : values . cpuopt_unsafe_ignore_standard_fpcr . GetValue ( ) ) ;
ui - > cpuopt_unsafe_inaccurate_nan - > setChecked (
Settings : : values . cpuopt_unsafe_inaccurate_nan . GetValue ( ) ) ;
ui - > cpuopt_unsafe_fastmem_check - > setChecked (
Settings : : values . cpuopt_unsafe_fastmem_check . GetValue ( ) ) ;
ui - > cpuopt_unsafe_ignore_global_monitor - > setChecked (
Settings : : values . cpuopt_unsafe_ignore_global_monitor . GetValue ( ) ) ;
if ( Settings : : IsConfiguringGlobal ( ) ) {
for ( const auto setting : settings ) {
ui - > accuracy - > setCurrentIndex ( static_cast < int > ( Settings : : values . cpu_accuracy . GetValue ( ) ) ) ;
auto * widget = new ConfigurationShared : : Widget ( setting , translations , combobox_translations ,
} else {
this , runtime_lock , apply_funcs ) ;
ConfigurationShared : : SetPerGameSetting ( ui - > accuracy , & Settings : : values . cpu_accuracy ) ;
ConfigurationShared : : SetHighlight ( ui - > widget_accuracy ,
if ( ! widget - > Valid ( ) ) {
! Settings : : values . cpu_accuracy . UsingGlobal ( ) ) ;
delete widget ;
continue ;
}
if ( setting - > Id ( ) = = Settings : : values . cpu_accuracy . Id ( ) ) {
accuracy_layout - > addWidget ( widget ) ;
accuracy_combobox = widget - > combobox ;
} else {
unsafe_hold . insert ( { setting - > GetLabel ( ) , widget } ) ;
}
}
}
UpdateGroup ( ui - > accuracy - > currentIndex ( ) ) ;
for ( const auto & [ label , widget ] : unsafe_hold ) {
unsafe_layout - > addWidget ( widget ) ;
}
UpdateGroup ( accuracy_combobox - > currentIndex ( ) ) ;
}
}
void ConfigureCpu : : UpdateGroup ( int index ) {
void ConfigureCpu : : UpdateGroup ( int index ) {
if ( ! Settings : : IsConfiguringGlobal ( ) ) {
const auto accuracy = static_cast < Settings : : CPUAccuracy > (
index - = ConfigurationShared : : USE_GLOBAL_OFFSET ;
combobox_translations . at ( typeid ( Settings : : CPUAccuracy ) ) [ index ] . first ) ;
}
const auto accuracy = static_cast < Settings : : CPUAccuracy > ( index ) ;
ui - > unsafe_group - > setVisible ( accuracy = = Settings : : CPUAccuracy : : Unsafe ) ;
ui - > unsafe_group - > setVisible ( accuracy = = Settings : : CPUAccuracy : : Unsafe ) ;
}
}
void ConfigureCpu : : ApplyConfiguration ( ) {
void ConfigureCpu : : ApplyConfiguration ( ) {
ConfigurationShared : : ApplyPerGameSetting ( & Settings : : values . cpu_accuracy , ui - > accuracy ) ;
const bool is_powered_on = system . IsPoweredOn ( ) ;
ConfigurationShared : : ApplyPerGameSetting ( & Settings : : values . cpuopt_unsafe_unfuse_fma ,
for ( const auto & apply_func : apply_funcs ) {
ui - > cpuopt_unsafe_unfuse_fma ,
apply_func ( is_powered_on ) ;
cpuopt_unsafe_unfuse_fma ) ;
}
ConfigurationShared : : ApplyPerGameSetting ( & Settings : : values . cpuopt_unsafe_reduce_fp_error ,
ui - > cpuopt_unsafe_reduce_fp_error ,
cpuopt_unsafe_reduce_fp_error ) ;
ConfigurationShared : : ApplyPerGameSetting ( & Settings : : values . cpuopt_unsafe_ignore_standard_fpcr ,
ui - > cpuopt_unsafe_ignore_standard_fpcr ,
cpuopt_unsafe_ignore_standard_fpcr ) ;
ConfigurationShared : : ApplyPerGameSetting ( & Settings : : values . cpuopt_unsafe_inaccurate_nan ,
ui - > cpuopt_unsafe_inaccurate_nan ,
cpuopt_unsafe_inaccurate_nan ) ;
ConfigurationShared : : ApplyPerGameSetting ( & Settings : : values . cpuopt_unsafe_fastmem_check ,
ui - > cpuopt_unsafe_fastmem_check ,
cpuopt_unsafe_fastmem_check ) ;
ConfigurationShared : : ApplyPerGameSetting ( & Settings : : values . cpuopt_unsafe_ignore_global_monitor ,
ui - > cpuopt_unsafe_ignore_global_monitor ,
cpuopt_unsafe_ignore_global_monitor ) ;
}
}
void ConfigureCpu : : changeEvent ( QEvent * event ) {
void ConfigureCpu : : changeEvent ( QEvent * event ) {
@ -100,32 +95,3 @@ void ConfigureCpu::changeEvent(QEvent* event) {
void ConfigureCpu : : RetranslateUI ( ) {
void ConfigureCpu : : RetranslateUI ( ) {
ui - > retranslateUi ( this ) ;
ui - > retranslateUi ( this ) ;
}
}
void ConfigureCpu : : SetupPerGameUI ( ) {
if ( Settings : : IsConfiguringGlobal ( ) ) {
return ;
}
ConfigurationShared : : SetColoredComboBox (
ui - > accuracy , ui - > widget_accuracy ,
static_cast < u32 > ( Settings : : values . cpu_accuracy . GetValue ( true ) ) ) ;
ConfigurationShared : : SetColoredTristate ( ui - > cpuopt_unsafe_unfuse_fma ,
Settings : : values . cpuopt_unsafe_unfuse_fma ,
cpuopt_unsafe_unfuse_fma ) ;
ConfigurationShared : : SetColoredTristate ( ui - > cpuopt_unsafe_reduce_fp_error ,
Settings : : values . cpuopt_unsafe_reduce_fp_error ,
cpuopt_unsafe_reduce_fp_error ) ;
ConfigurationShared : : SetColoredTristate ( ui - > cpuopt_unsafe_ignore_standard_fpcr ,
Settings : : values . cpuopt_unsafe_ignore_standard_fpcr ,
cpuopt_unsafe_ignore_standard_fpcr ) ;
ConfigurationShared : : SetColoredTristate ( ui - > cpuopt_unsafe_inaccurate_nan ,
Settings : : values . cpuopt_unsafe_inaccurate_nan ,
cpuopt_unsafe_inaccurate_nan ) ;
ConfigurationShared : : SetColoredTristate ( ui - > cpuopt_unsafe_fastmem_check ,
Settings : : values . cpuopt_unsafe_fastmem_check ,
cpuopt_unsafe_fastmem_check ) ;
ConfigurationShared : : SetColoredTristate ( ui - > cpuopt_unsafe_ignore_global_monitor ,
Settings : : values . cpuopt_unsafe_ignore_global_monitor ,
cpuopt_unsafe_ignore_global_monitor ) ;
}