More render stats for software mode, renamed and relocated some render stats variables

This commit is contained in:
Hannu Hanhi 2020-05-02 20:43:53 +03:00
parent 8dcc2fe20d
commit 7e8543a408
7 changed files with 83 additions and 49 deletions

View File

@ -607,17 +607,25 @@ static void D_Display(void)
V_DrawThinString(30, 10, V_MONOSPACE | V_YELLOWMAP, s); V_DrawThinString(30, 10, V_MONOSPACE | V_YELLOWMAP, s);
snprintf(s, sizeof s - 1, "rtot %d", rs_rendercalltime / divisor); snprintf(s, sizeof s - 1, "rtot %d", rs_rendercalltime / divisor);
V_DrawThinString(30, 20, V_MONOSPACE | V_YELLOWMAP, s); V_DrawThinString(30, 20, V_MONOSPACE | V_YELLOWMAP, s);
if (rendermode == render_opengl)// dont show unimplemented stats snprintf(s, sizeof s - 1, "bsp %d", rs_bsptime / divisor);
V_DrawThinString(30, 30, V_MONOSPACE | V_YELLOWMAP, s);
snprintf(s, sizeof s - 1, "nbsp %d", rs_numbspcalls);
V_DrawThinString(80, 10, V_MONOSPACE | V_BLUEMAP, s);
snprintf(s, sizeof s - 1, "nspr %d", rs_numsprites);
V_DrawThinString(80, 20, V_MONOSPACE | V_BLUEMAP, s);
snprintf(s, sizeof s - 1, "nnod %d", rs_numdrawnodes);
V_DrawThinString(80, 30, V_MONOSPACE | V_BLUEMAP, s);
snprintf(s, sizeof s - 1, "npob %d", rs_numpolyobjects);
V_DrawThinString(80, 40, V_MONOSPACE | V_BLUEMAP, s);
if (rendermode == render_opengl) // OpenGL specific stats
{ {
snprintf(s, sizeof s - 1, "bsp %d", rs_bsptime / divisor); snprintf(s, sizeof s - 1, "nsrt %d", rs_hw_nodesorttime / divisor);
V_DrawThinString(30, 30, V_MONOSPACE | V_YELLOWMAP, s);
snprintf(s, sizeof s - 1, "nsrt %d", rs_nodesorttime / divisor);
V_DrawThinString(30, 40, V_MONOSPACE | V_YELLOWMAP, s); V_DrawThinString(30, 40, V_MONOSPACE | V_YELLOWMAP, s);
snprintf(s, sizeof s - 1, "ndrw %d", rs_nodedrawtime / divisor); snprintf(s, sizeof s - 1, "ndrw %d", rs_hw_nodedrawtime / divisor);
V_DrawThinString(30, 50, V_MONOSPACE | V_YELLOWMAP, s); V_DrawThinString(30, 50, V_MONOSPACE | V_YELLOWMAP, s);
snprintf(s, sizeof s - 1, "ssrt %d", rs_spritesorttime / divisor); snprintf(s, sizeof s - 1, "ssrt %d", rs_hw_spritesorttime / divisor);
V_DrawThinString(30, 60, V_MONOSPACE | V_YELLOWMAP, s); V_DrawThinString(30, 60, V_MONOSPACE | V_YELLOWMAP, s);
snprintf(s, sizeof s - 1, "sdrw %d", rs_spritedrawtime / divisor); snprintf(s, sizeof s - 1, "sdrw %d", rs_hw_spritedrawtime / divisor);
V_DrawThinString(30, 70, V_MONOSPACE | V_YELLOWMAP, s); V_DrawThinString(30, 70, V_MONOSPACE | V_YELLOWMAP, s);
/*snprintf(s, sizeof s - 1, "post %d", rs_posttime / divisor); /*snprintf(s, sizeof s - 1, "post %d", rs_posttime / divisor);
V_DrawThinString(30, 80, V_MONOSPACE | V_YELLOWMAP, s);*/ V_DrawThinString(30, 80, V_MONOSPACE | V_YELLOWMAP, s);*/
@ -626,14 +634,6 @@ static void D_Display(void)
/*snprintf(s, sizeof s - 1, "test %d", rs_test / divisor); /*snprintf(s, sizeof s - 1, "test %d", rs_test / divisor);
V_DrawThinString(30, 100, V_MONOSPACE | V_YELLOWMAP, s);*/ V_DrawThinString(30, 100, V_MONOSPACE | V_YELLOWMAP, s);*/
snprintf(s, sizeof s - 1, "nbsp %d", rs_numbspcalls);
V_DrawThinString(80, 10, V_MONOSPACE | V_BLUEMAP, s);
snprintf(s, sizeof s - 1, "nnod %d", rs_numdrawnodes);
V_DrawThinString(80, 20, V_MONOSPACE | V_BLUEMAP, s);
snprintf(s, sizeof s - 1, "nspr %d", rs_numsprites);
V_DrawThinString(80, 30, V_MONOSPACE | V_BLUEMAP, s);
snprintf(s, sizeof s - 1, "npob %d", rs_numpolyobjects);
V_DrawThinString(80, 40, V_MONOSPACE | V_BLUEMAP, s);
/* /*
if (cv_enable_batching.value) if (cv_enable_batching.value)
{ {
@ -658,10 +658,16 @@ static void D_Display(void)
V_DrawThinString(185, 30, V_MONOSPACE | V_PURPLEMAP, s); V_DrawThinString(185, 30, V_MONOSPACE | V_PURPLEMAP, s);
}*/ }*/
} }
else else // software specific stats
{ {
snprintf(s, sizeof s - 1, "prtl %d", rs_sw_portaltime / divisor);
V_DrawThinString(30, 40, V_MONOSPACE | V_YELLOWMAP, s);
snprintf(s, sizeof s - 1, "plns %d", rs_sw_planetime / divisor);
V_DrawThinString(30, 50, V_MONOSPACE | V_YELLOWMAP, s);
snprintf(s, sizeof s - 1, "mskd %d", rs_sw_maskedtime / divisor);
V_DrawThinString(30, 60, V_MONOSPACE | V_YELLOWMAP, s);
snprintf(s, sizeof s - 1, "fin %d", rs_swaptime / divisor); snprintf(s, sizeof s - 1, "fin %d", rs_swaptime / divisor);
V_DrawThinString(30, 30, V_MONOSPACE | V_YELLOWMAP, s); V_DrawThinString(30, 70, V_MONOSPACE | V_YELLOWMAP, s);
} }
} }

