From 2a882255002446dcec109ddc8075ac1be63939f5 Mon Sep 17 00:00:00 2001 From: "Dr. Chat" Date: Sat, 21 Nov 2015 21:41:41 -0600 Subject: [PATCH] TracePlayer - Expose internal playback pointers --- src/xenia/gpu/trace_player.cc | 7 +++++++ src/xenia/gpu/trace_player.h | 11 +++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/xenia/gpu/trace_player.cc b/src/xenia/gpu/trace_player.cc index 40291453f..43299ef2e 100644 --- a/src/xenia/gpu/trace_player.cc +++ b/src/xenia/gpu/trace_player.cc @@ -92,11 +92,17 @@ void TracePlayer::PlayTraceOnThread(const uint8_t* trace_data, auto command_processor = graphics_system_->command_processor(); command_processor->set_swap_mode(SwapMode::kIgnored); + player_start_ptr_ = trace_data; + player_target_ptr_ = trace_data + trace_size; + player_current_ptr_ = trace_data; + playing_trace_ = true; auto trace_ptr = trace_data; bool pending_break = false; const PacketStartCommand* pending_packet = nullptr; while (trace_ptr < trace_data + trace_size) { + player_current_ptr_ = trace_ptr; + auto type = static_cast(xe::load(trace_ptr)); switch (type) { case TraceCommandType::kPrimaryBufferStart: { @@ -184,6 +190,7 @@ void TracePlayer::PlayTraceOnThread(const uint8_t* trace_data, } } + playing_trace_ = false; command_processor->set_swap_mode(SwapMode::kNormal); command_processor->IssueSwap(0, 1280, 720); } diff --git a/src/xenia/gpu/trace_player.h b/src/xenia/gpu/trace_player.h index 6e78ac3a6..d0ef59fb4 100644 --- a/src/xenia/gpu/trace_player.h +++ b/src/xenia/gpu/trace_player.h @@ -10,6 +10,7 @@ #ifndef XENIA_GPU_TRACE_PLAYER_H_ #define XENIA_GPU_TRACE_PLAYER_H_ +#include #include #include "xenia/gpu/trace_protocol.h" @@ -34,8 +35,14 @@ class TracePlayer : public TraceReader { GraphicsSystem* graphics_system() const { return graphics_system_; } int current_frame_index() const { return current_frame_index_; } int current_command_index() const { return current_command_index_; } + bool playing_trace() const { return playing_trace_; } const Frame* current_frame() const; + // Only valid if playing_trace is true. + const uint8_t* player_current_ptr() const { return player_current_ptr_; } + const uint8_t* player_start_ptr() const { return player_start_ptr_; } + const uint8_t* player_target_ptr() const { return player_target_ptr_; } + void SeekFrame(int target_frame); void SeekCommand(int target_command); @@ -49,6 +56,10 @@ class TracePlayer : public TraceReader { GraphicsSystem* graphics_system_; int current_frame_index_; int current_command_index_; + std::atomic playing_trace_ = false; + std::atomic player_current_ptr_ = 0; + std::atomic player_start_ptr_ = 0; + std::atomic player_target_ptr_ = 0; }; } // namespace gpu