From bb9a972e35c2b9055cbd7cdad8ec725b76296d0e Mon Sep 17 00:00:00 2001 From: xperia64 Date: Thu, 17 Jan 2019 22:18:15 -0500 Subject: [PATCH 1/5] Change 3D slider in-game --- src/core/hle/kernel/shared_page.cpp | 4 ++++ src/core/hle/kernel/shared_page.h | 2 ++ src/core/settings.cpp | 6 ++++++ 3 files changed, 12 insertions(+) diff --git a/src/core/hle/kernel/shared_page.cpp b/src/core/hle/kernel/shared_page.cpp index e2af01e0d..f5cac7187 100644 --- a/src/core/hle/kernel/shared_page.cpp +++ b/src/core/hle/kernel/shared_page.cpp @@ -121,6 +121,10 @@ void Handler::Set3DLed(u8 state) { shared_page.ledstate_3d = state; } +void Handler::Set3DSlider(float slidestate) { + shared_page.sliderstate_3d = slidestate; +} + SharedPageDef& Handler::GetSharedPage() { return shared_page; } diff --git a/src/core/hle/kernel/shared_page.h b/src/core/hle/kernel/shared_page.h index 7b6dc2e06..f066befc4 100644 --- a/src/core/hle/kernel/shared_page.h +++ b/src/core/hle/kernel/shared_page.h @@ -91,6 +91,8 @@ public: void Set3DLed(u8); + void Set3DSlider(float); + SharedPageDef& GetSharedPage(); private: diff --git a/src/core/settings.cpp b/src/core/settings.cpp index 2141d57bd..3dd4a0226 100644 --- a/src/core/settings.cpp +++ b/src/core/settings.cpp @@ -5,6 +5,7 @@ #include "audio_core/dsp_interface.h" #include "core/core.h" #include "core/gdbstub/gdbstub.h" +#include "core/hle/kernel/shared_page.h" #include "core/hle/service/hid/hid.h" #include "core/hle/service/ir/ir_rst.h" #include "core/hle/service/ir/ir_user.h" @@ -55,6 +56,11 @@ void Apply() { if (cam) { cam->ReloadCameraDevices(); } + + system.Kernel().GetSharedPageHandler().Set3DSlider( + (Settings::values.render_3d != Settings::StereoRenderOption::Off) + ? (float_le)Settings::values.factor_3d / 100 + : 0.0f); } } From 81f4cef2010012ab2f3738cac059fe6dc579f317 Mon Sep 17 00:00:00 2001 From: xperia64 Date: Thu, 17 Jan 2019 23:33:24 -0500 Subject: [PATCH 2/5] Revert "Change 3D slider in-game" This reverts commit bb9a972e35c2b9055cbd7cdad8ec725b76296d0e. Needs to be completely redone in the HID HLE service module. --- src/core/hle/kernel/shared_page.cpp | 4 ---- src/core/hle/kernel/shared_page.h | 2 -- src/core/settings.cpp | 6 ------ 3 files changed, 12 deletions(-) diff --git a/src/core/hle/kernel/shared_page.cpp b/src/core/hle/kernel/shared_page.cpp index f5cac7187..e2af01e0d 100644 --- a/src/core/hle/kernel/shared_page.cpp +++ b/src/core/hle/kernel/shared_page.cpp @@ -121,10 +121,6 @@ void Handler::Set3DLed(u8 state) { shared_page.ledstate_3d = state; } -void Handler::Set3DSlider(float slidestate) { - shared_page.sliderstate_3d = slidestate; -} - SharedPageDef& Handler::GetSharedPage() { return shared_page; } diff --git a/src/core/hle/kernel/shared_page.h b/src/core/hle/kernel/shared_page.h index f066befc4..7b6dc2e06 100644 --- a/src/core/hle/kernel/shared_page.h +++ b/src/core/hle/kernel/shared_page.h @@ -91,8 +91,6 @@ public: void Set3DLed(u8); - void Set3DSlider(float); - SharedPageDef& GetSharedPage(); private: diff --git a/src/core/settings.cpp b/src/core/settings.cpp index 3dd4a0226..2141d57bd 100644 --- a/src/core/settings.cpp +++ b/src/core/settings.cpp @@ -5,7 +5,6 @@ #include "audio_core/dsp_interface.h" #include "core/core.h" #include "core/gdbstub/gdbstub.h" -#include "core/hle/kernel/shared_page.h" #include "core/hle/service/hid/hid.h" #include "core/hle/service/ir/ir_rst.h" #include "core/hle/service/ir/ir_user.h" @@ -56,11 +55,6 @@ void Apply() { if (cam) { cam->ReloadCameraDevices(); } - - system.Kernel().GetSharedPageHandler().Set3DSlider( - (Settings::values.render_3d != Settings::StereoRenderOption::Off) - ? (float_le)Settings::values.factor_3d / 100 - : 0.0f); } } From 6f2eb2a418dee720bbb8ac407ba2312bdd990b9e Mon Sep 17 00:00:00 2001 From: xperia64 Date: Thu, 17 Jan 2019 23:48:50 -0500 Subject: [PATCH 3/5] Do 3D slider updating in the HID module --- src/core/hle/kernel/shared_page.cpp | 4 ++++ src/core/hle/kernel/shared_page.h | 2 ++ src/core/hle/service/hid/hid.cpp | 7 +++++++ 3 files changed, 13 insertions(+) diff --git a/src/core/hle/kernel/shared_page.cpp b/src/core/hle/kernel/shared_page.cpp index e2af01e0d..c47751c73 100644 --- a/src/core/hle/kernel/shared_page.cpp +++ b/src/core/hle/kernel/shared_page.cpp @@ -121,6 +121,10 @@ void Handler::Set3DLed(u8 state) { shared_page.ledstate_3d = state; } +void Handler::Set3DSlider(float_le slidestate) { + shared_page.sliderstate_3d = slidestate; +} + SharedPageDef& Handler::GetSharedPage() { return shared_page; } diff --git a/src/core/hle/kernel/shared_page.h b/src/core/hle/kernel/shared_page.h index 7b6dc2e06..2cef32826 100644 --- a/src/core/hle/kernel/shared_page.h +++ b/src/core/hle/kernel/shared_page.h @@ -89,6 +89,8 @@ public: void SetWifiLinkLevel(WifiLinkLevel); + void Set3DSlider(float_le); + void Set3DLed(u8); SharedPageDef& GetSharedPage(); diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index 7393ad684..6b8ec9127 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp @@ -12,6 +12,7 @@ #include "core/hle/kernel/event.h" #include "core/hle/kernel/handle_table.h" #include "core/hle/kernel/shared_memory.h" +#include "core/hle/kernel/shared_page.h" #include "core/hle/service/hid/hid.h" #include "core/hle/service/hid/hid_spvr.h" #include "core/hle/service/hid/hid_user.h" @@ -160,6 +161,12 @@ void Module::UpdatePadCallback(u64 userdata, s64 cycles_late) { event_pad_or_touch_1->Signal(); event_pad_or_touch_2->Signal(); + // TODO(xperia64): How the 3D Slider is updated by the HID module needs to be RE'd + // and possibly moved to its own Core::Timing event. + system.Kernel().GetSharedPageHandler().Set3DSlider( + Settings::values.toggle_3d ? static_cast(Settings::values.factor_3d) / 100 + : 0.0f); + // Reschedule recurrent event system.CoreTiming().ScheduleEvent(pad_update_ticks - cycles_late, pad_update_event); } From 5f5646c85054fc2791a675624a66c25e8308314b Mon Sep 17 00:00:00 2001 From: xperia64 Date: Fri, 18 Jan 2019 15:24:39 -0500 Subject: [PATCH 4/5] Fix types --- src/core/hle/kernel/shared_page.cpp | 4 ++-- src/core/hle/kernel/shared_page.h | 2 +- src/core/hle/service/hid/hid.cpp | 3 +-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/core/hle/kernel/shared_page.cpp b/src/core/hle/kernel/shared_page.cpp index c47751c73..caf073658 100644 --- a/src/core/hle/kernel/shared_page.cpp +++ b/src/core/hle/kernel/shared_page.cpp @@ -121,8 +121,8 @@ void Handler::Set3DLed(u8 state) { shared_page.ledstate_3d = state; } -void Handler::Set3DSlider(float_le slidestate) { - shared_page.sliderstate_3d = slidestate; +void Handler::Set3DSlider(float slidestate) { + shared_page.sliderstate_3d = static_cast(slidestate); } SharedPageDef& Handler::GetSharedPage() { diff --git a/src/core/hle/kernel/shared_page.h b/src/core/hle/kernel/shared_page.h index 2cef32826..8ea114a4e 100644 --- a/src/core/hle/kernel/shared_page.h +++ b/src/core/hle/kernel/shared_page.h @@ -89,7 +89,7 @@ public: void SetWifiLinkLevel(WifiLinkLevel); - void Set3DSlider(float_le); + void Set3DSlider(float); void Set3DLed(u8); diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index 6b8ec9127..997c8c494 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp @@ -164,8 +164,7 @@ void Module::UpdatePadCallback(u64 userdata, s64 cycles_late) { // TODO(xperia64): How the 3D Slider is updated by the HID module needs to be RE'd // and possibly moved to its own Core::Timing event. system.Kernel().GetSharedPageHandler().Set3DSlider( - Settings::values.toggle_3d ? static_cast(Settings::values.factor_3d) / 100 - : 0.0f); + Settings::values.toggle_3d ? Settings::values.factor_3d / 100.0f : 0.0f); // Reschedule recurrent event system.CoreTiming().ScheduleEvent(pad_update_ticks - cycles_late, pad_update_event); From c1ac39f0584f54bca3f6994b79022abcc38a11f8 Mon Sep 17 00:00:00 2001 From: xperia64 Date: Fri, 18 Jan 2019 16:32:16 -0500 Subject: [PATCH 5/5] Actually fix the race condition --- src/citra_qt/configuration/config.cpp | 2 +- src/core/hle/service/hid/hid.cpp | 3 +-- src/core/settings.h | 3 ++- src/core/telemetry_session.cpp | 3 ++- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/citra_qt/configuration/config.cpp b/src/citra_qt/configuration/config.cpp index f597a5fa5..f0cf145c3 100644 --- a/src/citra_qt/configuration/config.cpp +++ b/src/citra_qt/configuration/config.cpp @@ -404,7 +404,7 @@ void Config::SaveValues() { qt_config->beginGroup("Layout"); WriteSetting("toggle_3d", Settings::values.toggle_3d, false); - WriteSetting("factor_3d", Settings::values.factor_3d, 0); + WriteSetting("factor_3d", Settings::values.factor_3d.load(), 0); WriteSetting("layout_option", static_cast(Settings::values.layout_option)); WriteSetting("swap_screen", Settings::values.swap_screen, false); WriteSetting("custom_layout", Settings::values.custom_layout, false); diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index 997c8c494..9a38f5218 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp @@ -163,8 +163,7 @@ void Module::UpdatePadCallback(u64 userdata, s64 cycles_late) { // TODO(xperia64): How the 3D Slider is updated by the HID module needs to be RE'd // and possibly moved to its own Core::Timing event. - system.Kernel().GetSharedPageHandler().Set3DSlider( - Settings::values.toggle_3d ? Settings::values.factor_3d / 100.0f : 0.0f); + system.Kernel().GetSharedPageHandler().Set3DSlider(Settings::values.factor_3d / 100.0f); // Reschedule recurrent event system.CoreTiming().ScheduleEvent(pad_update_ticks - cycles_late, pad_update_event); diff --git a/src/core/settings.h b/src/core/settings.h index e3bf77a40..aeec0e619 100644 --- a/src/core/settings.h +++ b/src/core/settings.h @@ -5,6 +5,7 @@ #pragma once #include +#include #include #include #include "common/common_types.h" @@ -148,7 +149,7 @@ struct Values { float bg_blue; bool toggle_3d; - u8 factor_3d; + std::atomic factor_3d; // Audio bool enable_dsp_lle; diff --git a/src/core/telemetry_session.cpp b/src/core/telemetry_session.cpp index b6c18cf96..052ee92bc 100644 --- a/src/core/telemetry_session.cpp +++ b/src/core/telemetry_session.cpp @@ -179,7 +179,8 @@ TelemetrySession::TelemetrySession() { Settings::values.use_shader_jit); AddField(Telemetry::FieldType::UserConfig, "Renderer_UseVsync", Settings::values.use_vsync); AddField(Telemetry::FieldType::UserConfig, "Renderer_Toggle3d", Settings::values.toggle_3d); - AddField(Telemetry::FieldType::UserConfig, "Renderer_Factor3d", Settings::values.factor_3d); + AddField(Telemetry::FieldType::UserConfig, "Renderer_Factor3d", + Settings::values.factor_3d.load()); AddField(Telemetry::FieldType::UserConfig, "System_IsNew3ds", Settings::values.is_new_3ds); AddField(Telemetry::FieldType::UserConfig, "System_RegionValue", Settings::values.region_value); }