diff options
| author | Nicholas Estelami <NEstelami@users.noreply.github.com> | 2023-11-16 23:52:01 -0500 |
|---|---|---|
| committer | Nicholas Estelami <NEstelami@users.noreply.github.com> | 2023-11-16 23:52:01 -0500 |
| commit | 9b23cbae4c29d868da2513cc137f6218615ce6d0 (patch) | |
| tree | 63754d85c16c28ae7f1b536e55f42deffff61125 | |
| parent | 9373d54db66e3f342754e250fa223fc413f86fe6 (diff) | |
Sweepy :tm:
| -rw-r--r-- | mm/src/code/graph.c | 67 | ||||
| -rw-r--r-- | mm/src/code/z_kankyo.c | 8 | ||||
| -rw-r--r-- | mm/src/code/z_rcp.c | 24 | ||||
| -rw-r--r-- | mm/src/overlays/gamestates/ovl_title/z_title.c | 23 |
4 files changed, 82 insertions, 40 deletions
diff --git a/mm/src/code/graph.c b/mm/src/code/graph.c index b99d3d27b..a4b73bf84 100644 --- a/mm/src/code/graph.c +++ b/mm/src/code/graph.c @@ -1,9 +1,8 @@ +#include "prevent_bss_reordering.h" #include "z64.h" #include "regs.h" #include "functions.h" #include "fault.h" -#include "BenPort.h" -#include <libultraship/libultraship.h> // Variables are put before most headers as a hacky way to bypass bss reordering FaultAddrConvClient sGraphFaultAddrConvClient; @@ -26,6 +25,10 @@ OSTime sGraphPrevUpdateEndTime; #include "overlays/gamestates/ovl_title/z_title.h" #include "z_title_setup.h" +void Graph_StartFrame(); +void Graph_ProcessGfxCommands(Gfx* commands); +void Graph_ProcessFrame(void (*run_one_game_iter)(void)); + void Graph_FaultClient(void) { FaultDrawer_DrawText(30, 100, "ShowFrameBuffer PAGE 0/1"); osViSwapBuffer(SysCfb_GetFramebuffer(0)); @@ -45,7 +48,7 @@ void Graph_SetNextGfxPool(GraphicsContext* gfxCtx) { GfxPool* pool = &gGfxPools[gfxCtx->gfxPoolIdx % 2]; gGfxMasterDL = &pool->master; - gSegments[0x0E] = (uintptr_t)gGfxMasterDL; + gSegments[0x0E] = gGfxMasterDL; pool->headMagic = GFXPOOL_HEAD_MAGIC; pool->tailMagic = GFXPOOL_TAIL_MAGIC; @@ -63,7 +66,7 @@ void Graph_SetNextGfxPool(GraphicsContext* gfxCtx) { gfxCtx->debugBuffer = pool->debugBuffer; gfxCtx->curFrameBuffer = SysCfb_GetFramebuffer(gfxCtx->framebufferIndex % 2); - gSegments[0x0F] = (uintptr_t)gfxCtx->curFrameBuffer; + gSegments[0x0F] = gfxCtx->curFrameBuffer; gfxCtx->zbuffer = SysCfb_GetZBuffer(); @@ -124,13 +127,13 @@ void Graph_Init(GraphicsContext* gfxCtx) { gfxCtx->xScale = gViConfigXScale; gfxCtx->yScale = gViConfigYScale; osCreateMesgQueue(&gfxCtx->queue, gfxCtx->msgBuff, ARRAY_COUNT(gfxCtx->msgBuff)); - Fault_AddClient(&sGraphFaultClient, (void*)Graph_FaultClient, NULL, NULL); - Fault_AddAddrConvClient(&sGraphFaultAddrConvClient, Graph_FaultAddrConv, NULL); + // Fault_AddClient(&sGraphFaultClient, (void*)Graph_FaultClient, NULL, NULL); + // Fault_AddAddrConvClient(&sGraphFaultAddrConvClient, Graph_FaultAddrConv, NULL); } void Graph_Destroy(GraphicsContext* gfxCtx) { - Fault_RemoveClient(&sGraphFaultClient); - Fault_RemoveAddrConvClient(&sGraphFaultAddrConvClient); + // Fault_RemoveClient(&sGraphFaultClient); + // Fault_RemoveAddrConvClient(&sGraphFaultAddrConvClient); } /** @@ -147,12 +150,11 @@ void Graph_TaskSet00(GraphicsContext* gfxCtx, GameState* gameState) { OSMesg msg; CfbInfo* cfb; - #if 0 retry: - osSetTimer(&timer, OS_USEC_TO_CYCLES(3 * 1000 * 1000), 0, &gfxCtx->queue, (OSMesg)666); - osRecvMesg(&gfxCtx->queue, &msg, OS_MESG_BLOCK); - osStopTimer(&timer); - +// osSetTimer(&timer, OS_USEC_TO_CYCLES(3 * 1000 * 1000), 0, &gfxCtx->queue, (OSMesg)666); +// osRecvMesg(&gfxCtx->queue, &msg, OS_MESG_BLOCK); +// osStopTimer(&timer); +#if 0 if (msg == (OSMesg)666) { osSyncPrintf("GRAPH SP TIMEOUT\n"); if (retryCount >= 0) { @@ -162,10 +164,10 @@ retry: } else { // graph.c: No more! die! osSyncPrintf("graph.c:もうダメ!死ぬ!\n"); - Fault_AddHungupAndCrashImpl("RCP is HUNG UP!!", "Oh! MY GOD!!"); + //Fault_AddHungupAndCrashImpl("RCP is HUNG UP!!", "Oh! MY GOD!!"); } } - #endif +#endif gfxCtx->masterList = gGfxMasterDL; if (gfxCtx->callback != NULL) { gfxCtx->callback(gfxCtx, gfxCtx->callbackArg); @@ -182,9 +184,12 @@ retry: task->dram_stack = (u64*)gGfxSPTaskStack; task->dram_stack_size = sizeof(gGfxSPTaskStack); task->output_buff = gGfxSPTaskOutputBufferPtr; - task->output_buff_size = (void*)gGfxSPTaskOutputBufferEnd; + task->output_buff_size = gGfxSPTaskOutputBufferEnd; task->data_ptr = (u64*)gGfxMasterDL; - task->data_size = 0; + OPEN_DISPS(gfxCtx); + task->data_size = (uintptr_t)WORK_DISP - (uintptr_t)gfxCtx->workBuffer; + CLOSE_DISPS(gfxCtx); + task->yield_data_ptr = (u64*)gGfxSPTaskYieldBuffer; task->yield_data_size = sizeof(gGfxSPTaskYieldBuffer); @@ -235,7 +240,7 @@ void Graph_UpdateGame(GameState* gameState) { GameState_GetInput(gameState); GameState_IncrementFrameCount(gameState); // BENTODO - //if (SREG(20) < 3) { + // if (SREG(20) < 3) { // Audio_Update(); //} } @@ -265,13 +270,22 @@ void Graph_ExecuteAndDraw(GraphicsContext* gfxCtx, GameState* gameState) { { Gfx* gfx = gGfxMasterDL->taskStart; - gSPSegment(gfx++, 0x0E, gGfxMasterDL); + gSPSegment(gfx++, 0x0E, gGfxMasterDL->taskStart); __gSPDisplayList(gfx++, 0x0E000000 + ((uintptr_t)&D_0E000000.disps[3] - (uintptr_t)&D_0E000000) + 1); __gSPDisplayList(gfx++, 0x0E000000 + ((uintptr_t)&D_0E000000.disps[0] - (uintptr_t)&D_0E000000) + 1); __gSPDisplayList(gfx++, 0x0E000000 + ((uintptr_t)&D_0E000000.disps[1] - (uintptr_t)&D_0E000000) + 1); __gSPDisplayList(gfx++, 0x0E000000 + ((uintptr_t)&D_0E000000.disps[2] - (uintptr_t)&D_0E000000) + 1); __gSPDisplayList(gfx++, 0x0E000000 + ((uintptr_t)&D_0E000000.debugDisp[0] - (uintptr_t)&D_0E000000) + 1); gSPDisplayList(gfx++, gfxCtx->work.start); + + gSPDisplayList(gfx++, gGfxPools[gfxCtx->gfxPoolIdx % 2].workBuffer); + gSPDisplayList(gfx++, gGfxPools[gfxCtx->gfxPoolIdx % 2].polyOpaBuffer); + gSPDisplayList(gfx++, gGfxPools[gfxCtx->gfxPoolIdx % 2].polyXluBuffer); + gSPDisplayList(gfx++, gGfxPools[gfxCtx->gfxPoolIdx % 2].overlayBuffer); + + // BENTODO: CRASH! + // gSPDisplayList(gfx++, gGfxPools[gfxCtx->gfxPoolIdx % 2].debugBuffer); + gDPPipeSync(gfx++); gDPFullSync(gfx++); gSPEndDisplayList(gfx++); @@ -283,10 +297,10 @@ void Graph_ExecuteAndDraw(GraphicsContext* gfxCtx, GameState* gameState) { GfxPool* pool = &gGfxPools[gfxCtx->gfxPoolIdx % 2]; if (pool->headMagic != GFXPOOL_HEAD_MAGIC) { - Fault_AddHungupAndCrash("../graph.c", 1054); + // Fault_AddHungupAndCrash("../graph.c", 1054); } if (pool->tailMagic != GFXPOOL_TAIL_MAGIC) { - Fault_AddHungupAndCrash("../graph.c", 1066); + // Fault_AddHungupAndCrash("../graph.c", 1066); } } @@ -310,6 +324,8 @@ void Graph_ExecuteAndDraw(GraphicsContext* gfxCtx, GameState* gameState) { Graph_TaskSet00(gfxCtx, gameState); gfxCtx->gfxPoolIdx++; gfxCtx->framebufferIndex++; + + Graph_ProcessGfxCommands(&gGfxMasterDL->taskStart[0]); } { @@ -379,10 +395,15 @@ void RunFrame() { Graph_StartFrame(); - //PadMgr_ThreadEntry(&gPadMgr); + PadMgr_ThreadEntry(&gPadMgr); Graph_Update(&runFrameContext.gfxCtx, runFrameContext.gameState); - Graph_ProcessGfxCommands(runFrameContext.gfxCtx.workBuffer); + // ticksB = GetPerfCounter(); + + // Graph_ProcessGfxCommands(runFrameContext.gfxCtx.workBuffer); + // Graph_ProcessGfxCommands(gGfxMasterDL->taskStart); + // uint64_t diff = (ticksB - ticksA) / (freq / 1000); + // printf("Frame simulated in %ims\n", diff); runFrameContext.state = 1; return; nextFrame:; diff --git a/mm/src/code/z_kankyo.c b/mm/src/code/z_kankyo.c index 60a60103b..fc7a25bb2 100644 --- a/mm/src/code/z_kankyo.c +++ b/mm/src/code/z_kankyo.c @@ -2656,7 +2656,9 @@ void Environment_FillScreen(GraphicsContext* gfxCtx, u8 red, u8 green, u8 blue, gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, red, green, blue, alpha); gDPSetAlphaDither(POLY_OPA_DISP++, G_AD_DISABLE); gDPSetColorDither(POLY_OPA_DISP++, G_CD_DISABLE); - gSPDisplayList(POLY_OPA_DISP++, D_0E000000.clearFillRect); + + __gSPDisplayList(POLY_OPA_DISP++, + 0x0E000000 + ((uintptr_t)&D_0E000000.clearFillRect - (uintptr_t)&D_0E000000) + 1); } if (drawFlags & FILL_SCREEN_XLU) { @@ -2669,7 +2671,9 @@ void Environment_FillScreen(GraphicsContext* gfxCtx, u8 red, u8 green, u8 blue, gDPSetAlphaDither(POLY_XLU_DISP++, G_AD_DISABLE); gDPSetColorDither(POLY_XLU_DISP++, G_CD_DISABLE); - gSPDisplayList(POLY_XLU_DISP++, D_0E000000.clearFillRect); + + __gSPDisplayList(POLY_XLU_DISP++, + 0x0E000000 + ((uintptr_t)&D_0E000000.clearFillRect - (uintptr_t)&D_0E000000) + 1); } CLOSE_DISPS(gfxCtx); diff --git a/mm/src/code/z_rcp.c b/mm/src/code/z_rcp.c index 891f939e8..2ae0388cb 100644 --- a/mm/src/code/z_rcp.c +++ b/mm/src/code/z_rcp.c @@ -1,7 +1,6 @@ #include "global.h" #include "sys_cfb.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" -#include <libultraship/libultraship.h> Gfx gSetupDLs[SETUPDL_MAX][6] = { { @@ -841,6 +840,8 @@ Gfx sFillSetupDL[] = { G_TD_CLAMP | G_TP_PERSP | G_CYC_FILL | G_PM_NPRIMITIVE, G_AC_NONE | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2), gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + // BENTODO: CRASH + // gsSPDisplayList(D_0E000000.setScissor), gsSPDisplayList(0x0E0001C8 | 1), gsDPSetBlendColor(0x00, 0x00, 0x00, 0x08), gsSPClipRatio(FRUSTRATIO_2), @@ -1450,8 +1451,8 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g s32 i; gSegments[0x00] = 0; - gSegments[0x0F] = (uintptr_t)gfxCtx->curFrameBuffer; - gSegments[0x0E] = (uintptr_t)gGfxMasterDL; + gSegments[0x0F] = gfxCtx->curFrameBuffer; + gSegments[0x0E] = gGfxMasterDL; zbuffer = gfxCtx->zbuffer; @@ -1459,8 +1460,10 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g masterGfx = gGfxMasterDL->setupBuffers; - gSPDisplayList(&masterGfx[0], D_0E000000.syncSegments); + __gSPDisplayList(&masterGfx[0], 0x0E000000 + ((uintptr_t)&D_0E000000.syncSegments - (uintptr_t)&D_0E000000) + 1); + gSPDisplayList(&masterGfx[1], sFillSetupDL); + gDPSetColorImage(&masterGfx[2], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000); if (zbuffer != NULL) { gDPSetDepthImage(&masterGfx[3], zbuffer); @@ -1488,7 +1491,9 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g gDPSetCycleType(&masterGfx[2], G_CYC_FILL); gDPSetRenderMode(&masterGfx[3], G_RM_NOOP, G_RM_NOOP2); gDPSetFillColor(&masterGfx[4], (GPACK_RGBA5551(255, 255, 240, 0) << 16) | GPACK_RGBA5551(255, 255, 240, 0)); - gSPDisplayList(&masterGfx[5], D_0E000000.clearFillRect); + + gSPDisplayList(&masterGfx[5], 0x0E000000 + ((uintptr_t)&D_0E000000.clearFillRect - (uintptr_t)&D_0E000000) + 1); + gDPSetColorImage(&masterGfx[6], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000); gSPEndDisplayList(&masterGfx[7]); } @@ -1501,7 +1506,8 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g gDPSetCycleType(&masterGfx[1], G_CYC_FILL); gDPSetRenderMode(&masterGfx[2], G_RM_NOOP, G_RM_NOOP2); gDPSetFillColor(&masterGfx[3], (GPACK_RGBA5551(r, g, b, 1) << 16) | GPACK_RGBA5551(r, g, b, 1)); - gSPBranchList(&masterGfx[4], D_0E000000.clearFillRect); + + gSPBranchList(&masterGfx[4], 0x0E000000 + ((uintptr_t)&D_0E000000.clearFillRect - (uintptr_t)&D_0E000000) + 1); // Fillrect used by the above buffer clearing routines @@ -1540,10 +1546,12 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g gSPDisplayList(DEBUG_DISP++, gGfxMasterDL->setupBuffers); if (clearZb) { - gSPDisplayList(POLY_OPA_DISP++, D_0E000000.clearZBuffer); + __gSPDisplayList(POLY_OPA_DISP++, + 0x0E000000 + ((uintptr_t)&D_0E000000.clearZBuffer - (uintptr_t)&D_0E000000) + 1); } if (clearFb) { - gSPDisplayList(POLY_OPA_DISP++, D_0E000000.clearFrameBuffer); + __gSPDisplayList(POLY_OPA_DISP++, + 0x0E000000 + ((uintptr_t)&D_0E000000.clearFrameBuffer - (uintptr_t)&D_0E000000) + 1); } CLOSE_DISPS(gfxCtx); diff --git a/mm/src/overlays/gamestates/ovl_title/z_title.c b/mm/src/overlays/gamestates/ovl_title/z_title.c index 3e87bb72e..2d9862460 100644 --- a/mm/src/overlays/gamestates/ovl_title/z_title.c +++ b/mm/src/overlays/gamestates/ovl_title/z_title.c @@ -10,6 +10,9 @@ #include "CIC6105.h" #include "overlays/gamestates/ovl_opening/z_opening.h" #include "misc/nintendo_rogo_static/nintendo_rogo_static.h" +#include "overlays/gamestates/ovl_select/z_select.h" +#include <stdlib.h> +#include "BenPort.h" void ConsoleLogo_UpdateCounters(ConsoleLogoState* this) { if ((this->coverAlpha == 0) && (this->visibleDuration != 0)) { @@ -76,6 +79,8 @@ void ConsoleLogo_Draw(GameState* thisx) { eye.x = -4949.148f; eye.y = 4002.5417f; eye.z = 1119.0837f; + void* shine = ResourceMgr_LoadTexOrDListByName(gNintendo64LogoTextShineTex); + char* logo = ResourceMgr_LoadTexOrDListByName(gNintendo64LogoTextTex); Hilite_DrawOpa(&object, &eye, &lightDir, this->state.gfxCtx); @@ -99,13 +104,13 @@ void ConsoleLogo_Draw(GameState* thisx) { COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 170, 255, 255, 255); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 255, 128); - gDPLoadMultiBlock(POLY_OPA_DISP++, gNintendo64LogoTextShineTex, 0x100, 1, G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0, - G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 5, 5, 2, 11); + gDPLoadMultiBlock(POLY_OPA_DISP++, shine, 0x100, 1, G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, 5, 5, 2, 11); for (idx = 0, y = 94; idx < 16; idx++, y += 2) { - gDPLoadTextureBlock(POLY_OPA_DISP++, &((u8*)gNintendo64LogoTextTex)[0x180 * idx], G_IM_FMT_I, G_IM_SIZ_8b, 192, - 2, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, - G_TX_NOLOD, G_TX_NOLOD); + gDPLoadTextureBlock(POLY_OPA_DISP++, &((u8*)logo)[0x180 * idx], G_IM_FMT_I, G_IM_SIZ_8b, 192, 2, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); gDPSetTileSize(POLY_OPA_DISP++, 1, this->uls, (this->ult & 0x7F) - idx * 4, 0, 0); gSPTextureRectangle(POLY_OPA_DISP++, 97 << 2, y << 2, (97 + 192) << 2, (y + 2) << 2, G_TX_RENDERTILE, 0, 0, @@ -119,6 +124,9 @@ void ConsoleLogo_Draw(GameState* thisx) { CLOSE_DISPS(this->state.gfxCtx); } +// hack for minibuild work +void MapSelect_Init(GameState* thisx); +void FileSelect_Init(GameState* thisx); void ConsoleLogo_Main(GameState* thisx) { ConsoleLogoState* this = (ConsoleLogoState*)thisx; @@ -126,7 +134,7 @@ void ConsoleLogo_Main(GameState* thisx) { OPEN_DISPS(this->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x01, this->staticSegment); + gSPSegment(OVERLAY_DISP++, 0x01, this->staticSegment); ConsoleLogo_UpdateCounters(this); ConsoleLogo_Draw(&this->state); @@ -136,7 +144,8 @@ void ConsoleLogo_Main(GameState* thisx) { gSaveContext.gameMode = GAMEMODE_TITLE_SCREEN; STOP_GAMESTATE(&this->state); - SET_NEXT_GAMESTATE(&this->state, TitleSetup_Init, sizeof(TitleSetupState)); + // hack + SET_NEXT_GAMESTATE(&this->state, MapSelect_Init, sizeof(MapSelectState)); } CLOSE_DISPS(this->state.gfxCtx); |
