mirror of
https://gitlab.com/ryandwyer/perfect-dark
synced 2026-08-09 10:32:33 -04:00
Introduce NUM_FRAMEBUFFERS and NUM_GFXTASKS constants
This commit is contained in:
+12
-9
@@ -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
@@ -5,7 +5,7 @@
|
||||
#include "data.h"
|
||||
#include "types.h"
|
||||
|
||||
u16 *g_FrameBuffers[2];
|
||||
u16 *g_FrameBuffers[NUM_FRAMEBUFFERS];
|
||||
|
||||
void langInit(void)
|
||||
{
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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;
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user