code: Remove save state compatibility checks (#6980)
This commit is contained in:
parent
542209c993
commit
d1c16bad78
13 changed files with 52 additions and 115 deletions
|
@ -35,8 +35,7 @@ public:
|
||||||
const auto r = GetCpuRegister(i);
|
const auto r = GetCpuRegister(i);
|
||||||
ar << r;
|
ar << r;
|
||||||
}
|
}
|
||||||
std::size_t fpu_reg_count = file_version == 0 ? 16 : 64;
|
for (std::size_t i = 0; i < 64; i++) {
|
||||||
for (std::size_t i = 0; i < fpu_reg_count; i++) {
|
|
||||||
const auto r = GetFpuRegister(i);
|
const auto r = GetFpuRegister(i);
|
||||||
ar << r;
|
ar << r;
|
||||||
}
|
}
|
||||||
|
@ -55,8 +54,7 @@ public:
|
||||||
ar >> r;
|
ar >> r;
|
||||||
SetCpuRegister(i, r);
|
SetCpuRegister(i, r);
|
||||||
}
|
}
|
||||||
std::size_t fpu_reg_count = file_version == 0 ? 16 : 64;
|
for (std::size_t i = 0; i < 64; i++) {
|
||||||
for (std::size_t i = 0; i < fpu_reg_count; i++) {
|
|
||||||
ar >> r;
|
ar >> r;
|
||||||
SetFpuRegister(i, r);
|
SetFpuRegister(i, r);
|
||||||
}
|
}
|
||||||
|
@ -268,8 +266,7 @@ private:
|
||||||
ar << pc;
|
ar << pc;
|
||||||
const auto cpsr = GetCPSR();
|
const auto cpsr = GetCPSR();
|
||||||
ar << cpsr;
|
ar << cpsr;
|
||||||
int vfp_reg_count = file_version == 0 ? 32 : 64;
|
for (int i = 0; i < 64; i++) {
|
||||||
for (int i = 0; i < vfp_reg_count; i++) {
|
|
||||||
const auto r = GetVFPReg(i);
|
const auto r = GetVFPReg(i);
|
||||||
ar << r;
|
ar << r;
|
||||||
}
|
}
|
||||||
|
@ -316,8 +313,7 @@ private:
|
||||||
SetPC(r);
|
SetPC(r);
|
||||||
ar >> r;
|
ar >> r;
|
||||||
SetCPSR(r);
|
SetCPSR(r);
|
||||||
int vfp_reg_count = file_version == 0 ? 32 : 64;
|
for (int i = 0; i < 64; i++) {
|
||||||
for (int i = 0; i < vfp_reg_count; i++) {
|
|
||||||
ar >> r;
|
ar >> r;
|
||||||
SetVFPReg(i, r);
|
SetVFPReg(i, r);
|
||||||
}
|
}
|
||||||
|
|
|
@ -717,9 +717,7 @@ void System::serialize(Archive& ar, const unsigned int file_version) {
|
||||||
ar&* memory.get();
|
ar&* memory.get();
|
||||||
ar&* kernel.get();
|
ar&* kernel.get();
|
||||||
VideoCore::serialize(ar, file_version);
|
VideoCore::serialize(ar, file_version);
|
||||||
if (file_version >= 1) {
|
ar& movie;
|
||||||
ar& movie;
|
|
||||||
}
|
|
||||||
|
|
||||||
// This needs to be set from somewhere - might as well be here!
|
// This needs to be set from somewhere - might as well be here!
|
||||||
if (Archive::is_loading::value) {
|
if (Archive::is_loading::value) {
|
||||||
|
|
|
@ -299,13 +299,7 @@ private:
|
||||||
void serialize(Archive& ar, const unsigned int file_version) {
|
void serialize(Archive& ar, const unsigned int file_version) {
|
||||||
// event_types set during initialization of other things
|
// event_types set during initialization of other things
|
||||||
ar& timers;
|
ar& timers;
|
||||||
if (file_version == 0) {
|
ar& current_timer;
|
||||||
std::shared_ptr<Timer> x;
|
|
||||||
ar& x;
|
|
||||||
current_timer = x.get();
|
|
||||||
} else {
|
|
||||||
ar& current_timer;
|
|
||||||
}
|
|
||||||
if (Archive::is_loading::value) {
|
if (Archive::is_loading::value) {
|
||||||
event_queue_locked = true;
|
event_queue_locked = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,29 +79,13 @@ private:
|
||||||
void WakeUp(ThreadWakeupReason reason, std::shared_ptr<Thread> thread,
|
void WakeUp(ThreadWakeupReason reason, std::shared_ptr<Thread> thread,
|
||||||
std::shared_ptr<WaitObject> object) override;
|
std::shared_ptr<WaitObject> object) override;
|
||||||
|
|
||||||
class DummyCallback : public WakeupCallback {
|
|
||||||
public:
|
|
||||||
void WakeUp(ThreadWakeupReason reason, std::shared_ptr<Thread> thread,
|
|
||||||
std::shared_ptr<WaitObject> object) override {}
|
|
||||||
};
|
|
||||||
|
|
||||||
friend class boost::serialization::access;
|
friend class boost::serialization::access;
|
||||||
template <class Archive>
|
template <class Archive>
|
||||||
void serialize(Archive& ar, const unsigned int file_version) {
|
void serialize(Archive& ar, const unsigned int file_version) {
|
||||||
ar& boost::serialization::base_object<Object>(*this);
|
ar& boost::serialization::base_object<Object>(*this);
|
||||||
if (file_version == 1) {
|
|
||||||
// This rigmarole is needed because in past versions, AddressArbiter inherited
|
|
||||||
// WakeupCallback But it turns out this breaks shared_from_this, so we split it out.
|
|
||||||
// Using a dummy class to deserialize a base_object allows compatibility to be
|
|
||||||
// maintained.
|
|
||||||
DummyCallback x;
|
|
||||||
ar& boost::serialization::base_object<WakeupCallback>(x);
|
|
||||||
}
|
|
||||||
ar& name;
|
ar& name;
|
||||||
ar& waiting_threads;
|
ar& waiting_threads;
|
||||||
if (file_version > 1) {
|
ar& timeout_callback;
|
||||||
ar& timeout_callback;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -45,16 +45,7 @@ void Thread::serialize(Archive& ar, const unsigned int file_version) {
|
||||||
ar& tls_address;
|
ar& tls_address;
|
||||||
ar& held_mutexes;
|
ar& held_mutexes;
|
||||||
ar& pending_mutexes;
|
ar& pending_mutexes;
|
||||||
|
ar& owner_process;
|
||||||
// Note: this is equivalent of what is done in boost/serialization/weak_ptr.hpp, but it's
|
|
||||||
// compatible with previous versions of savestates.
|
|
||||||
// TODO(SaveStates): When the savestate version is bumped, simplify this again.
|
|
||||||
std::shared_ptr<Process> shared_owner_process = owner_process.lock();
|
|
||||||
ar& shared_owner_process;
|
|
||||||
if (Archive::is_loading::value) {
|
|
||||||
owner_process = shared_owner_process;
|
|
||||||
}
|
|
||||||
|
|
||||||
ar& wait_objects;
|
ar& wait_objects;
|
||||||
ar& wait_address;
|
ar& wait_address;
|
||||||
ar& name;
|
ar& name;
|
||||||
|
|
|
@ -11,9 +11,9 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <boost/container/flat_set.hpp>
|
#include <boost/container/flat_set.hpp>
|
||||||
#include <boost/serialization/export.hpp>
|
#include <boost/serialization/export.hpp>
|
||||||
#include <boost/serialization/shared_ptr.hpp>
|
|
||||||
#include <boost/serialization/unordered_map.hpp>
|
#include <boost/serialization/unordered_map.hpp>
|
||||||
#include <boost/serialization/vector.hpp>
|
#include <boost/serialization/vector.hpp>
|
||||||
|
#include <boost/serialization/weak_ptr.hpp>
|
||||||
#include "common/common_types.h"
|
#include "common/common_types.h"
|
||||||
#include "common/thread_queue_list.h"
|
#include "common/thread_queue_list.h"
|
||||||
#include "core/arm/arm_interface.h"
|
#include "core/arm/arm_interface.h"
|
||||||
|
|
|
@ -188,9 +188,7 @@ private:
|
||||||
void serialize(Archive& ar, const unsigned int file_version) {
|
void serialize(Archive& ar, const unsigned int file_version) {
|
||||||
ar& next_title_id;
|
ar& next_title_id;
|
||||||
ar& next_media_type;
|
ar& next_media_type;
|
||||||
if (file_version > 0) {
|
ar& flags;
|
||||||
ar& flags;
|
|
||||||
}
|
|
||||||
ar& current_title_id;
|
ar& current_title_id;
|
||||||
ar& current_media_type;
|
ar& current_media_type;
|
||||||
}
|
}
|
||||||
|
@ -517,25 +515,23 @@ private:
|
||||||
void serialize(Archive& ar, const unsigned int file_version) {
|
void serialize(Archive& ar, const unsigned int file_version) {
|
||||||
ar& next_parameter;
|
ar& next_parameter;
|
||||||
ar& app_jump_parameters;
|
ar& app_jump_parameters;
|
||||||
if (file_version > 0) {
|
ar& delayed_parameter;
|
||||||
ar& delayed_parameter;
|
ar& app_start_parameters;
|
||||||
ar& app_start_parameters;
|
ar& deliver_arg;
|
||||||
ar& deliver_arg;
|
ar& capture_info;
|
||||||
ar& capture_info;
|
ar& capture_buffer_info;
|
||||||
ar& capture_buffer_info;
|
ar& active_slot;
|
||||||
ar& active_slot;
|
ar& last_library_launcher_slot;
|
||||||
ar& last_library_launcher_slot;
|
ar& last_prepared_library_applet;
|
||||||
ar& last_prepared_library_applet;
|
ar& last_system_launcher_slot;
|
||||||
ar& last_system_launcher_slot;
|
ar& last_jump_to_home_slot;
|
||||||
ar& last_jump_to_home_slot;
|
ar& ordered_to_close_sys_applet;
|
||||||
ar& ordered_to_close_sys_applet;
|
ar& ordered_to_close_application;
|
||||||
ar& ordered_to_close_application;
|
ar& application_cancelled;
|
||||||
ar& application_cancelled;
|
ar& application_close_target;
|
||||||
ar& application_close_target;
|
ar& new_3ds_mode_blocked;
|
||||||
ar& new_3ds_mode_blocked;
|
ar& lock;
|
||||||
ar& lock;
|
ar& capture_info;
|
||||||
ar& capture_info;
|
|
||||||
}
|
|
||||||
ar& applet_slots;
|
ar& applet_slots;
|
||||||
ar& library_applet_closing_command;
|
ar& library_applet_closing_command;
|
||||||
|
|
||||||
|
|
|
@ -48,9 +48,7 @@ void Module::serialize(Archive& ar, const unsigned int file_version) {
|
||||||
ar& cpu_percent;
|
ar& cpu_percent;
|
||||||
ar& screen_capture_post_permission;
|
ar& screen_capture_post_permission;
|
||||||
ar& applet_manager;
|
ar& applet_manager;
|
||||||
if (file_version > 0) {
|
ar& wireless_reboot_info;
|
||||||
ar& wireless_reboot_info;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SERIALIZE_IMPL(Module)
|
SERIALIZE_IMPL(Module)
|
||||||
|
|
|
@ -30,11 +30,7 @@ void Module::serialize(Archive& ar, const unsigned int file_version) {
|
||||||
ar& cameras;
|
ar& cameras;
|
||||||
ar& ports;
|
ar& ports;
|
||||||
ar& is_camera_reload_pending;
|
ar& is_camera_reload_pending;
|
||||||
if (file_version > 0) {
|
ar& initialized;
|
||||||
ar& initialized;
|
|
||||||
} else {
|
|
||||||
initialized = true;
|
|
||||||
}
|
|
||||||
if (Archive::is_loading::value && initialized) {
|
if (Archive::is_loading::value && initialized) {
|
||||||
for (int i = 0; i < NumCameras; i++) {
|
for (int i = 0; i < NumCameras; i++) {
|
||||||
LoadCameraImplementation(cameras[i], i);
|
LoadCameraImplementation(cameras[i], i);
|
||||||
|
|
|
@ -681,11 +681,6 @@ private:
|
||||||
private:
|
private:
|
||||||
template <class Archive>
|
template <class Archive>
|
||||||
void serialize(Archive& ar, const unsigned int file_version) {
|
void serialize(Archive& ar, const unsigned int file_version) {
|
||||||
// For compatibility: put a nullptr here
|
|
||||||
if (file_version == 0) {
|
|
||||||
std::unique_ptr<Camera::CameraInterface> x;
|
|
||||||
ar& x;
|
|
||||||
}
|
|
||||||
ar& contexts;
|
ar& contexts;
|
||||||
ar& current_context;
|
ar& current_context;
|
||||||
ar& frame_rate;
|
ar& frame_rate;
|
||||||
|
|
|
@ -46,9 +46,7 @@ void Module::serialize(Archive& ar, const unsigned int file_version) {
|
||||||
if (Archive::is_loading::value) {
|
if (Archive::is_loading::value) {
|
||||||
LoadInputDevices();
|
LoadInputDevices();
|
||||||
}
|
}
|
||||||
if (file_version >= 1) {
|
ar& state.hex;
|
||||||
ar& state.hex;
|
|
||||||
}
|
|
||||||
// Update events are set in the constructor
|
// Update events are set in the constructor
|
||||||
// Devices are set from the implementation (and are stateless afaik)
|
// Devices are set from the implementation (and are stateless afaik)
|
||||||
}
|
}
|
||||||
|
|
|
@ -400,18 +400,16 @@ private:
|
||||||
ar& clamp;
|
ar& clamp;
|
||||||
// mic interface set in constructor
|
// mic interface set in constructor
|
||||||
ar& state;
|
ar& state;
|
||||||
if (file_version > 0) {
|
// Maintain the internal mic state
|
||||||
// Maintain the internal mic state
|
ar& encoding;
|
||||||
ar& encoding;
|
bool is_sampling = mic && mic->IsSampling();
|
||||||
bool is_sampling = mic && mic->IsSampling();
|
ar& is_sampling;
|
||||||
ar& is_sampling;
|
if (Archive::is_loading::value) {
|
||||||
if (Archive::is_loading::value) {
|
if (is_sampling) {
|
||||||
if (is_sampling) {
|
CreateMic();
|
||||||
CreateMic();
|
StartSampling();
|
||||||
StartSampling();
|
} else if (mic) {
|
||||||
} else if (mic) {
|
mic->StopSampling();
|
||||||
mic->StopSampling();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -153,37 +153,30 @@ void Movie::serialize(Archive& ar, const unsigned int file_version) {
|
||||||
u64 _current_byte = static_cast<u64>(current_byte);
|
u64 _current_byte = static_cast<u64>(current_byte);
|
||||||
ar& _current_byte;
|
ar& _current_byte;
|
||||||
current_byte = static_cast<std::size_t>(_current_byte);
|
current_byte = static_cast<std::size_t>(_current_byte);
|
||||||
|
ar& current_input;
|
||||||
if (file_version > 0) {
|
|
||||||
ar& current_input;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<u8> recorded_input_ = recorded_input;
|
std::vector<u8> recorded_input_ = recorded_input;
|
||||||
ar& recorded_input_;
|
ar& recorded_input_;
|
||||||
|
|
||||||
ar& init_time;
|
ar& init_time;
|
||||||
|
|
||||||
if (file_version > 0) {
|
if (Archive::is_loading::value) {
|
||||||
if (Archive::is_loading::value) {
|
u64 savestate_movie_id;
|
||||||
u64 savestate_movie_id;
|
ar& savestate_movie_id;
|
||||||
ar& savestate_movie_id;
|
if (id != savestate_movie_id) {
|
||||||
if (id != savestate_movie_id) {
|
if (savestate_movie_id == 0) {
|
||||||
if (savestate_movie_id == 0) {
|
throw std::runtime_error("You must close your movie to load this state");
|
||||||
throw std::runtime_error("You must close your movie to load this state");
|
} else {
|
||||||
} else {
|
throw std::runtime_error("You must load the same movie to load this state");
|
||||||
throw std::runtime_error("You must load the same movie to load this state");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
ar& id;
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
ar& id;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Whether the state was made in MovieFinished state
|
// Whether the state was made in MovieFinished state
|
||||||
bool post_movie = play_mode == PlayMode::MovieFinished;
|
bool post_movie = play_mode == PlayMode::MovieFinished;
|
||||||
if (file_version > 0) {
|
ar& post_movie;
|
||||||
ar& post_movie;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Archive::is_loading::value && id != 0) {
|
if (Archive::is_loading::value && id != 0) {
|
||||||
if (!read_only) {
|
if (!read_only) {
|
||||||
|
|
Loading…
Reference in a new issue