Fix some profiler issues

This commit is contained in:
James Lambert 2023-12-12 20:35:00 -07:00
parent d775df6b22
commit 39a1ec576d
4 changed files with 13 additions and 6 deletions

View file

@ -24,6 +24,10 @@ ifeq ($(PORTAL64_WITH_DEBUGGER),1)
LCDEFS += -DPORTAL64_WITH_DEBUGGER LCDEFS += -DPORTAL64_WITH_DEBUGGER
endif endif
ifeq ($(PORTAL64_WITH_RSP_PROFILER),1)
LCDEFS += -DPORTAL64_WITH_RSP_PROFILER
endif
BASE_TARGET_NAME = build/portal BASE_TARGET_NAME = build/portal
LD_SCRIPT = portal.ld LD_SCRIPT = portal.ld
@ -536,7 +540,7 @@ CODEOBJECTS_NO_DEBUG = $(CODEOBJECTS)
DATA_OBJECTS = build/assets/materials/images_mat.o DATA_OBJECTS = build/assets/materials/images_mat.o
ifeq ($(PORTAL64_WITH_DEBUGGER),1) ifeq ($(PORTAL64_WITH_DEBUGGER),1)
CODEOBJECTS_NO_DEBUG += build/debugger/debugger_stub.o build/debugger/serial.o CODEOBJECTS_NO_DEBUG += build/debugger/debugger_stub.o build/debugger/serial_stub.o
endif endif
$(CODESEGMENT)_no_debug.o: $(CODEOBJECTS_NO_DEBUG) $(CODESEGMENT)_no_debug.o: $(CODEOBJECTS_NO_DEBUG)

View file

@ -8,6 +8,8 @@
#endif #endif
#include <string.h> #include <string.h>
#include "../graphics/graphics.h"
#include "../util/memory.h"
#define VIDEO_MSG 666 #define VIDEO_MSG 666
#define RSP_DONE_MSG 667 #define RSP_DONE_MSG 667
@ -49,7 +51,7 @@ void printDisplayList(Gfx* dl, int depth, int* segments) {
if (command == G_DL) { if (command == G_DL) {
int address = dl->words.w1; int address = dl->words.w1;
int segment = _SHIFTR(address, 24, 4); int segment = _SHIFTR(address, 24, 4);
printDisplayList((Gfx*)(segments[segment] + (address & 0xFFFFFF)), depth + 1, segments); printDisplayList((Gfx*)PHYS_TO_K0((segments[segment] + (address & 0xFFFFFF))), depth + 1, segments);
} }
if (command == G_MOVEWORD) { if (command == G_MOVEWORD) {
@ -71,7 +73,7 @@ void printDisplayList(Gfx* dl, int depth, int* segments) {
#endif #endif
} }
void profileTask(OSSched* scheduler, OSThread* currentThread, OSTask* task) { void profileTask(OSSched* scheduler, OSThread* currentThread, OSTask* task, u16* framebuffer) {
// block scheduler thread // block scheduler thread
osSetThreadPri(currentThread, RSP_PROFILE_PRIORITY); osSetThreadPri(currentThread, RSP_PROFILE_PRIORITY);
@ -86,6 +88,8 @@ void profileTask(OSSched* scheduler, OSThread* currentThread, OSTask* task) {
// wait for DP to be available // wait for DP to be available
while (IO_READ(DPC_STATUS_REG) & (DPC_STATUS_DMA_BUSY | DPC_STATUS_END_VALID | DPC_STATUS_START_VALID)); while (IO_READ(DPC_STATUS_REG) & (DPC_STATUS_DMA_BUSY | DPC_STATUS_END_VALID | DPC_STATUS_START_VALID));
zeroMemory(framebuffer, sizeof(u16) * SCREEN_WD * SCREEN_HT);
OSMesgQueue messageQueue; OSMesgQueue messageQueue;
OSMesg messages[4]; OSMesg messages[4];

View file

@ -4,7 +4,7 @@
#include <ultra64.h> #include <ultra64.h>
#include <sched.h> #include <sched.h>
void profileTask(OSSched* scheduler, OSThread* currentThread, OSTask* task); void profileTask(OSSched* scheduler, OSThread* currentThread, OSTask* task, u16* framebuffer);
void profileMapAddress(void* ramAddress, const char* name); void profileMapAddress(void* ramAddress, const char* name);
void profileClearAddressMap(); void profileClearAddressMap();

View file

@ -333,8 +333,7 @@ static void gameProc(void* arg) {
#if PORTAL64_WITH_RSP_PROFILER #if PORTAL64_WITH_RSP_PROFILER
if (controllerGetButtonDown(2, START_BUTTON)) { if (controllerGetButtonDown(2, START_BUTTON)) {
struct GraphicsTask* task = &gGraphicsTasks[drawBufferIndex]; struct GraphicsTask* task = &gGraphicsTasks[drawBufferIndex];
zeroMemory(task->framebuffer, sizeof(u16) * SCREEN_WD * SCREEN_HT); profileTask(&scheduler, &gameThread, &task->task.list, task->framebuffer);
profileTask(&scheduler, &gameThread, &task->task.list);
} }
#endif #endif
timeUpdateDelta(); timeUpdateDelta();