TracePlayer - Expose internal playback pointers
This commit is contained in:
parent
b750875e9d
commit
2a88225500
|
@ -92,11 +92,17 @@ void TracePlayer::PlayTraceOnThread(const uint8_t* trace_data,
|
||||||
auto command_processor = graphics_system_->command_processor();
|
auto command_processor = graphics_system_->command_processor();
|
||||||
|
|
||||||
command_processor->set_swap_mode(SwapMode::kIgnored);
|
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;
|
auto trace_ptr = trace_data;
|
||||||
bool pending_break = false;
|
bool pending_break = false;
|
||||||
const PacketStartCommand* pending_packet = nullptr;
|
const PacketStartCommand* pending_packet = nullptr;
|
||||||
while (trace_ptr < trace_data + trace_size) {
|
while (trace_ptr < trace_data + trace_size) {
|
||||||
|
player_current_ptr_ = trace_ptr;
|
||||||
|
|
||||||
auto type = static_cast<TraceCommandType>(xe::load<uint32_t>(trace_ptr));
|
auto type = static_cast<TraceCommandType>(xe::load<uint32_t>(trace_ptr));
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case TraceCommandType::kPrimaryBufferStart: {
|
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->set_swap_mode(SwapMode::kNormal);
|
||||||
command_processor->IssueSwap(0, 1280, 720);
|
command_processor->IssueSwap(0, 1280, 720);
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#ifndef XENIA_GPU_TRACE_PLAYER_H_
|
#ifndef XENIA_GPU_TRACE_PLAYER_H_
|
||||||
#define XENIA_GPU_TRACE_PLAYER_H_
|
#define XENIA_GPU_TRACE_PLAYER_H_
|
||||||
|
|
||||||
|
#include <atomic>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include "xenia/gpu/trace_protocol.h"
|
#include "xenia/gpu/trace_protocol.h"
|
||||||
|
@ -34,8 +35,14 @@ class TracePlayer : public TraceReader {
|
||||||
GraphicsSystem* graphics_system() const { return graphics_system_; }
|
GraphicsSystem* graphics_system() const { return graphics_system_; }
|
||||||
int current_frame_index() const { return current_frame_index_; }
|
int current_frame_index() const { return current_frame_index_; }
|
||||||
int current_command_index() const { return current_command_index_; }
|
int current_command_index() const { return current_command_index_; }
|
||||||
|
bool playing_trace() const { return playing_trace_; }
|
||||||
const Frame* current_frame() const;
|
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 SeekFrame(int target_frame);
|
||||||
void SeekCommand(int target_command);
|
void SeekCommand(int target_command);
|
||||||
|
|
||||||
|
@ -49,6 +56,10 @@ class TracePlayer : public TraceReader {
|
||||||
GraphicsSystem* graphics_system_;
|
GraphicsSystem* graphics_system_;
|
||||||
int current_frame_index_;
|
int current_frame_index_;
|
||||||
int current_command_index_;
|
int current_command_index_;
|
||||||
|
std::atomic<bool> playing_trace_ = false;
|
||||||
|
std::atomic<const uint8_t*> player_current_ptr_ = 0;
|
||||||
|
std::atomic<const uint8_t*> player_start_ptr_ = 0;
|
||||||
|
std::atomic<const uint8_t*> player_target_ptr_ = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace gpu
|
} // namespace gpu
|
||||||
|
|
Loading…
Reference in New Issue