Introduce NUM_FRAMEBUFFERS and NUM_GFXTASKS constants

This commit is contained in:
Ryan Dwyer
2023-05-14 19:41:59 +10:00
parent 8559aeed1f
commit 134ca8206f
12 changed files with 55 additions and 50 deletions
+12 -9
View File
@@ -35,9 +35,9 @@
* marker for the end of the second element's allocation.
*/
u8 *g_GfxBuffers[3];
u8 *g_GfxBuffers[NUM_GFXTASKS + 1];
u32 var800aa58c;
u8 *g_VtxBuffers[3];
u8 *g_VtxBuffers[NUM_GFXTASKS + 1];
u8 *g_GfxMemPos;
u8 g_GfxActiveBufferIndex;
u32 g_GfxRequestedDisplayList;
@@ -56,8 +56,8 @@ u32 g_VtxSizesByPlayerCount[] = {
0x00028000,
};
s32 g_GfxNumSwapsPerBuffer[2] = {0, 1};
u32 g_GfxNumSwaps = 0x00000002;
s32 g_GfxNumSwapsPerBuffer[NUM_GFXTASKS] = {0, 1};
u32 g_GfxNumSwaps = 2;
/**
* Allocate graphics memory from the heap. Presumably called on stage load.
@@ -102,12 +102,12 @@ void gfxReset(void)
}
// %d Players : Allocating %d bytes for master dl's\n
g_GfxBuffers[0] = mempAlloc(g_GfxSizesByPlayerCount[PLAYERCOUNT() - 1] * 2, MEMPOOL_STAGE);
g_GfxBuffers[0] = mempAlloc(g_GfxSizesByPlayerCount[PLAYERCOUNT() - 1] * NUM_GFXTASKS, MEMPOOL_STAGE);
g_GfxBuffers[1] = g_GfxBuffers[0] + g_GfxSizesByPlayerCount[PLAYERCOUNT() - 1];
g_GfxBuffers[2] = g_GfxBuffers[1] + g_GfxSizesByPlayerCount[PLAYERCOUNT() - 1];
// Allocating %d bytes for mtxvtx space\n
g_VtxBuffers[0] = mempAlloc(g_VtxSizesByPlayerCount[PLAYERCOUNT() - 1] * 2, MEMPOOL_STAGE);
g_VtxBuffers[0] = mempAlloc(g_VtxSizesByPlayerCount[PLAYERCOUNT() - 1] * NUM_GFXTASKS, MEMPOOL_STAGE);
g_VtxBuffers[1] = g_VtxBuffers[0] + g_VtxSizesByPlayerCount[PLAYERCOUNT() - 1];
g_VtxBuffers[2] = g_VtxBuffers[1] + g_VtxSizesByPlayerCount[PLAYERCOUNT() - 1];
@@ -140,10 +140,15 @@ void *gfxAllocateMatrix(void)
return ptr;
}
/**
* sizeof(LookAt) is 0x10 and it consists of two Light structs of 0x8 each.
* The function allocates 0x8 for every count, so it could be allocating lights
* instead, however it's only used for LookAts so it's named as LookAt.
*/
void *gfxAllocateLookAt(s32 count)
{
void *ptr = g_GfxMemPos;
g_GfxMemPos += count * 0x10;
g_GfxMemPos += count * (sizeof(LookAt) / 2);
return ptr;
}
@@ -166,8 +171,6 @@ void *gfxAllocate(u32 size)
return ptr;
}
extern s32 g_GfxNumSwapsPerBuffer[2];
void gfxSwapBuffers(void)
{
g_GfxActiveBufferIndex ^= 1;
+1 -1
View File
@@ -5,7 +5,7 @@
#include "data.h"
#include "types.h"
u16 *g_FrameBuffers[2];
u16 *g_FrameBuffers[NUM_FRAMEBUFFERS];
void langInit(void)
{
+1 -1
View File
@@ -375,7 +375,7 @@ void playermgrAllocatePlayer(s32 index)
g_Vars.players[index]->floorflags = 0;
for (i = 0; i < 2; i++) {
for (i = 0; i < ARRAYCOUNT(g_Vars.players[index]->viewport); i++) {
g_Vars.players[index]->viewport[i].vp.vscale[0] = 640;
g_Vars.players[index]->viewport[i].vp.vscale[1] = (PAL ? 544 : 480);
g_Vars.players[index]->viewport[i].vp.vscale[2] = 511;
+2 -2
View File
@@ -77,7 +77,7 @@ void roomFreeMtx(s32 index)
roomUnlinkMtx(index, g_RoomMtxLinkedRooms[index]);
}
g_RoomMtxAges[index] = 2;
g_RoomMtxAges[index] = NUM_GFXTASKS;
g_RoomMtxBaseRooms[index] = -1;
g_RoomMtxScales[index] = 1;
}
@@ -87,7 +87,7 @@ s32 roomAllocateMtx(void)
s32 i;
for (i = 0; i < g_RoomMtxNumSlots; i++) {
if (g_RoomMtxAges[i] >= 2 && g_RoomMtxBaseRooms[i] == -1) {
if (g_RoomMtxAges[i] >= NUM_GFXTASKS && g_RoomMtxBaseRooms[i] == -1) {
return i;
}
}
+1 -1
View File
@@ -13,7 +13,7 @@ void roomsTick(void)
if (g_RoomMtxBaseRooms[i] >= 0) {
g_RoomMtxAges[i]++;
if (g_RoomMtxAges[i] > 1) {
if (g_RoomMtxAges[i] >= NUM_GFXTASKS) {
roomFreeMtx(i);
}
}
+3 -3
View File
@@ -7,8 +7,8 @@
extern OSThread g_MainThread;
extern OSMesgQueue g_MainMesgQueue;
extern OSSched g_Sched;
extern OSViMode var8008dcc0[2];
extern OSViMode *var8008dd60[2];
extern OSViMode var8008dcc0[NUM_GFXTASKS];
extern OSViMode *var8008dd60[NUM_GFXTASKS];
extern s32 var8008de08;
extern s32 var8008de0c;
extern s32 var8008de10;
@@ -61,7 +61,7 @@ extern OSTimer __osEepromTimer;
extern OSMesgQueue __osEepromTimerQ;
extern OSMesg __osEepromTimerMsg;
extern u32 var8009ca84;
extern u16 *g_FrameBuffers[2];
extern u16 *g_FrameBuffers[NUM_FRAMEBUFFERS];
extern u8 var8009caec;
extern u8 var8009caed;
extern u8 var8009caee;
+2
View File
@@ -2940,6 +2940,8 @@
#define NUM_CYCLEABLE_WEAPONS 45
#define NUM_EXPLOSIONTYPES 26
#define NUM_FIRESLOTS 20
#define NUM_FRAMEBUFFERS 2
#define NUM_GFXTASKS 2
#define NUM_MPBEAUHEADS 5
#define NUM_MPBOTCOMMANDS 14
#define NUM_MPBODIES 61
+3 -3
View File
@@ -11,9 +11,9 @@ extern u8 *g_StackLeftAddrs[7];
extern u8 *g_StackRightAddrs[7];
extern u8 *g_StackAllocatedPos;
extern s32 var8005ce74;
extern f32 g_ViXScalesBySlot[2];
extern f32 g_ViYScalesBySlot[2];
extern bool g_SchedViModesPending[2];
extern f32 g_ViXScalesBySlot[NUM_GFXTASKS];
extern f32 g_ViYScalesBySlot[NUM_GFXTASKS];
extern bool g_SchedViModesPending[NUM_GFXTASKS];
extern s32 g_ViUnblackTimer;
extern s32 g_ViShakeDirection;
extern s32 g_ViShakeIntensity;
+1 -1
View File
@@ -2560,7 +2560,7 @@ struct player {
/*0x0494*/ union modelrwdata *bondheadsave[30];
/*0x050c*/ u32 unk050c;
/*0x0510*/ Mtxf bondheadmatrices[4];
/*0x0610*/ Vp viewport[2];
/*0x0610*/ Vp viewport[NUM_FRAMEBUFFERS];
/*0x0630*/ s16 viewwidth; // 320 lo-res, 640 hi-res
/*0x0632*/ s16 viewheight; // 220 regardless of res
/*0x0634*/ s16 viewleft; // 0
+3 -3
View File
@@ -419,7 +419,7 @@ void mainInit(void)
addr = K0BASE + 8 * 1024 * 1024;
}
addr -= 640 * 480 * 2; // the framebuffer itself
addr -= 640 * 480 * NUM_FRAMEBUFFERS; // the framebuffer itself
addr -= 0x40; // align down to a multiple of 0x40
fb = (u16 *) ALIGN64(PHYS_TO_K0(addr));
@@ -564,7 +564,7 @@ void mainInit(void)
addr = K0BASE + 8 * 1024 * 1024;
}
addr -= 640 * 480 * 2; // the framebuffer itself
addr -= 640 * 480 * NUM_FRAMEBUFFERS; // the framebuffer itself
addr -= 0x40; // align down to a multiple of 0x40
fb = (u16 *) ALIGN64(PHYS_TO_K0(addr));
@@ -1413,7 +1413,7 @@ void mainTick(void)
OSScMsg msg = {OS_SC_DONE_MSG};
s32 i;
if (g_MainChangeToStageNum < 0 && g_MainNumGfxTasks < 2) {
if (g_MainChangeToStageNum < 0 && g_MainNumGfxTasks < NUM_GFXTASKS) {
frametimeCalculate();
profile00009a98();
profileReset();
+8 -8
View File
@@ -60,9 +60,9 @@ void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp);
void __scYield(OSSched *s);
s32 __scSchedule(OSSched *sc, OSScTask **sp, OSScTask **dp, s32 availRCP);
OSViMode var8008dcc0[2];
OSViMode *var8008dd60[2];
OSViMode var8008dd68[2];
OSViMode var8008dcc0[NUM_GFXTASKS];
OSViMode *var8008dd60[NUM_GFXTASKS];
OSViMode var8008dd68[NUM_GFXTASKS];
s32 var8008de08;
s32 var8008de0c;
s32 var8008de10;
@@ -82,10 +82,10 @@ u32 g_SchedCrashRenderInterval = 45000000;
u32 g_SchedCrashLastRendered = 0;
s32 var8005ce74 = 0;
f32 g_ViXScalesBySlot[2] = {1, 1};
f32 g_ViYScalesBySlot[2] = {1, 1};
bool g_SchedViModesPending[2] = {false, false};
s32 g_ViUnblackTimer = 3;
f32 g_ViXScalesBySlot[NUM_GFXTASKS] = {1, 1};
f32 g_ViYScalesBySlot[NUM_GFXTASKS] = {1, 1};
bool g_SchedViModesPending[NUM_GFXTASKS] = {false, false};
s32 g_ViUnblackTimer = NUM_FRAMEBUFFERS + 1;
s32 g_ViShakeDirection = 1;
s32 g_ViShakeIntensity = 0;
s32 g_ViShakeTimer = 0;
@@ -661,7 +661,7 @@ s32 __scTaskComplete(OSSched *sc, OSScTask *t)
g_SchedViModesPending[1 - var8005ce74] = false;
}
if (g_ViUnblackTimer != 0 && g_ViUnblackTimer < 3) {
if (g_ViUnblackTimer != 0 && g_ViUnblackTimer <= NUM_FRAMEBUFFERS) {
g_ViUnblackTimer--;
}
+18 -18
View File
@@ -28,7 +28,7 @@ u16 g_ViPerspScale;
u8 g_ViFrontIndex;
u8 g_ViBackIndex;
struct rend_vidat g_ViDataArray[] = {
struct rend_vidat g_ViDataArray[NUM_GFXTASKS] = {
{
0, 0, 0, 0,
FBALLOC_WIDTH_LO, FBALLOC_HEIGHT_LO, // x and y
@@ -115,7 +115,7 @@ void viConfigureForCopyright(u16 *texturedata)
{
s32 i;
for (i = 0; i < 2; i++) {
for (i = 0; i < NUM_GFXTASKS; i++) {
g_FrameBuffers[i] = texturedata;
g_ViDataArray[i].x = 576;
@@ -144,7 +144,7 @@ void viConfigureForLegal(void)
{
s32 i;
for (i = 0; i < 2; i++) {
for (i = 0; i < NUM_GFXTASKS; i++) {
g_ViDataArray[i].x = FBALLOC_WIDTH_LO;
g_ViDataArray[i].bufx = FBALLOC_WIDTH_LO;
g_ViDataArray[i].viewx = FBALLOC_WIDTH_LO;
@@ -187,10 +187,10 @@ void viReset(s32 stagenum)
if (stagenum == STAGE_TITLE || stagenum == STAGE_TEST_OLD) {
if (IS4MB()) {
viSetMode(VIMODE_HI);
fbsize = (FBALLOC_WIDTH_LO * 2) * (FBALLOC_HEIGHT_LO * 2) * 2;
fbsize = (FBALLOC_WIDTH_LO * 2) * (FBALLOC_HEIGHT_LO * 2) * NUM_FRAMEBUFFERS;
} else {
viSetMode(VIMODE_HI);
fbsize = g_ViModeWidths[2] * g_ViModeHeights[2] * 2;
fbsize = g_ViModeWidths[2] * g_ViModeHeights[2] * NUM_FRAMEBUFFERS;
}
} else {
viSetMode(VIMODE_LO);
@@ -198,24 +198,24 @@ void viReset(s32 stagenum)
if (1);
fbsize = IS4MB()
? FBALLOC_WIDTH_LO * FBALLOC_HEIGHT_LO * 2
: FBALLOC_WIDTH_HI * FBALLOC_HEIGHT_HI * 2;
? FBALLOC_WIDTH_LO * FBALLOC_HEIGHT_LO * NUM_FRAMEBUFFERS
: FBALLOC_WIDTH_HI * FBALLOC_HEIGHT_HI * NUM_FRAMEBUFFERS;
if (IS4MB() && PLAYERCOUNT() == 2) {
// 4MB 2-player: The viewports are 110px tall
#if VERSION >= VERSION_NTSC_1_0
fbsize = FBALLOC_WIDTH_LO * (FBALLOC_HEIGHT_LO / 2) * 2;
fbsize = FBALLOC_WIDTH_LO * (FBALLOC_HEIGHT_LO / 2) * NUM_FRAMEBUFFERS;
#else
fbsize = SCREEN_320 * (SCREEN_240 / 2) * 2;
fbsize = SCREEN_320 * (SCREEN_240 / 2) * NUM_FRAMEBUFFERS;
#endif
g_Vars.fourmeg2player = true;
} else if ((g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) && PLAYERCOUNT() == 2) {
// PAL is using its correct size
fbsize = SCREEN_WIDTH_LO * SCREEN_HEIGHT_LO * 2;
fbsize = SCREEN_WIDTH_LO * SCREEN_HEIGHT_LO * NUM_FRAMEBUFFERS;
}
}
ptr = mempAlloc(fbsize * 2 + 0x40, MEMPOOL_STAGE);
ptr = mempAlloc(fbsize * sizeof(u16) + 0x40, MEMPOOL_STAGE);
ptr = (u8 *)(((uintptr_t) ptr + 0x3f) & 0xffffffc0);
@@ -238,14 +238,14 @@ void viReset(s32 stagenum)
/**
* If black is true, set the video output to black indefinitely.
* g_ViUnblackTimer is set to 3 which causes the timer to be paused.
* If black is false, unblack once all the framebuffers have been cycled through.
*
* If black is false, set the timer to 2. This causes it to tick down once per
* frame and unblack once it reaches 0.
* The g_ViUnblackTimer value only ticks down when it's 2 or less,
* so passing true to this function makes it not tick.
*/
void viBlack(bool black)
{
black += 2;
black += NUM_FRAMEBUFFERS;
g_ViUnblackTimer = black;
}
@@ -1156,15 +1156,15 @@ void viUpdateMode(void)
}
// 908
slot = (slot + 1) % 2;
slot = (slot + 1) % NUM_GFXTASKS;
g_ViSlot = slot;
g_RdpCurTask->framebuffer = g_ViIs16Bit ? g_ViBackData->fb : g_FrameBuffers[0];
prevdata = g_ViBackData;
g_ViFrontIndex = (g_ViFrontIndex + 1) % 2;
g_ViBackIndex = (g_ViBackIndex + 1) % 2;
g_ViFrontIndex = (g_ViFrontIndex + 1) % NUM_FRAMEBUFFERS;
g_ViBackIndex = (g_ViBackIndex + 1) % NUM_FRAMEBUFFERS;
g_ViFrontData = g_ViDataArray + g_ViFrontIndex;
g_ViBackData = g_ViDataArray + g_ViBackIndex;