mirror of
https://github.com/RPCS3/rpcs3.git
synced 2024-11-22 18:53:28 +01:00
Savestate/IDM: Do not save unsavable containers
This commit is contained in:
parent
a560121775
commit
5f2f084091
@ -84,6 +84,11 @@ private:
|
||||
public:
|
||||
SAVESTATE_INIT_POS(4); // Dependency on PPUs
|
||||
|
||||
lv2_obj() noexcept = default;
|
||||
lv2_obj(u32 i) noexcept : exists{ i } {}
|
||||
lv2_obj(utils::serial&) noexcept {}
|
||||
void save(utils::serial&) {}
|
||||
|
||||
// Existence validation (workaround for shared-ptr ref-counting)
|
||||
atomic_t<u32> exists = 0;
|
||||
|
||||
|
@ -248,16 +248,17 @@ namespace id_manager
|
||||
std::vector<std::pair<id_key, std::shared_ptr<void>>> vec{}, private_copy{};
|
||||
shared_mutex mutex{}; // TODO: Use this instead of global mutex
|
||||
|
||||
id_map()
|
||||
id_map() noexcept
|
||||
{
|
||||
// Preallocate memory
|
||||
vec.reserve(T::id_count);
|
||||
}
|
||||
|
||||
// Order it directly before the source type's position
|
||||
static constexpr double savestate_init_pos = std::bit_cast<double>(std::bit_cast<u64>(T::savestate_init_pos) - 1);
|
||||
static constexpr double savestate_init_pos_original = T::savestate_init_pos;
|
||||
static constexpr double savestate_init_pos = std::bit_cast<double>(std::bit_cast<u64>(savestate_init_pos_original) - 1);
|
||||
|
||||
id_map(utils::serial& ar)
|
||||
id_map(utils::serial& ar) noexcept requires (savestate_init_pos_original != 0 && std::is_constructible_v<T, stx::exact_t<utils::serial&>>)
|
||||
{
|
||||
vec.resize(T::id_count);
|
||||
|
||||
@ -297,7 +298,7 @@ namespace id_manager
|
||||
}
|
||||
}
|
||||
|
||||
void save(utils::serial& ar)
|
||||
void save(utils::serial& ar) requires (savestate_init_pos_original != 0 && std::is_constructible_v<T, stx::exact_t<utils::serial&>>)
|
||||
{
|
||||
u32 obj_count = 0;
|
||||
usz obj_count_offs = ar.data.size();
|
||||
@ -334,8 +335,7 @@ namespace id_manager
|
||||
std::memcpy(ar.data.data() + obj_count_offs, &obj_count, sizeof(obj_count));
|
||||
}
|
||||
|
||||
template <bool dummy = false> requires (std::is_assignable_v<T&, thread_state>)
|
||||
id_map& operator=(thread_state state)
|
||||
id_map& operator=(thread_state state) noexcept requires (std::is_assignable_v<T&, thread_state>)
|
||||
{
|
||||
if (private_copy.empty())
|
||||
{
|
||||
|
@ -1353,4 +1353,4 @@ extern bool serialize(utils::serial& ar, T& obj);
|
||||
}()
|
||||
|
||||
#define ENABLE_BITWISE_SERIALIZATION using enable_bitcopy = std::true_type;
|
||||
#define SAVESTATE_INIT_POS(x) static constexpr double savestate_init_pos = (x)
|
||||
#define SAVESTATE_INIT_POS(...) static constexpr double savestate_init_pos = (__VA_ARGS__)
|
||||
|
Loading…
Reference in New Issue
Block a user