From c93b4d44348c7a1a1c3f0f835a016663456ef4ce Mon Sep 17 00:00:00 2001 From: Megamouse Date: Sun, 19 Apr 2026 16:52:45 +0200 Subject: [PATCH] Qt: make emu_settings_type cfg_location dynamic --- rpcs3/rpcs3.vcxproj | 1 + rpcs3/rpcs3.vcxproj.filters | 3 + rpcs3/rpcs3qt/CMakeLists.txt | 1 + rpcs3/rpcs3qt/emu_settings.cpp | 2 +- rpcs3/rpcs3qt/emu_settings_type.cpp | 240 ++++++++++++++++++++++++++++ rpcs3/rpcs3qt/emu_settings_type.h | 227 +------------------------- 6 files changed, 250 insertions(+), 224 deletions(-) create mode 100644 rpcs3/rpcs3qt/emu_settings_type.cpp diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj index 0181ce8c84..2ab3e592bc 100644 --- a/rpcs3/rpcs3.vcxproj +++ b/rpcs3/rpcs3.vcxproj @@ -837,6 +837,7 @@ + diff --git a/rpcs3/rpcs3.vcxproj.filters b/rpcs3/rpcs3.vcxproj.filters index 793e695d77..8c5b6b2905 100644 --- a/rpcs3/rpcs3.vcxproj.filters +++ b/rpcs3/rpcs3.vcxproj.filters @@ -1299,6 +1299,9 @@ Gui\utils + + Gui\settings + diff --git a/rpcs3/rpcs3qt/CMakeLists.txt b/rpcs3/rpcs3qt/CMakeLists.txt index fdfb437fe7..0a63343e96 100644 --- a/rpcs3/rpcs3qt/CMakeLists.txt +++ b/rpcs3/rpcs3qt/CMakeLists.txt @@ -22,6 +22,7 @@ add_library(rpcs3_ui STATIC dimensions_dialog.cpp _discord_utils.cpp emu_settings.cpp + emu_settings_type.cpp elf_memory_dumping_dialog.cpp emulated_pad_settings_dialog.cpp emulated_logitech_g27_settings_dialog.cpp diff --git a/rpcs3/rpcs3qt/emu_settings.cpp b/rpcs3/rpcs3qt/emu_settings.cpp index a5bd055432..38fd5d2a94 100644 --- a/rpcs3/rpcs3qt/emu_settings.cpp +++ b/rpcs3/rpcs3qt/emu_settings.cpp @@ -1531,7 +1531,7 @@ QString emu_settings::GetLocalizedSetting(const QString& original, emu_settings_ std::string type_string; if (const auto it = settings_location.find(type); it != settings_location.cend()) { - for (const char* loc : it->second) + for (const std::string& loc : it->second) { if (!type_string.empty()) type_string += ": "; type_string += loc; diff --git a/rpcs3/rpcs3qt/emu_settings_type.cpp b/rpcs3/rpcs3qt/emu_settings_type.cpp new file mode 100644 index 0000000000..4b032c78c5 --- /dev/null +++ b/rpcs3/rpcs3qt/emu_settings_type.cpp @@ -0,0 +1,240 @@ +#include "stdafx.h" +#include "emu_settings_type.h" +#include "Emu/system_config.h" + +const cfg_root local_cfg {}; // Local config to ensure we have an initialized object + +cfg_location get_cfg_location(const cfg::_base& leaf) +{ + cfg_location loc {}; + loc.push_back(leaf.get_name()); + + for (const cfg::_base* node = leaf.get_parent(); node && !node->get_name().empty(); node = node->get_parent()) + { + loc.push_front(node->get_name()); + } + + return loc; +} + +const std::map settings_location = +{ + // Core Tab + { emu_settings_type::PPUDecoder, get_cfg_location(local_cfg.core.ppu_decoder) }, + { emu_settings_type::SPUDecoder, get_cfg_location(local_cfg.core.spu_decoder) }, + { emu_settings_type::HookStaticFuncs, get_cfg_location(local_cfg.core.hook_functions) }, + { emu_settings_type::ThreadSchedulerMode, get_cfg_location(local_cfg.core.thread_scheduler) }, + { emu_settings_type::SPULoopDetection, get_cfg_location(local_cfg.core.spu_loop_detection) }, + { emu_settings_type::PreferredSPUThreads, get_cfg_location(local_cfg.core.preferred_spu_threads) }, + { emu_settings_type::PPUDebug, get_cfg_location(local_cfg.core.ppu_debug) }, + { emu_settings_type::SPUDebug, get_cfg_location(local_cfg.core.spu_debug) }, + { emu_settings_type::MFCDebug, get_cfg_location(local_cfg.core.mfc_debug) }, + { emu_settings_type::MaxLLVMThreads, get_cfg_location(local_cfg.core.llvm_threads) }, + { emu_settings_type::LLVMPrecompilation, get_cfg_location(local_cfg.core.llvm_precompilation) }, + { emu_settings_type::AccurateSpuDMA, get_cfg_location(local_cfg.core.spu_accurate_dma) }, + { emu_settings_type::AccurateClineStores, get_cfg_location(local_cfg.core.accurate_cache_line_stores) }, + { emu_settings_type::AccurateRSXAccess, get_cfg_location(local_cfg.core.rsx_accurate_res_access) }, + { emu_settings_type::FIFOAccuracy, get_cfg_location(local_cfg.core.rsx_fifo_accuracy) }, + { emu_settings_type::XFloatAccuracy, get_cfg_location(local_cfg.core.spu_xfloat_accuracy) }, + { emu_settings_type::MFCCommandsShuffling, get_cfg_location(local_cfg.core.mfc_transfers_shuffling) }, + { emu_settings_type::SetDAZandFTZ, get_cfg_location(local_cfg.core.set_daz_and_ftz) }, + { emu_settings_type::SPUBlockSize, get_cfg_location(local_cfg.core.spu_block_size) }, + { emu_settings_type::SPUCache, get_cfg_location(local_cfg.core.spu_cache) }, + { emu_settings_type::DebugConsoleMode, get_cfg_location(local_cfg.core.debug_console_mode) }, + { emu_settings_type::MaxSPURSThreads, get_cfg_location(local_cfg.core.max_spurs_threads) }, + { emu_settings_type::SleepTimersAccuracy, get_cfg_location(local_cfg.core.sleep_timers_accuracy) }, + { emu_settings_type::ClocksScale, get_cfg_location(local_cfg.core.clocks_scale) }, + { emu_settings_type::AccuratePPU128Loop, get_cfg_location(local_cfg.core.ppu_128_reservations_loop_max_length) }, + { emu_settings_type::PerformanceReport, get_cfg_location(local_cfg.core.perf_report) }, + { emu_settings_type::NumPPUThreads, get_cfg_location(local_cfg.core.ppu_threads) }, + { emu_settings_type::PPUNJFixup, get_cfg_location(local_cfg.core.ppu_llvm_nj_fixup) }, + { emu_settings_type::PPUVNANFixup, get_cfg_location(local_cfg.core.ppu_fix_vnan) }, + { emu_settings_type::AccurateDFMA, get_cfg_location(local_cfg.core.use_accurate_dfma) }, + { emu_settings_type::AccuratePPUSAT, get_cfg_location(local_cfg.core.ppu_set_sat_bit) }, + { emu_settings_type::AccuratePPUNJ, get_cfg_location(local_cfg.core.ppu_use_nj_bit) }, + { emu_settings_type::AccuratePPUVNAN, get_cfg_location(local_cfg.core.ppu_set_vnan) }, + { emu_settings_type::AccuratePPUFPCC, get_cfg_location(local_cfg.core.ppu_set_fpcc) }, + { emu_settings_type::MaxPreemptCount, get_cfg_location(local_cfg.core.max_cpu_preempt_count_per_frame) }, + { emu_settings_type::SPUProfiler, get_cfg_location(local_cfg.core.spu_prof) }, + { emu_settings_type::DisableSpinOptimization, get_cfg_location(local_cfg.core.spu_getllar_spin_optimization_disabled) }, + { emu_settings_type::EnabledSPUEventsBusyLoop, get_cfg_location(local_cfg.core.spu_reservation_busy_waiting_enabled) }, + + // Graphics Tab + { emu_settings_type::Renderer, get_cfg_location(local_cfg.video.renderer) }, + { emu_settings_type::Resolution, get_cfg_location(local_cfg.video.resolution) }, + { emu_settings_type::AspectRatio, get_cfg_location(local_cfg.video.aspect_ratio) }, + { emu_settings_type::FrameLimit, get_cfg_location(local_cfg.video.frame_limit) }, + { emu_settings_type::MSAA, get_cfg_location(local_cfg.video.antialiasing_level) }, + { emu_settings_type::LogShaderPrograms, get_cfg_location(local_cfg.video.log_programs) }, + { emu_settings_type::WriteDepthBuffer, get_cfg_location(local_cfg.video.write_depth_buffer) }, + { emu_settings_type::WriteColorBuffers, get_cfg_location(local_cfg.video.write_color_buffers) }, + { emu_settings_type::ReadColorBuffers, get_cfg_location(local_cfg.video.read_color_buffers) }, + { emu_settings_type::ReadDepthBuffer, get_cfg_location(local_cfg.video.read_depth_buffer) }, + { emu_settings_type::HandleRSXTiledMemory, get_cfg_location(local_cfg.video.handle_tiled_memory) }, + { emu_settings_type::VSync, get_cfg_location(local_cfg.video.vsync) }, + { emu_settings_type::DebugOutput, get_cfg_location(local_cfg.video.debug_output) }, + { emu_settings_type::DebugOverlay, get_cfg_location(local_cfg.video.debug_overlay) }, + { emu_settings_type::RenderdocCompatibility, get_cfg_location(local_cfg.video.renderdoc_compatiblity) }, + { emu_settings_type::GPUTextureScaling, get_cfg_location(local_cfg.video.use_gpu_texture_scaling) }, + { emu_settings_type::StretchToDisplayArea, get_cfg_location(local_cfg.video.stretch_to_display_area) }, + { emu_settings_type::ForceHighpZ, get_cfg_location(local_cfg.video.force_high_precision_z_buffer) }, + { emu_settings_type::StrictRenderingMode, get_cfg_location(local_cfg.video.strict_rendering_mode) }, + { emu_settings_type::DisableVertexCache, get_cfg_location(local_cfg.video.disable_vertex_cache) }, + { emu_settings_type::DisableOcclusionQueries, get_cfg_location(local_cfg.video.disable_zcull_queries) }, + { emu_settings_type::DisableVideoOutput, get_cfg_location(local_cfg.video.disable_video_output) }, + { emu_settings_type::DisableFIFOReordering, get_cfg_location(local_cfg.video.disable_FIFO_reordering) }, + { emu_settings_type::StereoRenderEnabled, get_cfg_location(local_cfg.video.stereo_enabled) }, + { emu_settings_type::StereoRenderMode, get_cfg_location(local_cfg.video.stereo_render_mode) }, + { emu_settings_type::ScreenSize, get_cfg_location(local_cfg.video.screen_size) }, + { emu_settings_type::StrictTextureFlushing, get_cfg_location(local_cfg.video.strict_texture_flushing) }, + { emu_settings_type::ForceCPUBlitEmulation, get_cfg_location(local_cfg.video.force_cpu_blit_processing) }, + { emu_settings_type::DisableOnDiskShaderCache, get_cfg_location(local_cfg.video.disable_on_disk_shader_cache) }, + { emu_settings_type::DisableVulkanMemAllocator, get_cfg_location(local_cfg.video.disable_vulkan_mem_allocator) }, + { emu_settings_type::ShaderMode, get_cfg_location(local_cfg.video.shadermode) }, + { emu_settings_type::ShaderCompilerNumThreads, get_cfg_location(local_cfg.video.shader_compiler_threads_count) }, + { emu_settings_type::ShaderPrecisionQuality, get_cfg_location(local_cfg.video.shader_precision) }, + { emu_settings_type::MultithreadedRSX, get_cfg_location(local_cfg.video.multithreaded_rsx) }, + { emu_settings_type::RelaxedZCULL, get_cfg_location(local_cfg.video.relaxed_zcull_sync) }, + { emu_settings_type::PreciseZCULL, get_cfg_location(local_cfg.video.precise_zpass_count) }, + { emu_settings_type::AnisotropicFilterOverride, get_cfg_location(local_cfg.video.anisotropic_level_override) }, + { emu_settings_type::TextureLodBias, get_cfg_location(local_cfg.video.texture_lod_bias) }, + { emu_settings_type::ResolutionScale, get_cfg_location(local_cfg.video.resolution_scale_percent) }, + { emu_settings_type::MinimumScalableDimension, get_cfg_location(local_cfg.video.min_scalable_dimension) }, + { emu_settings_type::VBlankRate, get_cfg_location(local_cfg.video.vblank_rate) }, + { emu_settings_type::VBlankNTSCFixup, get_cfg_location(local_cfg.video.vblank_ntsc) }, + { emu_settings_type::DriverWakeUpDelay, get_cfg_location(local_cfg.video.driver_wakeup_delay) }, + { emu_settings_type::AllowHostGPULabels, get_cfg_location(local_cfg.video.host_label_synchronization) }, + { emu_settings_type::DisableMSLFastMath, get_cfg_location(local_cfg.video.disable_msl_fast_math) }, + { emu_settings_type::OutputScalingMode, get_cfg_location(local_cfg.video.output_scaling) }, + { emu_settings_type::ForceHwMSAAResolve, get_cfg_location(local_cfg.video.force_hw_MSAA_resolve) }, + { emu_settings_type::DisableAsyncHostMM, get_cfg_location(local_cfg.video.disable_async_host_memory_manager) }, + { emu_settings_type::RecordWithOverlays, get_cfg_location(local_cfg.video.record_with_overlays) }, + { emu_settings_type::DisableHWTexelRemapping, get_cfg_location(local_cfg.video.disable_hardware_texel_remapping) }, + { emu_settings_type::FsrSharpeningStrength, get_cfg_location(local_cfg.video.rcas_sharpening_intensity) }, + + // Vulkan + { emu_settings_type::VulkanAdapter, get_cfg_location(local_cfg.video.vk.adapter) }, + { emu_settings_type::VulkanAsyncTextureUploads, get_cfg_location(local_cfg.video.vk.asynchronous_texture_streaming) }, + { emu_settings_type::VulkanAsyncSchedulerDriver, get_cfg_location(local_cfg.video.vk.asynchronous_scheduler) }, + { emu_settings_type::ExclusiveFullscreenMode, get_cfg_location(local_cfg.video.vk.exclusive_fullscreen_mode) }, + { emu_settings_type::UseReBAR, get_cfg_location(local_cfg.video.vk.use_rebar_upload_heap) }, + + // Performance Overlay + { emu_settings_type::PerfOverlayEnabled, get_cfg_location(local_cfg.video.perf_overlay.enabled) }, + { emu_settings_type::PerfOverlayFramerateGraphEnabled, get_cfg_location(local_cfg.video.perf_overlay.framerate_graph_enabled) }, + { emu_settings_type::PerfOverlayFrametimeGraphEnabled, get_cfg_location(local_cfg.video.perf_overlay.frametime_graph_enabled) }, + { emu_settings_type::PerfOverlayFramerateDatapoints, get_cfg_location(local_cfg.video.perf_overlay.framerate_datapoint_count) }, + { emu_settings_type::PerfOverlayFrametimeDatapoints, get_cfg_location(local_cfg.video.perf_overlay.frametime_datapoint_count) }, + { emu_settings_type::PerfOverlayDetailLevel, get_cfg_location(local_cfg.video.perf_overlay.level) }, + { emu_settings_type::PerfOverlayFramerateDetailLevel, get_cfg_location(local_cfg.video.perf_overlay.framerate_graph_detail_level) }, + { emu_settings_type::PerfOverlayFrametimeDetailLevel, get_cfg_location(local_cfg.video.perf_overlay.frametime_graph_detail_level) }, + { emu_settings_type::PerfOverlayPosition, get_cfg_location(local_cfg.video.perf_overlay.position) }, + { emu_settings_type::PerfOverlayUpdateInterval, get_cfg_location(local_cfg.video.perf_overlay.update_interval) }, + { emu_settings_type::PerfOverlayFontSize, get_cfg_location(local_cfg.video.perf_overlay.font_size) }, + { emu_settings_type::PerfOverlayOpacity, get_cfg_location(local_cfg.video.perf_overlay.opacity) }, + { emu_settings_type::PerfOverlayMarginX, get_cfg_location(local_cfg.video.perf_overlay.margin_x) }, + { emu_settings_type::PerfOverlayMarginY, get_cfg_location(local_cfg.video.perf_overlay.margin_y) }, + { emu_settings_type::PerfOverlayCenterX, get_cfg_location(local_cfg.video.perf_overlay.center_x) }, + { emu_settings_type::PerfOverlayCenterY, get_cfg_location(local_cfg.video.perf_overlay.center_y) }, + { emu_settings_type::PerfOverlayUseWindowSpace, get_cfg_location(local_cfg.video.perf_overlay.use_window_space) }, + + // Shader Loading Dialog + { emu_settings_type::ShaderLoadBgEnabled, get_cfg_location(local_cfg.video.shader_preloading_dialog.use_custom_background) }, + { emu_settings_type::ShaderLoadBgDarkening, get_cfg_location(local_cfg.video.shader_preloading_dialog.darkening_strength) }, + { emu_settings_type::ShaderLoadBgBlur, get_cfg_location(local_cfg.video.shader_preloading_dialog.blur_strength) }, + + // Audio + { emu_settings_type::AudioRenderer, get_cfg_location(local_cfg.audio.renderer) }, + { emu_settings_type::DumpToFile, get_cfg_location(local_cfg.audio.dump_to_file) }, + { emu_settings_type::ConvertTo16Bit, get_cfg_location(local_cfg.audio.convert_to_s16) }, + { emu_settings_type::AudioFormat, get_cfg_location(local_cfg.audio.format) }, + { emu_settings_type::AudioFormats, get_cfg_location(local_cfg.audio.formats) }, + { emu_settings_type::AudioProvider, get_cfg_location(local_cfg.audio.provider) }, + { emu_settings_type::AudioAvport, get_cfg_location(local_cfg.audio.rsxaudio_port) }, + { emu_settings_type::AudioDevice, get_cfg_location(local_cfg.audio.audio_device) }, + { emu_settings_type::AudioChannelLayout, get_cfg_location(local_cfg.audio.channel_layout) }, + { emu_settings_type::MasterVolume, get_cfg_location(local_cfg.audio.volume) }, + { emu_settings_type::EnableBuffering, get_cfg_location(local_cfg.audio.enable_buffering) }, + { emu_settings_type::AudioBufferDuration, get_cfg_location(local_cfg.audio.desired_buffer_duration) }, + { emu_settings_type::EnableTimeStretching, get_cfg_location(local_cfg.audio.enable_time_stretching) }, + { emu_settings_type::TimeStretchingThreshold, get_cfg_location(local_cfg.audio.time_stretching_threshold) }, + { emu_settings_type::MicrophoneType, get_cfg_location(local_cfg.audio.microphone_type) }, + { emu_settings_type::MicrophoneDevices, get_cfg_location(local_cfg.audio.microphone_devices) }, + { emu_settings_type::MusicHandler, get_cfg_location(local_cfg.audio.music) }, + + // Input / Output + { emu_settings_type::BackgroundInput, get_cfg_location(local_cfg.io.background_input_enabled) }, + { emu_settings_type::ShowMoveCursor, get_cfg_location(local_cfg.io.show_move_cursor) }, + { emu_settings_type::LockOvlIptToP1, get_cfg_location(local_cfg.io.lock_overlay_input_to_player_one) }, + { emu_settings_type::PadHandlerMode, get_cfg_location(local_cfg.io.pad_mode) }, + { emu_settings_type::PadConnection, get_cfg_location(local_cfg.io.keep_pads_connected) }, + { emu_settings_type::KeyboardHandler, get_cfg_location(local_cfg.io.keyboard) }, + { emu_settings_type::MouseHandler, get_cfg_location(local_cfg.io.mouse) }, + { emu_settings_type::Camera, get_cfg_location(local_cfg.io.camera) }, + { emu_settings_type::CameraType, get_cfg_location(local_cfg.io.camera_type) }, + { emu_settings_type::CameraFlip, get_cfg_location(local_cfg.io.camera_flip_option) }, + { emu_settings_type::CameraID, get_cfg_location(local_cfg.io.camera_id) }, + { emu_settings_type::Move, get_cfg_location(local_cfg.io.move) }, + { emu_settings_type::Buzz, get_cfg_location(local_cfg.io.buzz) }, + { emu_settings_type::Turntable, get_cfg_location(local_cfg.io.turntable) }, + { emu_settings_type::GHLtar, get_cfg_location(local_cfg.io.ghltar) }, + { emu_settings_type::MidiDevices, get_cfg_location(local_cfg.io.midi_devices) }, + { emu_settings_type::SDLMappings, get_cfg_location(local_cfg.io.load_sdl_mappings) }, + { emu_settings_type::IoDebugOverlay, get_cfg_location(local_cfg.io.pad_debug_overlay) }, + { emu_settings_type::MouseDebugOverlay, get_cfg_location(local_cfg.io.mouse_debug_overlay) }, + + // Misc + { emu_settings_type::ExitRPCS3OnFinish, get_cfg_location(local_cfg.misc.autoexit) }, + { emu_settings_type::StartOnBoot, get_cfg_location(local_cfg.misc.autostart) }, + { emu_settings_type::PauseOnFocusLoss, get_cfg_location(local_cfg.misc.autopause) }, + { emu_settings_type::StartGameFullscreen, get_cfg_location(local_cfg.misc.start_fullscreen) }, + { emu_settings_type::PreventDisplaySleep, get_cfg_location(local_cfg.misc.prevent_display_sleep) }, + { emu_settings_type::ShowTrophyPopups, get_cfg_location(local_cfg.misc.show_trophy_popups) }, + { emu_settings_type::ShowRpcnPopups, get_cfg_location(local_cfg.misc.show_rpcn_popups) }, + { emu_settings_type::UseNativeInterface, get_cfg_location(local_cfg.misc.use_native_interface) }, + { emu_settings_type::ShowShaderCompilationHint, get_cfg_location(local_cfg.misc.show_shader_compilation_hint) }, + { emu_settings_type::ShowPPUCompilationHint, get_cfg_location(local_cfg.misc.show_ppu_compilation_hint) }, + { emu_settings_type::ShowAutosaveAutoloadHint, get_cfg_location(local_cfg.misc.show_autosave_autoload_hint) }, + { emu_settings_type::ShowPressureIntensityToggleHint, get_cfg_location(local_cfg.misc.show_pressure_intensity_toggle_hint) }, + { emu_settings_type::ShowAnalogLimiterToggleHint, get_cfg_location(local_cfg.misc.show_analog_limiter_toggle_hint) }, + { emu_settings_type::ShowMouseAndKeyboardToggleHint, get_cfg_location(local_cfg.misc.show_mouse_and_keyboard_toggle_hint) }, + { emu_settings_type::ShowFatalErrorHints, get_cfg_location(local_cfg.misc.show_fatal_error_hints) }, + { emu_settings_type::ShowCaptureHints, get_cfg_location(local_cfg.misc.show_capture_hints) }, + { emu_settings_type::SilenceAllLogs, get_cfg_location(local_cfg.misc.silence_all_logs) }, + { emu_settings_type::WindowTitleFormat, get_cfg_location(local_cfg.misc.title_format) }, + { emu_settings_type::PauseDuringHomeMenu, get_cfg_location(local_cfg.misc.pause_during_home_menu) }, + { emu_settings_type::PlayMusicDuringBoot, get_cfg_location(local_cfg.misc.play_music_during_boot) }, + { emu_settings_type::EnableGamemode, get_cfg_location(local_cfg.misc.enable_gamemode) }, + + // Networking + { emu_settings_type::InternetStatus, get_cfg_location(local_cfg.net.net_active) }, + { emu_settings_type::DNSAddress, get_cfg_location(local_cfg.net.dns) }, + { emu_settings_type::IpSwapList, get_cfg_location(local_cfg.net.swap_list) }, + { emu_settings_type::PSNStatus, get_cfg_location(local_cfg.net.psn_status) }, + { emu_settings_type::BindAddress, get_cfg_location(local_cfg.net.bind_address) }, + { emu_settings_type::EnableUpnp, get_cfg_location(local_cfg.net.upnp_enabled) }, + { emu_settings_type::PSNCountry, get_cfg_location(local_cfg.net.country) }, + { emu_settings_type::EnableClans, get_cfg_location(local_cfg.net.clans_enabled) }, + + // System + { emu_settings_type::LicenseArea, get_cfg_location(local_cfg.sys.license_area) }, + { emu_settings_type::Language, get_cfg_location(local_cfg.sys.language) }, + { emu_settings_type::KeyboardType, get_cfg_location(local_cfg.sys.keyboard_type) }, + { emu_settings_type::EnterButtonAssignment, get_cfg_location(local_cfg.sys.enter_button_assignment) }, + { emu_settings_type::DateFormat, get_cfg_location(local_cfg.sys.date_fmt) }, + { emu_settings_type::TimeFormat, get_cfg_location(local_cfg.sys.time_fmt) }, + { emu_settings_type::ConsoleTimeOffset, get_cfg_location(local_cfg.sys.console_time_offset) }, + + { emu_settings_type::EnableHostRoot, get_cfg_location(local_cfg.vfs.host_root) }, + { emu_settings_type::EmptyHdd0Tmp, get_cfg_location(local_cfg.vfs.empty_hdd0_tmp) }, + { emu_settings_type::LimitCacheSize, get_cfg_location(local_cfg.vfs.limit_cache_size) }, + { emu_settings_type::MaximumCacheSize, get_cfg_location(local_cfg.vfs.cache_max_size) }, + + // Savestates + { emu_settings_type::SuspendEmulationSavestateMode, get_cfg_location(local_cfg.savestate.suspend_emu) }, + { emu_settings_type::CompatibleEmulationSavestateMode, get_cfg_location(local_cfg.savestate.compatible_mode) }, + { emu_settings_type::StartSavestatePaused, get_cfg_location(local_cfg.savestate.start_paused) }, + + // Logs + { emu_settings_type::Log, get_cfg_location(local_cfg.log)}, +}; diff --git a/rpcs3/rpcs3qt/emu_settings_type.h b/rpcs3/rpcs3qt/emu_settings_type.h index 6f6589c893..de04b81e85 100644 --- a/rpcs3/rpcs3qt/emu_settings_type.h +++ b/rpcs3/rpcs3qt/emu_settings_type.h @@ -1,10 +1,11 @@ #pragma once +#include #include -#include +#include // Node location -using cfg_location = std::vector; +using cfg_location = std::deque; enum class emu_settings_type { @@ -226,224 +227,4 @@ enum class emu_settings_type }; /** A helper map that keeps track of where a given setting type is located*/ -inline static const std::map settings_location = -{ - // Core Tab - { emu_settings_type::PPUDecoder, { "Core", "PPU Decoder"}}, - { emu_settings_type::SPUDecoder, { "Core", "SPU Decoder"}}, - { emu_settings_type::HookStaticFuncs, { "Core", "Hook static functions"}}, - { emu_settings_type::ThreadSchedulerMode, { "Core", "Thread Scheduler Mode"}}, - { emu_settings_type::SPULoopDetection, { "Core", "SPU loop detection"}}, - { emu_settings_type::PreferredSPUThreads, { "Core", "Preferred SPU Threads"}}, - { emu_settings_type::PPUDebug, { "Core", "PPU Debug"}}, - { emu_settings_type::SPUDebug, { "Core", "SPU Debug"}}, - { emu_settings_type::MFCDebug, { "Core", "MFC Debug"}}, - { emu_settings_type::MaxLLVMThreads, { "Core", "Max LLVM Compile Threads"}}, - { emu_settings_type::LLVMPrecompilation, { "Core", "LLVM Precompilation"}}, - { emu_settings_type::AccurateSpuDMA, { "Core", "Accurate SPU DMA"}}, - { emu_settings_type::AccurateClineStores, { "Core", "Accurate Cache Line Stores"}}, - { emu_settings_type::AccurateRSXAccess, { "Core", "Accurate RSX reservation access"}}, - { emu_settings_type::FIFOAccuracy, { "Core", "RSX FIFO Fetch Accuracy"}}, - { emu_settings_type::XFloatAccuracy, { "Core", "SPU XFloat Accuracy"}}, - { emu_settings_type::MFCCommandsShuffling, { "Core", "MFC Commands Shuffling Limit"}}, - { emu_settings_type::SetDAZandFTZ, { "Core", "Set DAZ and FTZ"}}, - { emu_settings_type::SPUBlockSize, { "Core", "SPU Block Size"}}, - { emu_settings_type::SPUCache, { "Core", "SPU Cache"}}, - { emu_settings_type::DebugConsoleMode, { "Core", "Debug Console Mode"}}, - { emu_settings_type::MaxSPURSThreads, { "Core", "Max SPURS Threads"}}, - { emu_settings_type::SleepTimersAccuracy, { "Core", "Sleep Timers Accuracy"}}, - { emu_settings_type::ClocksScale, { "Core", "Clocks scale"}}, - { emu_settings_type::AccuratePPU128Loop, { "Core", "Accurate PPU 128-byte Reservation Op Max Length"}}, - { emu_settings_type::PerformanceReport, { "Core", "Enable Performance Report"}}, - { emu_settings_type::NumPPUThreads, { "Core", "PPU Threads"}}, - { emu_settings_type::PPUNJFixup, { "Core", "PPU LLVM Java Mode Handling"}}, - { emu_settings_type::PPUVNANFixup, { "Core", "PPU Vector NaN Handling"}}, - { emu_settings_type::AccurateDFMA, { "Core", "Use Accurate DFMA"}}, - { emu_settings_type::AccuratePPUSAT, { "Core", "PPU Set Saturation Bit"}}, - { emu_settings_type::AccuratePPUNJ, { "Core", "PPU Accurate Non-Java Mode"}}, - { emu_settings_type::AccuratePPUVNAN, { "Core", "PPU Accurate Vector NaN Values"}}, - { emu_settings_type::AccuratePPUFPCC, { "Core", "PPU Set FPCC Bits"}}, - { emu_settings_type::MaxPreemptCount, { "Core", "Max CPU Preempt Count"}}, - { emu_settings_type::SPUProfiler, { "Core", "SPU Profiler"}}, - { emu_settings_type::DisableSpinOptimization, { "Core", "Disable SPU GETLLAR Spin Optimization"}}, - { emu_settings_type::EnabledSPUEventsBusyLoop, { "Core", "SPU Reservation Busy Waiting Enabled"}}, - - // Graphics Tab - { emu_settings_type::Renderer, { "Video", "Renderer"}}, - { emu_settings_type::Resolution, { "Video", "Resolution"}}, - { emu_settings_type::AspectRatio, { "Video", "Aspect ratio"}}, - { emu_settings_type::FrameLimit, { "Video", "Frame limit"}}, - { emu_settings_type::MSAA, { "Video", "MSAA"}}, - { emu_settings_type::LogShaderPrograms, { "Video", "Log shader programs"}}, - { emu_settings_type::WriteDepthBuffer, { "Video", "Write Depth Buffer"}}, - { emu_settings_type::WriteColorBuffers, { "Video", "Write Color Buffers"}}, - { emu_settings_type::ReadColorBuffers, { "Video", "Read Color Buffers"}}, - { emu_settings_type::ReadDepthBuffer, { "Video", "Read Depth Buffer"}}, - { emu_settings_type::HandleRSXTiledMemory, { "Video", "Handle RSX Memory Tiling"}}, - { emu_settings_type::VSync, { "Video", "VSync Mode"}}, - { emu_settings_type::DebugOutput, { "Video", "Debug output"}}, - { emu_settings_type::DebugOverlay, { "Video", "Debug overlay"}}, - { emu_settings_type::RenderdocCompatibility, { "Video", "Renderdoc Compatibility Mode"}}, - { emu_settings_type::GPUTextureScaling, { "Video", "Use GPU texture scaling"}}, - { emu_settings_type::StretchToDisplayArea, { "Video", "Stretch To Display Area"}}, - { emu_settings_type::ForceHighpZ, { "Video", "Force High Precision Z buffer"}}, - { emu_settings_type::StrictRenderingMode, { "Video", "Strict Rendering Mode"}}, - { emu_settings_type::DisableVertexCache, { "Video", "Disable Vertex Cache"}}, - { emu_settings_type::DisableOcclusionQueries, { "Video", "Disable ZCull Occlusion Queries"}}, - { emu_settings_type::DisableVideoOutput, { "Video", "Disable Video Output"}}, - { emu_settings_type::DisableFIFOReordering, { "Video", "Disable FIFO Reordering"}}, - { emu_settings_type::StereoRenderEnabled, { "Video", "3D Display Enabled"}}, - { emu_settings_type::StereoRenderMode, { "Video", "3D Display Mode"}}, - { emu_settings_type::ScreenSize, { "Video", "Screen size in inches"}}, - { emu_settings_type::StrictTextureFlushing, { "Video", "Strict Texture Flushing"}}, - { emu_settings_type::ForceCPUBlitEmulation, { "Video", "Force CPU Blit"}}, - { emu_settings_type::DisableOnDiskShaderCache, { "Video", "Disable On-Disk Shader Cache"}}, - { emu_settings_type::DisableVulkanMemAllocator, { "Video", "Disable Vulkan Memory Allocator"}}, - { emu_settings_type::ShaderMode, { "Video", "Shader Mode"}}, - { emu_settings_type::ShaderCompilerNumThreads, { "Video", "Shader Compiler Threads"}}, - { emu_settings_type::ShaderPrecisionQuality, { "Video", "Shader Precision"}}, - { emu_settings_type::MultithreadedRSX, { "Video", "Multithreaded RSX"}}, - { emu_settings_type::RelaxedZCULL, { "Video", "Relaxed ZCULL Sync"}}, - { emu_settings_type::PreciseZCULL, { "Video", "Accurate ZCULL stats"}}, - { emu_settings_type::AnisotropicFilterOverride, { "Video", "Anisotropic Filter Override"}}, - { emu_settings_type::TextureLodBias, { "Video", "Texture LOD Bias Addend"}}, - { emu_settings_type::ResolutionScale, { "Video", "Resolution Scale"}}, - { emu_settings_type::MinimumScalableDimension, { "Video", "Minimum Scalable Dimension"}}, - { emu_settings_type::VulkanAdapter, { "Video", "Vulkan", "Adapter"}}, - { emu_settings_type::VBlankRate, { "Video", "Vblank Rate"}}, - { emu_settings_type::VBlankNTSCFixup, { "Video", "Vblank NTSC Fixup"}}, - { emu_settings_type::DriverWakeUpDelay, { "Video", "Driver Wake-Up Delay"}}, - { emu_settings_type::AllowHostGPULabels, { "Video", "Allow Host GPU Labels"}}, - { emu_settings_type::DisableMSLFastMath, { "Video", "Disable MSL Fast Math"}}, - { emu_settings_type::OutputScalingMode, { "Video", "Output Scaling Mode"}}, - { emu_settings_type::ForceHwMSAAResolve, { "Video", "Force Hardware MSAA Resolve"}}, - { emu_settings_type::DisableAsyncHostMM, { "Video", "Disable Asynchronous Memory Manager"}}, - { emu_settings_type::RecordWithOverlays, { "Video", "Record With Overlays"}}, - { emu_settings_type::DisableHWTexelRemapping, { "Video", "Disable Hardware ColorSpace Remapping"}}, - { emu_settings_type::FsrSharpeningStrength, { "Video", "FidelityFX CAS Sharpening Intensity"}}, - - // Vulkan - { emu_settings_type::VulkanAsyncTextureUploads, { "Video", "Vulkan", "Asynchronous Texture Streaming"}}, - { emu_settings_type::VulkanAsyncSchedulerDriver, { "Video", "Vulkan", "Asynchronous Queue Scheduler"}}, - { emu_settings_type::ExclusiveFullscreenMode, { "Video", "Vulkan", "Exclusive Fullscreen Mode"}}, - { emu_settings_type::UseReBAR, { "Video", "Vulkan", "Use Re-BAR for GPU uploads"}}, - - // Performance Overlay - { emu_settings_type::PerfOverlayEnabled, { "Video", "Performance Overlay", "Enabled" } }, - { emu_settings_type::PerfOverlayFramerateGraphEnabled, { "Video", "Performance Overlay", "Enable Framerate Graph" } }, - { emu_settings_type::PerfOverlayFrametimeGraphEnabled, { "Video", "Performance Overlay", "Enable Frametime Graph" } }, - { emu_settings_type::PerfOverlayFramerateDatapoints, { "Video", "Performance Overlay", "Framerate datapoints" } }, - { emu_settings_type::PerfOverlayFrametimeDatapoints, { "Video", "Performance Overlay", "Frametime datapoints" } }, - { emu_settings_type::PerfOverlayDetailLevel, { "Video", "Performance Overlay", "Detail level" } }, - { emu_settings_type::PerfOverlayFramerateDetailLevel, { "Video", "Performance Overlay", "Framerate graph detail level" } }, - { emu_settings_type::PerfOverlayFrametimeDetailLevel, { "Video", "Performance Overlay", "Frametime graph detail level" } }, - { emu_settings_type::PerfOverlayPosition, { "Video", "Performance Overlay", "Position" } }, - { emu_settings_type::PerfOverlayUpdateInterval, { "Video", "Performance Overlay", "Metrics update interval (ms)" } }, - { emu_settings_type::PerfOverlayFontSize, { "Video", "Performance Overlay", "Font size (px)" } }, - { emu_settings_type::PerfOverlayOpacity, { "Video", "Performance Overlay", "Opacity (%)" } }, - { emu_settings_type::PerfOverlayMarginX, { "Video", "Performance Overlay", "Horizontal Margin (%)" } }, - { emu_settings_type::PerfOverlayMarginY, { "Video", "Performance Overlay", "Vertical Margin (%)" } }, - { emu_settings_type::PerfOverlayCenterX, { "Video", "Performance Overlay", "Center Horizontally" } }, - { emu_settings_type::PerfOverlayCenterY, { "Video", "Performance Overlay", "Center Vertically" } }, - { emu_settings_type::PerfOverlayUseWindowSpace, { "Video", "Performance Overlay", "Use Window Space"}}, - - // Shader Loading Dialog - { emu_settings_type::ShaderLoadBgEnabled, { "Video", "Shader Loading Dialog", "Allow custom background" } }, - { emu_settings_type::ShaderLoadBgDarkening, { "Video", "Shader Loading Dialog", "Darkening effect strength" } }, - { emu_settings_type::ShaderLoadBgBlur, { "Video", "Shader Loading Dialog", "Blur effect strength" } }, - - // Audio - { emu_settings_type::AudioRenderer, { "Audio", "Renderer"}}, - { emu_settings_type::DumpToFile, { "Audio", "Dump to file"}}, - { emu_settings_type::ConvertTo16Bit, { "Audio", "Convert to 16 bit"}}, - { emu_settings_type::AudioFormat, { "Audio", "Audio Format"}}, - { emu_settings_type::AudioFormats, { "Audio", "Audio Formats"}}, - { emu_settings_type::AudioProvider, { "Audio", "Audio Provider"}}, - { emu_settings_type::AudioAvport, { "Audio", "RSXAudio Avport"}}, - { emu_settings_type::AudioDevice, { "Audio", "Audio Device"}}, - { emu_settings_type::AudioChannelLayout, { "Audio", "Audio Channel Layout"}}, - { emu_settings_type::MasterVolume, { "Audio", "Master Volume"}}, - { emu_settings_type::EnableBuffering, { "Audio", "Enable Buffering"}}, - { emu_settings_type::AudioBufferDuration, { "Audio", "Desired Audio Buffer Duration"}}, - { emu_settings_type::EnableTimeStretching, { "Audio", "Enable Time Stretching"}}, - { emu_settings_type::TimeStretchingThreshold, { "Audio", "Time Stretching Threshold"}}, - { emu_settings_type::MicrophoneType, { "Audio", "Microphone Type" }}, - { emu_settings_type::MicrophoneDevices, { "Audio", "Microphone Devices" }}, - { emu_settings_type::MusicHandler, { "Audio", "Music Handler"}}, - - // Input / Output - { emu_settings_type::BackgroundInput, { "Input/Output", "Background input enabled"}}, - { emu_settings_type::ShowMoveCursor, { "Input/Output", "Show move cursor"}}, - { emu_settings_type::LockOvlIptToP1, { "Input/Output", "Lock overlay input to player one"}}, - { emu_settings_type::PadHandlerMode, { "Input/Output", "Pad handler mode"}}, - { emu_settings_type::PadConnection, { "Input/Output", "Keep pads connected" }}, - { emu_settings_type::KeyboardHandler, { "Input/Output", "Keyboard"}}, - { emu_settings_type::MouseHandler, { "Input/Output", "Mouse"}}, - { emu_settings_type::Camera, { "Input/Output", "Camera"}}, - { emu_settings_type::CameraType, { "Input/Output", "Camera type"}}, - { emu_settings_type::CameraFlip, { "Input/Output", "Camera flip"}}, - { emu_settings_type::CameraID, { "Input/Output", "Camera ID"}}, - { emu_settings_type::Move, { "Input/Output", "Move" }}, - { emu_settings_type::Buzz, { "Input/Output", "Buzz emulated controller" }}, - { emu_settings_type::Turntable, { "Input/Output", "Turntable emulated controller" }}, - { emu_settings_type::GHLtar, { "Input/Output", "GHLtar emulated controller" }}, - { emu_settings_type::MidiDevices, { "Input/Output", "Emulated Midi devices" }}, - { emu_settings_type::SDLMappings, { "Input/Output", "Load SDL GameController Mappings" }}, - { emu_settings_type::IoDebugOverlay, { "Input/Output", "IO Debug overlay" }}, - { emu_settings_type::MouseDebugOverlay, { "Input/Output", "Mouse Debug overlay" }}, - - // Misc - { emu_settings_type::ExitRPCS3OnFinish, { "Miscellaneous", "Exit RPCS3 when process finishes" }}, - { emu_settings_type::StartOnBoot, { "Miscellaneous", "Automatically start games after boot" }}, - { emu_settings_type::PauseOnFocusLoss, { "Miscellaneous", "Pause emulation on RPCS3 focus loss" }}, - { emu_settings_type::StartGameFullscreen, { "Miscellaneous", "Start games in fullscreen mode"}}, - { emu_settings_type::PreventDisplaySleep, { "Miscellaneous", "Prevent display sleep while running games"}}, - { emu_settings_type::ShowTrophyPopups, { "Miscellaneous", "Show trophy popups"}}, - { emu_settings_type::ShowRpcnPopups, { "Miscellaneous", "Show RPCN popups"}}, - { emu_settings_type::UseNativeInterface, { "Miscellaneous", "Use native user interface"}}, - { emu_settings_type::ShowShaderCompilationHint, { "Miscellaneous", "Show shader compilation hint"}}, - { emu_settings_type::ShowPPUCompilationHint, { "Miscellaneous", "Show PPU compilation hint"}}, - { emu_settings_type::ShowAutosaveAutoloadHint, { "Miscellaneous", "Show autosave/autoload hint"}}, - { emu_settings_type::ShowPressureIntensityToggleHint, { "Miscellaneous", "Show pressure intensity toggle hint"}}, - { emu_settings_type::ShowAnalogLimiterToggleHint, { "Miscellaneous", "Show analog limiter toggle hint"}}, - { emu_settings_type::ShowMouseAndKeyboardToggleHint, { "Miscellaneous", "Show mouse and keyboard toggle hint"}}, - { emu_settings_type::ShowFatalErrorHints, { "Miscellaneous", "Show fatal error hints"}}, - { emu_settings_type::ShowCaptureHints, { "Miscellaneous", "Show capture hints" }}, - { emu_settings_type::SilenceAllLogs, { "Miscellaneous", "Silence All Logs" }}, - { emu_settings_type::WindowTitleFormat, { "Miscellaneous", "Window Title Format" }}, - { emu_settings_type::PauseDuringHomeMenu, { "Miscellaneous", "Pause Emulation During Home Menu" }}, - { emu_settings_type::PlayMusicDuringBoot, { "Miscellaneous", "Play music during boot sequence" }}, - { emu_settings_type::EnableGamemode, { "Miscellaneous", "Enable GameMode" }}, - - // Networking - { emu_settings_type::InternetStatus, { "Net", "Internet enabled"}}, - { emu_settings_type::DNSAddress, { "Net", "DNS address"}}, - { emu_settings_type::IpSwapList, { "Net", "IP swap list"}}, - { emu_settings_type::PSNStatus, { "Net", "PSN status"}}, - { emu_settings_type::BindAddress, { "Net", "Bind address"}}, - { emu_settings_type::EnableUpnp, { "Net", "UPNP Enabled"}}, - { emu_settings_type::PSNCountry, { "Net", "PSN Country"}}, - { emu_settings_type::EnableClans, { "Net", "Clans Enabled"}}, - - // System - { emu_settings_type::LicenseArea, { "System", "License Area"}}, - { emu_settings_type::Language, { "System", "Language"}}, - { emu_settings_type::KeyboardType, { "System", "Keyboard Type"}}, - { emu_settings_type::EnterButtonAssignment, { "System", "Enter button assignment"}}, - { emu_settings_type::DateFormat, { "System", "Date Format"}}, - { emu_settings_type::TimeFormat, { "System", "Time Format"}}, - { emu_settings_type::ConsoleTimeOffset, { "System", "Console time offset (s)"}}, - - { emu_settings_type::EnableHostRoot, { "VFS", "Enable /host_root/"}}, - { emu_settings_type::EmptyHdd0Tmp, { "VFS", "Empty /dev_hdd0/tmp/"}}, - { emu_settings_type::LimitCacheSize, { "VFS", "Limit disk cache size"}}, - { emu_settings_type::MaximumCacheSize, { "VFS", "Disk cache maximum size (MB)"}}, - - // Savestates - { emu_settings_type::SuspendEmulationSavestateMode, { "Savestate", "Suspend Emulation Savestate Mode" }}, - { emu_settings_type::CompatibleEmulationSavestateMode, { "Savestate", "Compatible Savestate Mode" }}, - { emu_settings_type::StartSavestatePaused, { "Savestate", "Start Paused" }}, - - // Logs - { emu_settings_type::Log, { "Log" }}, -}; +extern const std::map settings_location;