2014-09-12 19:06:13 -05:00
|
|
|
// Copyright 2014 Citra Emulator Project
|
2014-12-16 23:38:14 -06:00
|
|
|
// Licensed under GPLv2 or any later version
|
2014-09-12 19:06:13 -05:00
|
|
|
// Refer to the license.txt file included.
|
|
|
|
|
2020-07-19 08:07:16 -05:00
|
|
|
#include <string_view>
|
2018-12-28 18:24:56 -06:00
|
|
|
#include <utility>
|
2017-12-20 12:44:32 -06:00
|
|
|
#include "audio_core/dsp_interface.h"
|
|
|
|
#include "core/core.h"
|
2016-04-11 07:38:42 -05:00
|
|
|
#include "core/gdbstub/gdbstub.h"
|
2019-08-09 13:00:47 -05:00
|
|
|
#include "core/hle/kernel/shared_page.h"
|
2020-08-17 17:26:20 -05:00
|
|
|
#include "core/hle/service/cam/cam.h"
|
2017-01-20 14:46:39 -06:00
|
|
|
#include "core/hle/service/hid/hid.h"
|
2018-10-11 04:12:07 -05:00
|
|
|
#include "core/hle/service/ir/ir_rst.h"
|
|
|
|
#include "core/hle/service/ir/ir_user.h"
|
2019-03-06 21:59:58 -06:00
|
|
|
#include "core/hle/service/mic_u.h"
|
2017-05-27 18:31:42 -05:00
|
|
|
#include "core/settings.h"
|
2018-08-24 08:18:46 -05:00
|
|
|
#include "video_core/renderer_base.h"
|
2016-04-11 07:38:42 -05:00
|
|
|
#include "video_core/video_core.h"
|
|
|
|
|
2014-09-12 19:06:13 -05:00
|
|
|
namespace Settings {
|
|
|
|
|
|
|
|
Values values = {};
|
|
|
|
|
2016-04-11 07:38:42 -05:00
|
|
|
void Apply() {
|
|
|
|
|
2017-01-31 11:44:23 -06:00
|
|
|
GDBStub::SetServerPort(values.gdbstub_port);
|
2016-04-11 07:38:42 -05:00
|
|
|
GDBStub::ToggleServer(values.use_gdbstub);
|
|
|
|
|
|
|
|
VideoCore::g_hw_renderer_enabled = values.use_hw_renderer;
|
|
|
|
VideoCore::g_shader_jit_enabled = values.use_shader_jit;
|
2018-05-13 02:47:06 -05:00
|
|
|
VideoCore::g_hw_shader_enabled = values.use_hw_shader;
|
2020-04-18 08:55:19 -05:00
|
|
|
VideoCore::g_separable_shader_enabled = values.separable_shader;
|
2018-05-13 02:47:06 -05:00
|
|
|
VideoCore::g_hw_shader_accurate_mul = values.shaders_accurate_mul;
|
2019-09-07 16:23:35 -05:00
|
|
|
VideoCore::g_use_disk_shader_cache = values.use_disk_shader_cache;
|
2016-04-27 07:53:23 -05:00
|
|
|
|
2019-07-22 13:58:54 -05:00
|
|
|
#ifndef ANDROID
|
2018-08-24 08:18:46 -05:00
|
|
|
if (VideoCore::g_renderer) {
|
|
|
|
VideoCore::g_renderer->UpdateCurrentFramebufferLayout();
|
2016-05-03 01:07:17 -05:00
|
|
|
}
|
2019-07-22 13:58:54 -05:00
|
|
|
#endif
|
2016-05-03 01:07:17 -05:00
|
|
|
|
2018-08-04 02:11:51 -05:00
|
|
|
VideoCore::g_renderer_bg_color_update_requested = true;
|
2019-08-09 13:00:47 -05:00
|
|
|
VideoCore::g_renderer_sampler_update_requested = true;
|
|
|
|
VideoCore::g_renderer_shader_update_requested = true;
|
2020-04-02 22:42:50 -05:00
|
|
|
VideoCore::g_texture_filter_update_requested = true;
|
2020-03-16 09:42:05 -05:00
|
|
|
|
2018-10-11 04:12:07 -05:00
|
|
|
auto& system = Core::System::GetInstance();
|
|
|
|
if (system.IsPoweredOn()) {
|
2019-12-15 23:04:33 -06:00
|
|
|
system.CoreTiming().UpdateClockSpeed(values.cpu_clock_percentage);
|
2018-07-02 08:03:14 -05:00
|
|
|
Core::DSP().SetSink(values.sink_id, values.audio_device_id);
|
2017-12-20 12:44:32 -06:00
|
|
|
Core::DSP().EnableStretching(values.enable_audio_stretching);
|
2017-01-20 14:46:39 -06:00
|
|
|
|
2018-10-12 04:50:50 -05:00
|
|
|
auto hid = Service::HID::GetModule(system);
|
2018-10-11 04:12:07 -05:00
|
|
|
if (hid) {
|
2018-10-12 04:50:50 -05:00
|
|
|
hid->ReloadInputDevices();
|
2018-10-11 04:12:07 -05:00
|
|
|
}
|
|
|
|
|
2018-10-12 04:50:50 -05:00
|
|
|
auto sm = system.ServiceManager();
|
2018-10-11 04:12:07 -05:00
|
|
|
auto ir_user = sm.GetService<Service::IR::IR_USER>("ir:USER");
|
|
|
|
if (ir_user)
|
|
|
|
ir_user->ReloadInputDevices();
|
|
|
|
auto ir_rst = sm.GetService<Service::IR::IR_RST>("ir:rst");
|
|
|
|
if (ir_rst)
|
|
|
|
ir_rst->ReloadInputDevices();
|
|
|
|
|
2018-10-12 04:50:50 -05:00
|
|
|
auto cam = Service::CAM::GetModule(system);
|
2018-10-11 04:12:07 -05:00
|
|
|
if (cam) {
|
2018-10-12 04:50:50 -05:00
|
|
|
cam->ReloadCameraDevices();
|
2018-10-11 04:12:07 -05:00
|
|
|
}
|
2019-03-06 21:59:58 -06:00
|
|
|
|
|
|
|
Service::MIC::ReloadMic(system);
|
2019-02-27 16:13:51 -06:00
|
|
|
}
|
2014-09-12 19:06:13 -05:00
|
|
|
}
|
2016-04-11 07:38:42 -05:00
|
|
|
|
2018-07-17 18:39:41 -05:00
|
|
|
void LogSettings() {
|
2020-07-19 08:07:16 -05:00
|
|
|
const auto log_setting = [](std::string_view name, const auto& value) {
|
|
|
|
LOG_INFO(Config, "{}: {}", name, value);
|
|
|
|
};
|
|
|
|
|
2018-07-17 18:39:41 -05:00
|
|
|
LOG_INFO(Config, "Citra Configuration:");
|
2020-07-19 08:07:16 -05:00
|
|
|
log_setting("Core_UseCpuJit", values.use_cpu_jit);
|
2020-09-30 20:23:37 -05:00
|
|
|
log_setting("Core_CPUClockPercentage", values.cpu_clock_percentage);
|
2020-07-19 08:07:16 -05:00
|
|
|
log_setting("Renderer_UseGLES", values.use_gles);
|
|
|
|
log_setting("Renderer_UseHwRenderer", values.use_hw_renderer);
|
|
|
|
log_setting("Renderer_UseHwShader", values.use_hw_shader);
|
|
|
|
log_setting("Renderer_SeparableShader", values.separable_shader);
|
|
|
|
log_setting("Renderer_ShadersAccurateMul", values.shaders_accurate_mul);
|
|
|
|
log_setting("Renderer_UseShaderJit", values.use_shader_jit);
|
|
|
|
log_setting("Renderer_UseResolutionFactor", values.resolution_factor);
|
|
|
|
log_setting("Renderer_FrameLimit", values.frame_limit);
|
|
|
|
log_setting("Renderer_UseFrameLimitAlternate", values.use_frame_limit_alternate);
|
|
|
|
log_setting("Renderer_FrameLimitAlternate", values.frame_limit_alternate);
|
2020-09-30 20:23:37 -05:00
|
|
|
log_setting("Renderer_VSyncNew", values.use_vsync_new);
|
2020-07-19 08:07:16 -05:00
|
|
|
log_setting("Renderer_PostProcessingShader", values.pp_shader_name);
|
|
|
|
log_setting("Renderer_FilterMode", values.filter_mode);
|
|
|
|
log_setting("Renderer_TextureFilterName", values.texture_filter_name);
|
2020-12-28 23:39:21 -06:00
|
|
|
log_setting("Stereoscopy_Render3d", values.render_3d);
|
2020-07-19 08:07:16 -05:00
|
|
|
log_setting("Stereoscopy_Factor3d", values.factor_3d);
|
2020-12-28 23:39:21 -06:00
|
|
|
log_setting("Layout_LayoutOption", values.layout_option);
|
2020-07-19 08:07:16 -05:00
|
|
|
log_setting("Layout_SwapScreen", values.swap_screen);
|
|
|
|
log_setting("Layout_UprightScreen", values.upright_screen);
|
|
|
|
log_setting("Utility_DumpTextures", values.dump_textures);
|
|
|
|
log_setting("Utility_CustomTextures", values.custom_textures);
|
|
|
|
log_setting("Utility_UseDiskShaderCache", values.use_disk_shader_cache);
|
|
|
|
log_setting("Audio_EnableDspLle", values.enable_dsp_lle);
|
|
|
|
log_setting("Audio_EnableDspLleMultithread", values.enable_dsp_lle_multithread);
|
|
|
|
log_setting("Audio_OutputEngine", values.sink_id);
|
|
|
|
log_setting("Audio_EnableAudioStretching", values.enable_audio_stretching);
|
|
|
|
log_setting("Audio_OutputDevice", values.audio_device_id);
|
2020-12-28 23:39:21 -06:00
|
|
|
log_setting("Audio_InputDeviceType", values.mic_input_type);
|
2020-07-19 08:07:16 -05:00
|
|
|
log_setting("Audio_InputDevice", values.mic_input_device);
|
2018-07-17 18:39:41 -05:00
|
|
|
using namespace Service::CAM;
|
2020-07-19 08:07:16 -05:00
|
|
|
log_setting("Camera_OuterRightName", values.camera_name[OuterRightCamera]);
|
|
|
|
log_setting("Camera_OuterRightConfig", values.camera_config[OuterRightCamera]);
|
|
|
|
log_setting("Camera_OuterRightFlip", values.camera_flip[OuterRightCamera]);
|
|
|
|
log_setting("Camera_InnerName", values.camera_name[InnerCamera]);
|
|
|
|
log_setting("Camera_InnerConfig", values.camera_config[InnerCamera]);
|
|
|
|
log_setting("Camera_InnerFlip", values.camera_flip[InnerCamera]);
|
|
|
|
log_setting("Camera_OuterLeftName", values.camera_name[OuterLeftCamera]);
|
|
|
|
log_setting("Camera_OuterLeftConfig", values.camera_config[OuterLeftCamera]);
|
|
|
|
log_setting("Camera_OuterLeftFlip", values.camera_flip[OuterLeftCamera]);
|
|
|
|
log_setting("DataStorage_UseVirtualSd", values.use_virtual_sd);
|
2022-04-30 04:15:15 -05:00
|
|
|
log_setting("DataStorage_SdmcDir", FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir));
|
|
|
|
log_setting("DataStorage_NandDir", FileUtil::GetUserPath(FileUtil::UserPath::NANDDir));
|
2020-07-19 08:07:16 -05:00
|
|
|
log_setting("System_IsNew3ds", values.is_new_3ds);
|
|
|
|
log_setting("System_RegionValue", values.region_value);
|
|
|
|
log_setting("Debugging_UseGdbstub", values.use_gdbstub);
|
|
|
|
log_setting("Debugging_GdbstubPort", values.gdbstub_port);
|
2018-07-17 18:39:41 -05:00
|
|
|
}
|
|
|
|
|
2018-12-28 18:24:56 -06:00
|
|
|
void LoadProfile(int index) {
|
2018-12-29 07:27:06 -06:00
|
|
|
Settings::values.current_input_profile = Settings::values.input_profiles[index];
|
|
|
|
Settings::values.current_input_profile_index = index;
|
2018-12-28 18:24:56 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
void SaveProfile(int index) {
|
2018-12-29 07:27:06 -06:00
|
|
|
Settings::values.input_profiles[index] = Settings::values.current_input_profile;
|
2018-12-28 18:24:56 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
void CreateProfile(std::string name) {
|
2018-12-29 07:27:06 -06:00
|
|
|
Settings::InputProfile profile = values.current_input_profile;
|
2018-12-28 18:24:56 -06:00
|
|
|
profile.name = std::move(name);
|
2018-12-29 07:27:06 -06:00
|
|
|
Settings::values.input_profiles.push_back(std::move(profile));
|
|
|
|
Settings::values.current_input_profile_index =
|
|
|
|
static_cast<int>(Settings::values.input_profiles.size()) - 1;
|
|
|
|
Settings::LoadProfile(Settings::values.current_input_profile_index);
|
2018-12-28 18:24:56 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
void DeleteProfile(int index) {
|
2018-12-29 07:27:06 -06:00
|
|
|
Settings::values.input_profiles.erase(Settings::values.input_profiles.begin() + index);
|
|
|
|
Settings::LoadProfile(0);
|
2018-12-28 18:24:56 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
void RenameCurrentProfile(std::string new_name) {
|
2019-11-09 12:13:41 -06:00
|
|
|
Settings::values.current_input_profile.name = std::move(new_name);
|
2018-12-28 18:24:56 -06:00
|
|
|
}
|
|
|
|
|
2017-08-25 16:53:07 -05:00
|
|
|
} // namespace Settings
|