add gfx debugger support (#4345)

Co-authored-by: Malkierian <malkierian@gmail.com>
This commit is contained in:
Archez
2024-10-18 11:05:31 +09:00
committed by GitHub
parent ed32a2820c
commit f1841a20f3
5 changed files with 48 additions and 12 deletions

View File

@@ -15,6 +15,15 @@
#define GFXPOOL_HEAD_MAGIC 0x1234
#define GFXPOOL_TAIL_MAGIC 0x5678
// SOH [Port] Game State management for our render loop
static struct RunFrameContext {
GraphicsContext gfxCtx;
GameState* gameState;
GameStateOverlay* nextOvl;
GameStateOverlay* ovl;
int state;
} runFrameContext;
OSTime sGraphUpdateTime;
OSTime sGraphSetTaskTime;
FaultClient sGraphFaultClient;
@@ -271,6 +280,12 @@ void Graph_TaskSet00(GraphicsContext* gfxCtx) {
void Graph_Update(GraphicsContext* gfxCtx, GameState* gameState) {
u32 problem;
// Skip game frame updates while gfx debugger is active, and execute with the last frame's DL buffer
if (GfxDebuggerIsDebugging()) {
Graph_ProcessGfxCommands(runFrameContext.gfxCtx.workBuffer);
return;
}
gameState->unk_A0 = 0;
Graph_InitTHGA(gfxCtx);
@@ -443,15 +458,6 @@ void Graph_Update(GraphicsContext* gfxCtx, GameState* gameState) {
uint64_t GetFrequency();
uint64_t GetPerfCounter();
static struct RunFrameContext {
GraphicsContext gfxCtx;
GameState* gameState;
GameStateOverlay* nextOvl;
GameStateOverlay* ovl;
int state;
} runFrameContext;
extern AudioMgr gAudioMgr;
extern void ProcessSaveStateRequests(void);
@@ -515,6 +521,10 @@ static void RunFrame()
Graph_Update(&runFrameContext.gfxCtx, runFrameContext.gameState);
//ticksB = GetPerfCounter();
if (GfxDebuggerIsDebuggingRequested()) {
GfxDebuggerDebugDisplayList(runFrameContext.gfxCtx.workBuffer);
}
Graph_ProcessGfxCommands(runFrameContext.gfxCtx.workBuffer);
@@ -565,7 +575,8 @@ void* Graph_Alloc2(GraphicsContext* gfxCtx, size_t size) {
}
void Graph_OpenDisps(Gfx** dispRefs, GraphicsContext* gfxCtx, const char* file, s32 line) {
if (HREG(80) == 7 && HREG(82) != 4) {
// SOH [Debugging] Force open/close disp string handling on so that the graphics debugger can leverage it
if (true || HREG(80) == 7 && HREG(82) != 4) {
dispRefs[0] = gfxCtx->polyOpa.p;
dispRefs[1] = gfxCtx->polyXlu.p;
dispRefs[2] = gfxCtx->overlay.p;
@@ -577,7 +588,8 @@ void Graph_OpenDisps(Gfx** dispRefs, GraphicsContext* gfxCtx, const char* file,
}
void Graph_CloseDisps(Gfx** dispRefs, GraphicsContext* gfxCtx, const char* file, s32 line) {
if (HREG(80) == 7 && HREG(82) != 4) {
// SOH [Debugging] Force open/close disp string handling on so that the graphics debugger can leverage it
if (true || HREG(80) == 7 && HREG(82) != 4) {
if (dispRefs[0] + 1 == gfxCtx->polyOpa.p) {
gfxCtx->polyOpa.p = dispRefs[0];
} else {