diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index a3d0bfc68f..0c1679e5f7 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx.h" #include "Utilities/JIT.h" #include "Utilities/date_time.h" #include "Emu/Memory/vm.h" diff --git a/rpcs3/Emu/RSX/RSXThread.cpp b/rpcs3/Emu/RSX/RSXThread.cpp index cf373445c7..40d985b7dd 100644 --- a/rpcs3/Emu/RSX/RSXThread.cpp +++ b/rpcs3/Emu/RSX/RSXThread.cpp @@ -457,6 +457,7 @@ namespace rsx if (ar.is_writing() || GET_SERIALIZATION_VERSION(rsx) != 1u) { ar(unsent_gcm_events); + ar(rsx::method_registers.current_draw_clause); } } diff --git a/rpcs3/Emu/RSX/rsx_methods.cpp b/rpcs3/Emu/RSX/rsx_methods.cpp index 43da5a94b7..e8940ae5d4 100644 --- a/rpcs3/Emu/RSX/rsx_methods.cpp +++ b/rpcs3/Emu/RSX/rsx_methods.cpp @@ -2837,6 +2837,11 @@ namespace rsx return registers[reg] == value; } + void draw_clause::operator()(utils::serial& ar) + { + ar(draw_command_ranges, draw_command_barriers, current_range_index, primitive, command, is_immediate_draw, is_disjoint_primitive, primitive_barrier_enable, inline_vertex_array); + } + void draw_clause::insert_command_barrier(command_barrier_type type, u32 arg, u32 index) { ensure(!draw_command_ranges.empty()); diff --git a/rpcs3/Emu/RSX/rsx_methods.h b/rpcs3/Emu/RSX/rsx_methods.h index 1b8a922ae7..03ff6fbc31 100644 --- a/rpcs3/Emu/RSX/rsx_methods.h +++ b/rpcs3/Emu/RSX/rsx_methods.h @@ -55,6 +55,8 @@ namespace rsx return timestamp < other.timestamp; } + + ENABLE_BITWISE_SERIALIZATION; }; struct draw_range_t @@ -62,6 +64,8 @@ namespace rsx u32 command_data_offset = 0; u32 first = 0; u32 count = 0; + + ENABLE_BITWISE_SERIALIZATION; }; class draw_clause @@ -115,6 +119,8 @@ namespace rsx simple_array inline_vertex_array{}; + void operator()(utils::serial& ar); + void insert_command_barrier(command_barrier_type type, u32 arg, u32 register_index = 0); /** diff --git a/rpcs3/util/serialization.hpp b/rpcs3/util/serialization.hpp index 4a30c7eaa3..f93498adda 100644 --- a/rpcs3/util/serialization.hpp +++ b/rpcs3/util/serialization.hpp @@ -258,6 +258,13 @@ namespace utils return true; } + template requires requires (T& obj) { (obj.*(&T::operator()))(std::declval>()); } + bool serialize(T& obj) + { + obj(*this); + return is_valid(); + } + template bool serialize_tuple(T& obj) {