Add CiTrace recording support.
This is exposed in the GUI as a new "CiTrace Recording" widget. Playback is implemented by a standalone 3DS homebrew application (which only runs reliably within Citra currently; on an actual 3DS it will often crash still).
This commit is contained in:
parent
93d66475d4
commit
902fa4da52
15 changed files with 641 additions and 4 deletions
|
@ -21,12 +21,17 @@
|
|||
#include "core/hw/hw.h"
|
||||
#include "core/hw/gpu.h"
|
||||
|
||||
#include "core/tracer/recorder.h"
|
||||
|
||||
#include "video_core/command_processor.h"
|
||||
#include "video_core/hwrasterizer_base.h"
|
||||
#include "video_core/renderer_base.h"
|
||||
#include "video_core/utils.h"
|
||||
#include "video_core/video_core.h"
|
||||
|
||||
#include "video_core/debug_utils/debug_utils.h"
|
||||
|
||||
|
||||
namespace GPU {
|
||||
|
||||
Regs g_regs;
|
||||
|
@ -289,6 +294,11 @@ inline void Write(u32 addr, const T data) {
|
|||
if (config.trigger & 1)
|
||||
{
|
||||
u32* buffer = (u32*)Memory::GetPhysicalPointer(config.GetPhysicalAddress());
|
||||
|
||||
if (Pica::g_debug_context && Pica::g_debug_context->recorder) {
|
||||
Pica::g_debug_context->recorder->MemoryAccessed((u8*)buffer, config.size * sizeof(u32), config.GetPhysicalAddress());
|
||||
}
|
||||
|
||||
Pica::CommandProcessor::ProcessCommandList(buffer, config.size);
|
||||
|
||||
g_regs.command_processor_config.trigger = 0;
|
||||
|
@ -299,6 +309,13 @@ inline void Write(u32 addr, const T data) {
|
|||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// Notify tracer about the register write
|
||||
// This is happening *after* handling the write to make sure we properly catch all memory reads.
|
||||
if (Pica::g_debug_context && Pica::g_debug_context->recorder) {
|
||||
// addr + GPU VBase - IO VBase + IO PBase
|
||||
Pica::g_debug_context->recorder->RegisterWritten<T>(addr + 0x1EF00000 - 0x1EC00000 + 0x10100000, data);
|
||||
}
|
||||
}
|
||||
|
||||
// Explicitly instantiate template functions because we aren't defining this in the header:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue