Cache master displaylist on "hot" code paths (#724)

* add displaylist macros

* implement displaylist macro in memory.c

* API update

* implement displaylist macro on all 'hot' code paths

* Remove the macro entirely

* rename tmpDL

* remove the other two macros

* catch the last 2 missing statements

---------

Co-authored-by: someone2639 <someone2639@gmail.com>
This commit is contained in:
someone2639
2023-12-15 23:56:40 -05:00
committed by GitHub
parent b73d8dd178
commit d7c840b8f1
7 changed files with 156 additions and 99 deletions

View File

@@ -94,11 +94,13 @@ void *virtual_to_segmented(u32 segment, const void *addr) {
}
void move_segment_table_to_dmem(void) {
s32 i;
Gfx *tempGfxHead = gDisplayListHead;
for (i = 0; i < 16; i++) {
gSPSegment(gDisplayListHead++, i, sSegmentTable[i]);
for (s32 i = 0; i < 16; i++) {
gSPSegment(tempGfxHead++, i, sSegmentTable[i]);
}
gDisplayListHead = tempGfxHead;
}
#else
void *segmented_to_virtual(const void *addr) {

View File

@@ -271,6 +271,8 @@ void visual_surface_display(Gfx **gfx, Vtx *verts, s32 iteration) {
s32 count = VERTCOUNT;
s32 ntx = 0;
Gfx *tempGfxHead = gDisplayListHead;
while (vts > 0) {
if (count == VERTCOUNT) {
ntx = MIN(VERTCOUNT, vts);
@@ -298,6 +300,8 @@ void visual_surface_display(Gfx **gfx, Vtx *verts, s32 iteration) {
count += 3;
}
}
gDisplayListHead = tempGfxHead;
}
s32 iterate_surface_count(s32 x, s32 z) {

View File

@@ -156,32 +156,40 @@ void my_rsp_init(void) {
* Initialize the z buffer for the current frame.
*/
void init_z_buffer(s32 resetZB) {
gDPPipeSync(gDisplayListHead++);
Gfx *tempGfxHead = gDisplayListHead;
gDPSetDepthSource(gDisplayListHead++, G_ZS_PIXEL);
gDPSetDepthImage(gDisplayListHead++, gPhysicalZBuffer);
gDPPipeSync(tempGfxHead++);
gDPSetColorImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, gPhysicalZBuffer);
gDPSetDepthSource(tempGfxHead++, G_ZS_PIXEL);
gDPSetDepthImage(tempGfxHead++, gPhysicalZBuffer);
gDPSetColorImage(tempGfxHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, gPhysicalZBuffer);
if (!resetZB)
return;
gDPSetFillColor(gDisplayListHead++,
gDPSetFillColor(tempGfxHead++,
GPACK_ZDZ(G_MAXFBZ, 0) << 16 | GPACK_ZDZ(G_MAXFBZ, 0));
gDPFillRectangle(gDisplayListHead++, 0, gBorderHeight, SCREEN_WIDTH - 1,
gDPFillRectangle(tempGfxHead++, 0, gBorderHeight, SCREEN_WIDTH - 1,
SCREEN_HEIGHT - 1 - gBorderHeight);
gDisplayListHead = tempGfxHead;
}
/**
* Tells the RDP which of the three framebuffers it shall draw to.
*/
void select_framebuffer(void) {
gDPPipeSync(gDisplayListHead++);
Gfx *tempGfxHead = gDisplayListHead;
gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE);
gDPSetColorImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH,
gDPPipeSync(tempGfxHead++);
gDPSetCycleType(tempGfxHead++, G_CYC_1CYCLE);
gDPSetColorImage(tempGfxHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH,
gPhysicalFramebuffers[sRenderingFramebuffer]);
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, gBorderHeight, SCREEN_WIDTH,
gDPSetScissor(tempGfxHead++, G_SC_NON_INTERLACE, 0, gBorderHeight, SCREEN_WIDTH,
SCREEN_HEIGHT - gBorderHeight);
gDisplayListHead = tempGfxHead;
}
/**
@@ -189,19 +197,23 @@ void select_framebuffer(void) {
* Information about the color argument: https://jrra.zone/n64/doc/n64man/gdp/gDPSetFillColor.htm
*/
void clear_framebuffer(s32 color) {
gDPPipeSync(gDisplayListHead++);
Gfx *tempGfxHead = gDisplayListHead;
gDPSetRenderMode(gDisplayListHead++, G_RM_OPA_SURF, G_RM_OPA_SURF2);
gDPSetCycleType(gDisplayListHead++, G_CYC_FILL);
gDPPipeSync(tempGfxHead++);
gDPSetFillColor(gDisplayListHead++, color);
gDPFillRectangle(gDisplayListHead++,
gDPSetRenderMode(tempGfxHead++, G_RM_OPA_SURF, G_RM_OPA_SURF2);
gDPSetCycleType(tempGfxHead++, G_CYC_FILL);
gDPSetFillColor(tempGfxHead++, color);
gDPFillRectangle(tempGfxHead++,
GFX_DIMENSIONS_RECT_FROM_LEFT_EDGE(0), gBorderHeight,
GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(0) - 1, SCREEN_HEIGHT - gBorderHeight - 1);
gDPPipeSync(gDisplayListHead++);
gDPPipeSync(tempGfxHead++);
gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE);
gDPSetCycleType(tempGfxHead++, G_CYC_1CYCLE);
gDisplayListHead = tempGfxHead;
}
/**
@@ -218,38 +230,46 @@ void clear_viewport(Vp *viewport, s32 color) {
vpLrx = GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(SCREEN_WIDTH - vpLrx);
#endif
gDPPipeSync(gDisplayListHead++);
Gfx *tempGfxHead = gDisplayListHead;
gDPSetRenderMode(gDisplayListHead++, G_RM_OPA_SURF, G_RM_OPA_SURF2);
gDPSetCycleType(gDisplayListHead++, G_CYC_FILL);
gDPPipeSync(tempGfxHead++);
gDPSetFillColor(gDisplayListHead++, color);
gDPFillRectangle(gDisplayListHead++, vpUlx, vpUly, vpLrx, vpLry);
gDPSetRenderMode(tempGfxHead++, G_RM_OPA_SURF, G_RM_OPA_SURF2);
gDPSetCycleType(tempGfxHead++, G_CYC_FILL);
gDPPipeSync(gDisplayListHead++);
gDPSetFillColor(tempGfxHead++, color);
gDPFillRectangle(tempGfxHead++, vpUlx, vpUly, vpLrx, vpLry);
gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE);
gDPPipeSync(tempGfxHead++);
gDPSetCycleType(tempGfxHead++, G_CYC_1CYCLE);
gDisplayListHead = tempGfxHead;
}
/**
* Draw the horizontal screen borders.
*/
void draw_screen_borders(void) {
gDPPipeSync(gDisplayListHead++);
Gfx *tempGfxHead = gDisplayListHead;
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
gDPSetRenderMode(gDisplayListHead++, G_RM_OPA_SURF, G_RM_OPA_SURF2);
gDPSetCycleType(gDisplayListHead++, G_CYC_FILL);
gDPPipeSync(tempGfxHead++);
gDPSetFillColor(gDisplayListHead++, GPACK_RGBA5551(0, 0, 0, 0) << 16 | GPACK_RGBA5551(0, 0, 0, 0));
gDPSetScissor(tempGfxHead++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
gDPSetRenderMode(tempGfxHead++, G_RM_OPA_SURF, G_RM_OPA_SURF2);
gDPSetCycleType(tempGfxHead++, G_CYC_FILL);
gDPSetFillColor(tempGfxHead++, GPACK_RGBA5551(0, 0, 0, 0) << 16 | GPACK_RGBA5551(0, 0, 0, 0));
if (gBorderHeight) {
gDPFillRectangle(gDisplayListHead++, GFX_DIMENSIONS_RECT_FROM_LEFT_EDGE(0), 0,
gDPFillRectangle(tempGfxHead++, GFX_DIMENSIONS_RECT_FROM_LEFT_EDGE(0), 0,
GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(0) - 1, gBorderHeight - 1);
gDPFillRectangle(gDisplayListHead++,
gDPFillRectangle(tempGfxHead++,
GFX_DIMENSIONS_RECT_FROM_LEFT_EDGE(0), SCREEN_HEIGHT - gBorderHeight,
GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(0) - 1, SCREEN_HEIGHT - 1);
}
gDisplayListHead = tempGfxHead;
}
/**

View File

@@ -117,29 +117,37 @@ static struct CameraHUD sCameraHUD = { CAM_STATUS_NONE };
* Renders a rgba16 16x16 glyph texture from a table list.
*/
void render_hud_tex_lut(s32 x, s32 y, Texture *texture) {
gDPPipeSync(gDisplayListHead++);
gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, texture);
gSPDisplayList(gDisplayListHead++, &dl_hud_img_load_tex_block);
gSPTextureRectangle(gDisplayListHead++, x << 2, y << 2, (x + 15) << 2, (y + 15) << 2,
Gfx *tempGfxHead = gDisplayListHead;
gDPPipeSync(tempGfxHead++);
gDPSetTextureImage(tempGfxHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, texture);
gSPDisplayList(tempGfxHead++, &dl_hud_img_load_tex_block);
gSPTextureRectangle(tempGfxHead++, x << 2, y << 2, (x + 15) << 2, (y + 15) << 2,
G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10);
gDisplayListHead = tempGfxHead;
}
/**
* Renders a rgba16 8x8 glyph texture from a table list.
*/
void render_hud_small_tex_lut(s32 x, s32 y, Texture *texture) {
gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0,
Gfx *tempGfxHead = gDisplayListHead;
gDPSetTile(tempGfxHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0,
G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD);
gDPTileSync(gDisplayListHead++);
gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 2, 0, G_TX_RENDERTILE, 0,
gDPTileSync(tempGfxHead++);
gDPSetTile(tempGfxHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 2, 0, G_TX_RENDERTILE, 0,
G_TX_CLAMP, 3, G_TX_NOLOD, G_TX_CLAMP, 3, G_TX_NOLOD);
gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, (8 - 1) << G_TEXTURE_IMAGE_FRAC, (8 - 1) << G_TEXTURE_IMAGE_FRAC);
gDPPipeSync(gDisplayListHead++);
gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, texture);
gDPLoadSync(gDisplayListHead++);
gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 8 * 8 - 1, CALC_DXT(8, G_IM_SIZ_16b_BYTES));
gSPTextureRectangle(gDisplayListHead++, x << 2, y << 2, (x + 7) << 2, (y + 7) << 2, G_TX_RENDERTILE,
gDPSetTileSize(tempGfxHead++, G_TX_RENDERTILE, 0, 0, (8 - 1) << G_TEXTURE_IMAGE_FRAC, (8 - 1) << G_TEXTURE_IMAGE_FRAC);
gDPPipeSync(tempGfxHead++);
gDPSetTextureImage(tempGfxHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, texture);
gDPLoadSync(tempGfxHead++);
gDPLoadBlock(tempGfxHead++, G_TX_LOADTILE, 0, 0, 8 * 8 - 1, CALC_DXT(8, G_IM_SIZ_16b_BYTES));
gSPTextureRectangle(tempGfxHead++, x << 2, y << 2, (x + 7) << 2, (y + 7) << 2, G_TX_RENDERTILE,
0, 0, 4 << 10, 1 << 10);
gDisplayListHead = tempGfxHead;
}
/**
@@ -147,14 +155,17 @@ void render_hud_small_tex_lut(s32 x, s32 y, Texture *texture) {
*/
void render_power_meter_health_segment(s16 numHealthWedges) {
Texture *(*healthLUT)[] = segmented_to_virtual(&power_meter_health_segments_lut);
Gfx *tempGfxHead = gDisplayListHead;
gDPPipeSync(gDisplayListHead++);
gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1,
gDPPipeSync(tempGfxHead++);
gDPSetTextureImage(tempGfxHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1,
(*healthLUT)[numHealthWedges - 1]);
gDPLoadSync(gDisplayListHead++);
gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES));
gSP1Triangle(gDisplayListHead++, 0, 1, 2, 0);
gSP1Triangle(gDisplayListHead++, 0, 2, 3, 0);
gDPLoadSync(tempGfxHead++);
gDPLoadBlock(tempGfxHead++, G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES));
gSP1Triangle(tempGfxHead++, 0, 1, 2, 0);
gSP1Triangle(tempGfxHead++, 0, 2, 3, 0);
gDisplayListHead = tempGfxHead;
}
/**
@@ -293,12 +304,16 @@ void render_hud_power_meter(void) {
void render_breath_meter_segment(s16 numBreathWedges) {
Texture *(*breathLUT)[];
breathLUT = segmented_to_virtual(&breath_meter_segments_lut);
gDPPipeSync(gDisplayListHead++);
gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, (*breathLUT)[numBreathWedges - 1]);
gDPLoadSync(gDisplayListHead++);
gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES));
gSP1Triangle(gDisplayListHead++, 0, 1, 2, 0);
gSP1Triangle(gDisplayListHead++, 0, 2, 3, 0);
Gfx *tempGfxHead = gDisplayListHead;
gDPPipeSync(tempGfxHead++);
gDPSetTextureImage(tempGfxHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, (*breathLUT)[numBreathWedges - 1]);
gDPLoadSync(tempGfxHead++);
gDPLoadBlock(tempGfxHead++, G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES));
gSP1Triangle(tempGfxHead++, 0, 1, 2, 0);
gSP1Triangle(tempGfxHead++, 0, 2, 3, 0);
gDisplayListHead = tempGfxHead;
}
/**

View File

@@ -286,19 +286,23 @@ static void puppycam_process_cutscene(void) {
#define BLANK 0, 0, 0, ENVIRONMENT, 0, 0, 0, ENVIRONMENT
static void puppycam_display_box(s32 x1, s32 y1, s32 x2, s32 y2, u8 r, u8 g, u8 b, u8 a) {
gDPSetCombineMode(gDisplayListHead++, BLANK, BLANK);
gDPSetCycleType( gDisplayListHead++, G_CYC_1CYCLE);
Gfx *tempGfxHead = gDisplayListHead;
gDPSetCombineMode(tempGfxHead++, BLANK, BLANK);
gDPSetCycleType( tempGfxHead++, G_CYC_1CYCLE);
if (a !=255) {
gDPSetRenderMode(gDisplayListHead++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
gDPSetRenderMode(tempGfxHead++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
} else {
gDPSetRenderMode(gDisplayListHead++, G_RM_OPA_SURF, G_RM_OPA_SURF);
gDPSetRenderMode(tempGfxHead++, G_RM_OPA_SURF, G_RM_OPA_SURF);
}
gDPSetEnvColor( gDisplayListHead++, r, g, b, a);
gDPFillRectangle( gDisplayListHead++, x1, y1, x2, y2);
gDPPipeSync( gDisplayListHead++);
gDPSetEnvColor( gDisplayListHead++, 255, 255, 255, 255);
gDPSetCycleType( gDisplayListHead++, G_CYC_1CYCLE);
gSPDisplayList( gDisplayListHead++,dl_hud_img_end);
gDPSetEnvColor( tempGfxHead++, r, g, b, a);
gDPFillRectangle( tempGfxHead++, x1, y1, x2, y2);
gDPPipeSync( tempGfxHead++);
gDPSetEnvColor( tempGfxHead++, 255, 255, 255, 255);
gDPSetCycleType( tempGfxHead++, G_CYC_1CYCLE);
gSPDisplayList( tempGfxHead++,dl_hud_img_end);
gDisplayListHead = tempGfxHead;
}
//I actually took the time to redo this, properly. Lmao. Please don't bully me over this anymore :(

View File

@@ -522,12 +522,16 @@ void puppyprint_render_minimal(void) {
}
void render_coverage_map(void) {
gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE);
gDPSetBlendColor(gDisplayListHead++, 0xFF, 0xFF, 0xFF, 0xFF);
gDPSetPrimDepth(gDisplayListHead++, 0xFFFF, 0xFFFF);
gDPSetDepthSource(gDisplayListHead++, G_ZS_PRIM);
gDPSetRenderMode(gDisplayListHead++, G_RM_VISCVG, G_RM_VISCVG2);
gDPFillRectangle(gDisplayListHead++, 0,0, SCREEN_WIDTH-1, SCREEN_HEIGHT-1);
Gfx *tempGfxHead = gDisplayListHead;
gDPSetCycleType(tempGfxHead++, G_CYC_1CYCLE);
gDPSetBlendColor(tempGfxHead++, 0xFF, 0xFF, 0xFF, 0xFF);
gDPSetPrimDepth(tempGfxHead++, 0xFFFF, 0xFFFF);
gDPSetDepthSource(tempGfxHead++, G_ZS_PRIM);
gDPSetRenderMode(tempGfxHead++, G_RM_VISCVG, G_RM_VISCVG2);
gDPFillRectangle(tempGfxHead++, 0,0, SCREEN_WIDTH-1, SCREEN_HEIGHT-1);
gDisplayListHead = tempGfxHead;
}
void puppycamera_debug_view(void) {

View File

@@ -140,43 +140,47 @@ s32 render_textured_transition(s8 transTime, struct WarpTransitionData *transDat
if (verts != NULL) {
Gfx *tempGfxHead = gDisplayListHead;
make_tex_transition_vertices(verts, centerTransX, centerTransY, texTransRadius, transTexType);
gSPDisplayList(gDisplayListHead++, dl_proj_mtx_fullscreen);
gSPDisplayList(tempGfxHead++, dl_proj_mtx_fullscreen);
u8 r = transData->red;
u8 g = transData->green;
u8 b = transData->blue;
gDPSetPrimColor(gDisplayListHead++, 0, 0, r, g, b, 255);
gDPSetPrimColor(tempGfxHead++, 0, 0, r, g, b, 255);
gDPSetCombineMode(gDisplayListHead++, G_CC_PRIMITIVE, G_CC_PRIMITIVE);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_OPA_SURF, G_RM_AA_OPA_SURF2);
gDPSetCombineMode(tempGfxHead++, G_CC_PRIMITIVE, G_CC_PRIMITIVE);
gDPSetRenderMode(tempGfxHead++, G_RM_AA_OPA_SURF, G_RM_AA_OPA_SURF2);
gSPVertex(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(verts), 8, 0);
gSPDisplayList(gDisplayListHead++, dl_transition_draw_filled_region);
gDPPipeSync(gDisplayListHead++);
gSPVertex(tempGfxHead++, VIRTUAL_TO_PHYSICAL(verts), 8, 0);
gSPDisplayList(tempGfxHead++, dl_transition_draw_filled_region);
gDPPipeSync(tempGfxHead++);
gDPSetCombineLERP(gDisplayListHead++, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0,
gDPSetCombineLERP(tempGfxHead++, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0,
0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_XLU_SURF, G_RM_AA_XLU_SURF2);
gDPSetTextureFilter(gDisplayListHead++, G_TF_BILERP);
gDPSetRenderMode(tempGfxHead++, G_RM_AA_XLU_SURF, G_RM_AA_XLU_SURF2);
gDPSetTextureFilter(tempGfxHead++, G_TF_BILERP);
switch (transTexType) {
case TRANS_TYPE_MIRROR:
gDPLoadTextureBlock(gDisplayListHead++, sTextureTransitionID[texID], G_IM_FMT_IA, G_IM_SIZ_8b, 32, 64, 0,
gDPLoadTextureBlock(tempGfxHead++, sTextureTransitionID[texID], G_IM_FMT_IA, G_IM_SIZ_8b, 32, 64, 0,
G_TX_WRAP | G_TX_MIRROR, G_TX_WRAP | G_TX_MIRROR, 5, 6, G_TX_NOLOD, G_TX_NOLOD);
break;
case TRANS_TYPE_CLAMP:
gDPLoadTextureBlock(gDisplayListHead++, sTextureTransitionID[texID], G_IM_FMT_IA, G_IM_SIZ_8b, 64, 64, 0,
gDPLoadTextureBlock(tempGfxHead++, sTextureTransitionID[texID], G_IM_FMT_IA, G_IM_SIZ_8b, 64, 64, 0,
G_TX_CLAMP, G_TX_CLAMP, 6, 6, G_TX_NOLOD, G_TX_NOLOD);
break;
}
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
gSPVertex(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(verts), 4, 0);
gSPDisplayList(gDisplayListHead++, dl_draw_quad_verts_0123);
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF);
gSPDisplayList(gDisplayListHead++, dl_screen_transition_end);
gSPTexture(tempGfxHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
gSPVertex(tempGfxHead++, VIRTUAL_TO_PHYSICAL(verts), 4, 0);
gSPDisplayList(tempGfxHead++, dl_draw_quad_verts_0123);
gSPTexture(tempGfxHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF);
gSPDisplayList(tempGfxHead++, dl_screen_transition_end);
sTransitionTextureAngle += transData->angleSpeed;
gDisplayListHead = tempGfxHead;
}
return set_and_reset_transition_fade_timer(transTime);
}
@@ -197,17 +201,21 @@ s32 dl_transition_color(u8 transTime, struct WarpTransitionData *transData, u8 a
Vtx *verts = vertex_transition_color();
if (verts != NULL) {
Gfx *tempGfxHead = gDisplayListHead;
u8 r = transData->red;
u8 g = transData->green;
u8 b = transData->blue;
gDPSetPrimColor(gDisplayListHead++, 0, 0, r, g, b, alpha);
gDPSetPrimColor(tempGfxHead++, 0, 0, r, g, b, alpha);
gSPDisplayList(gDisplayListHead++, dl_proj_mtx_fullscreen);
gDPSetCombineMode(gDisplayListHead++, G_CC_PRIMITIVE, G_CC_PRIMITIVE);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_XLU_SURF, G_RM_AA_XLU_SURF2);
gSPVertex(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(verts), 4, 0);
gSPDisplayList(gDisplayListHead++, dl_draw_quad_verts_0123);
gSPDisplayList(gDisplayListHead++, dl_screen_transition_end);
gSPDisplayList(tempGfxHead++, dl_proj_mtx_fullscreen);
gDPSetCombineMode(tempGfxHead++, G_CC_PRIMITIVE, G_CC_PRIMITIVE);
gDPSetRenderMode(tempGfxHead++, G_RM_AA_XLU_SURF, G_RM_AA_XLU_SURF2);
gSPVertex(tempGfxHead++, VIRTUAL_TO_PHYSICAL(verts), 4, 0);
gSPDisplayList(tempGfxHead++, dl_draw_quad_verts_0123);
gSPDisplayList(tempGfxHead++, dl_screen_transition_end);
gDisplayListHead = tempGfxHead;
}
return set_and_reset_transition_fade_timer(transTime);
}