diff --git a/rpcs3/Emu/RSX/RSXThread.h b/rpcs3/Emu/RSX/RSXThread.h index 77cb887e8c..6bdedfca24 100644 --- a/rpcs3/Emu/RSX/RSXThread.h +++ b/rpcs3/Emu/RSX/RSXThread.h @@ -15,6 +15,7 @@ #include "Utilities/Thread.h" #include "Utilities/Timer.h" #include "Utilities/geometry.h" +#include "rsx_trace.h" extern u64 get_system_time(); diff --git a/rpcs3/Emu/RSX/rsx_methods.cpp b/rpcs3/Emu/RSX/rsx_methods.cpp index 973241592a..bfb41544bc 100644 --- a/rpcs3/Emu/RSX/rsx_methods.cpp +++ b/rpcs3/Emu/RSX/rsx_methods.cpp @@ -8,6 +8,9 @@ #include "rsx_decode.h" #include "Emu/Cell/PPUCallback.h" +#include +#include + #include #include #include @@ -723,6 +726,13 @@ namespace rsx else if (rsx->capture_current_frame) { rsx->capture_current_frame = false; + std::stringstream os; + cereal::BinaryOutputArchive archive(os); + archive(frame_debug); + { + fs::file f(fs::get_config_dir() + "capture.txt", fs::rewrite); + f.write(os.str()); + } Emu.Pause(); } diff --git a/rpcs3/Emu/RSX/rsx_methods.h b/rpcs3/Emu/RSX/rsx_methods.h index b4ebddd00f..4ef9d34793 100644 --- a/rpcs3/Emu/RSX/rsx_methods.h +++ b/rpcs3/Emu/RSX/rsx_methods.h @@ -9,6 +9,9 @@ #include "rsx_vertex_data.h" #include "Utilities/geometry.h" +#include +#include + namespace rsx { //TODO @@ -123,6 +126,15 @@ namespace rsx void reset(); + template + void serialize(Archive & ar) + { + ar(transform_program, +// transform_constants, + registers + ); + } + u16 viewport_width() const { return decode().width(); diff --git a/rpcs3/Emu/RSX/rsx_trace.h b/rpcs3/Emu/RSX/rsx_trace.h index 8bbaadbd29..8d5c424228 100644 --- a/rpcs3/Emu/RSX/rsx_trace.h +++ b/rpcs3/Emu/RSX/rsx_trace.h @@ -5,6 +5,11 @@ #include "Utilities/types.h" #include "rsx_methods.h" +#include +#include +#include +#include + namespace rsx { struct frame_capture_data @@ -18,10 +23,29 @@ struct frame_capture_data std::array, 2> depth_stencil; std::vector index; u32 vertex_count; + + template + void serialize(Archive & ar) + { + ar(name); + ar(programs); + ar(state); + ar(color_buffer); + ar(depth_stencil); + ar(index); + } + }; std::vector > command_queue; std::vector draw_calls; + template + void serialize(Archive & ar) + { + ar(command_queue); + ar(draw_calls); + } + void reset() { command_queue.clear();