View File

@ -147,17 +147,10 @@ static angle_t gr_aimingangle;
static void HWR_SetTransformAiming(FTransform *trans, player_t *player, boolean skybox); static void HWR_SetTransformAiming(FTransform *trans, player_t *player, boolean skybox);
// Render stats // Render stats
int rs_bsptime = 0; int rs_hw_nodesorttime = 0;
int rs_nodetime = 0; int rs_hw_nodedrawtime = 0;
int rs_nodesorttime = 0; int rs_hw_spritesorttime = 0;
int rs_nodedrawtime = 0; int rs_hw_spritedrawtime = 0;
int rs_spritesorttime = 0;
int rs_spritedrawtime = 0;
int rs_numdrawnodes = 0;
int rs_numbspcalls = 0;
int rs_numsprites = 0;
int rs_numpolyobjects = 0;
//int rs_posttime = 0; //int rs_posttime = 0;
@ -4794,7 +4787,7 @@ static void HWR_CreateDrawNodes(void)
// If true, swap the draw order. // If true, swap the draw order.
boolean shift = false; boolean shift = false;
rs_nodesorttime = I_GetTimeMicros(); rs_hw_nodesorttime = I_GetTimeMicros();
for (i = 0; i < numplanes; i++, p++) for (i = 0; i < numplanes; i++, p++)
{ {
@ -4917,9 +4910,9 @@ static void HWR_CreateDrawNodes(void)
} //i++ } //i++
} // loop++ } // loop++
rs_nodesorttime = I_GetTimeMicros() - rs_nodesorttime; rs_hw_nodesorttime = I_GetTimeMicros() - rs_hw_nodesorttime;
rs_nodedrawtime = I_GetTimeMicros(); rs_hw_nodedrawtime = I_GetTimeMicros();
// Okay! Let's draw it all! Woo! // Okay! Let's draw it all! Woo!
HWD.pfnSetTransform(&atransform); HWD.pfnSetTransform(&atransform);
@ -4956,7 +4949,7 @@ static void HWR_CreateDrawNodes(void)
} }
} }
rs_nodedrawtime = I_GetTimeMicros() - rs_nodedrawtime; rs_hw_nodedrawtime = I_GetTimeMicros() - rs_hw_nodedrawtime;
numwalls = 0; numwalls = 0;
numplanes = 0; numplanes = 0;
@ -6083,12 +6076,12 @@ void HWR_RenderPlayerView(INT32 viewnumber, player_t *player)
// Draw MD2 and sprites // Draw MD2 and sprites
rs_numsprites = gr_visspritecount; rs_numsprites = gr_visspritecount;
rs_spritesorttime = I_GetTimeMicros(); rs_hw_spritesorttime = I_GetTimeMicros();
HWR_SortVisSprites(); HWR_SortVisSprites();
rs_spritesorttime = I_GetTimeMicros() - rs_spritesorttime; rs_hw_spritesorttime = I_GetTimeMicros() - rs_hw_spritesorttime;
rs_spritedrawtime = I_GetTimeMicros(); rs_hw_spritedrawtime = I_GetTimeMicros();
HWR_DrawSprites(); HWR_DrawSprites();
rs_spritedrawtime = I_GetTimeMicros() - rs_spritedrawtime; rs_hw_spritedrawtime = I_GetTimeMicros() - rs_hw_spritedrawtime;
#ifdef NEWCORONAS #ifdef NEWCORONAS
//Hurdler: they must be drawn before translucent planes, what about gl fog? //Hurdler: they must be drawn before translucent planes, what about gl fog?
@ -6096,8 +6089,8 @@ void HWR_RenderPlayerView(INT32 viewnumber, player_t *player)
#endif #endif
rs_numdrawnodes = 0; rs_numdrawnodes = 0;
rs_nodesorttime = 0; rs_hw_nodesorttime = 0;
rs_nodedrawtime = 0; rs_hw_nodedrawtime = 0;
if (numplanes || numpolyplanes || numwalls) //Hurdler: render 3D water and transparent walls after everything if (numplanes || numpolyplanes || numwalls) //Hurdler: render 3D water and transparent walls after everything
{ {
HWR_CreateDrawNodes(); HWR_CreateDrawNodes();

View File

@ -105,18 +105,12 @@ extern fixed_t *hwbbox;
extern FTransform atransform; extern FTransform atransform;
extern int rs_bsptime; // Render stats
extern int rs_nodetime; extern int rs_hw_nodesorttime;
extern int rs_nodesorttime; extern int rs_hw_nodedrawtime;
extern int rs_nodedrawtime; extern int rs_hw_spritesorttime;
extern int rs_spritesorttime; extern int rs_hw_spritedrawtime;
extern int rs_spritedrawtime;
//extern int rs_posttime; //extern int rs_posttime;
extern int rs_numdrawnodes;
extern int rs_numbspcalls;
extern int rs_numsprites;
extern int rs_numpolyobjects;
#endif #endif

View File

@ -812,6 +812,9 @@ static void R_AddPolyObjects(subsector_t *sub)
po = (polyobj_t *)(po->link.next); po = (polyobj_t *)(po->link.next);
} }
// for render stats
rs_numpolyobjects += numpolys;
// sort polyobjects // sort polyobjects
R_SortPolyObjects(sub); R_SortPolyObjects(sub);
@ -1363,6 +1366,9 @@ void R_RenderBSPNode(INT32 bspnum)
{ {
node_t *bsp; node_t *bsp;
INT32 side; INT32 side;
rs_numbspcalls++;
while (!(bspnum & NF_SUBSECTOR)) // Found a subsector? while (!(bspnum & NF_SUBSECTOR)) // Found a subsector?
{ {
bsp = &nodes[bspnum]; bsp = &nodes[bspnum];

View File

@ -34,6 +34,7 @@
#include "m_random.h" // quake camera shake #include "m_random.h" // quake camera shake
#include "r_portal.h" #include "r_portal.h"
#include "r_main.h" #include "r_main.h"
#include "i_system.h" // I_GetTimeMicros
#ifdef HWRENDER #ifdef HWRENDER
#include "hardware/hw_main.h" #include "hardware/hw_main.h"
@ -103,6 +104,17 @@ int rs_prevframetime = 0;
int rs_rendercalltime = 0; int rs_rendercalltime = 0;
int rs_swaptime = 0; int rs_swaptime = 0;
int rs_bsptime = 0;
int rs_sw_portaltime = 0;
int rs_sw_planetime = 0;
int rs_sw_maskedtime = 0;
int rs_numbspcalls = 0;
int rs_numsprites = 0;
int rs_numdrawnodes = 0;
int rs_numpolyobjects = 0;
static CV_PossibleValue_t drawdist_cons_t[] = { static CV_PossibleValue_t drawdist_cons_t[] = {
{256, "256"}, {512, "512"}, {768, "768"}, {256, "256"}, {512, "512"}, {768, "768"},
{1024, "1024"}, {1536, "1536"}, {2048, "2048"}, {1024, "1024"}, {1536, "1536"}, {2048, "2048"},
@ -1452,7 +1464,11 @@ void R_RenderPlayerView(player_t *player)
mytotal = 0; mytotal = 0;
ProfZeroTimer(); ProfZeroTimer();
#endif #endif
rs_numbspcalls = rs_numpolyobjects = rs_numdrawnodes = 0;
rs_bsptime = I_GetTimeMicros();
R_RenderBSPNode((INT32)numnodes - 1); R_RenderBSPNode((INT32)numnodes - 1);
rs_bsptime = I_GetTimeMicros() - rs_bsptime;
rs_numsprites = visspritecount;
#ifdef TIMING #ifdef TIMING
RDMSR(0x10, &mycount); RDMSR(0x10, &mycount);
mytotal += mycount; // 64bit add mytotal += mycount; // 64bit add
@ -1470,6 +1486,7 @@ void R_RenderPlayerView(player_t *player)
Portal_AddSkyboxPortals(); Portal_AddSkyboxPortals();
// Portal rendering. Hijacks the BSP traversal. // Portal rendering. Hijacks the BSP traversal.
rs_sw_portaltime = I_GetTimeMicros();
if (portal_base) if (portal_base)
{ {
portal_t *portal; portal_t *portal;
@ -1509,15 +1526,20 @@ void R_RenderPlayerView(player_t *player)
Portal_Remove(portal); Portal_Remove(portal);
} }
} }
rs_sw_portaltime = I_GetTimeMicros() - rs_sw_portaltime;
rs_sw_planetime = I_GetTimeMicros();
R_DrawPlanes(); R_DrawPlanes();
#ifdef FLOORSPLATS #ifdef FLOORSPLATS
R_DrawVisibleFloorSplats(); R_DrawVisibleFloorSplats();
#endif #endif
rs_sw_planetime = I_GetTimeMicros() - rs_sw_planetime;
// draw mid texture and sprite // draw mid texture and sprite
// And now 3D floors/sides! // And now 3D floors/sides!
rs_sw_maskedtime = I_GetTimeMicros();
R_DrawMasked(masks, nummasks); R_DrawMasked(masks, nummasks);
rs_sw_maskedtime = I_GetTimeMicros() - rs_sw_maskedtime;
free(masks); free(masks);
} }

View File

@ -82,6 +82,17 @@ extern int rs_prevframetime;// time when previous frame was rendered
extern int rs_rendercalltime; extern int rs_rendercalltime;
extern int rs_swaptime; extern int rs_swaptime;
extern int rs_bsptime;
extern int rs_sw_portaltime;
extern int rs_sw_planetime;
extern int rs_sw_maskedtime;
extern int rs_numbspcalls;
extern int rs_numsprites;
extern int rs_numdrawnodes;
extern int rs_numpolyobjects;
// //
// REFRESH - the actual rendering functions. // REFRESH - the actual rendering functions.
// //

View File

@ -2552,6 +2552,8 @@ static drawnode_t *R_CreateDrawNode(drawnode_t *link)
node->thickseg = NULL; node->thickseg = NULL;
node->ffloor = NULL; node->ffloor = NULL;
node->sprite = NULL; node->sprite = NULL;
rs_numdrawnodes++;
return node; return node;
} }