nv2a: Add draw counter to renderdoc context

Also emit a fake pgraph entry capturing the subframe draw number in BEGIN_END.
This commit is contained in:
Erik Abair 2022-04-07 21:26:55 -07:00
parent 3a659fc724
commit a27e96ac9a
3 changed files with 20 additions and 2 deletions

View File

@ -31,6 +31,8 @@
#include "gloffscreen.h"
#include "config-host.h"
extern uint32_t g_nv2a_current_frame_draw_count; // abaire
void gl_debug_initialize(void);
void gl_debug_message(bool cc, const char *fmt, ...);
void gl_debug_group_begin(const char *fmt, ...);

View File

@ -128,7 +128,7 @@ void pgraph_gl_clear_surface(NV2AState *d, uint32_t parameter)
if (r->zeta_binding) {
r->zeta_binding->cleared = full_clear && write_zeta;
}
pg->clearing = false;
}
@ -137,7 +137,16 @@ void pgraph_gl_draw_begin(NV2AState *d)
PGRAPHState *pg = &d->pgraph;
PGRAPHGLState *r = pg->gl_renderer_state;
NV2A_GL_DGROUP_BEGIN("NV097_SET_BEGIN_END: 0x%x", pg->primitive_mode);
// abaire
#if DEBUG_NV2A_GL
NV2A_GL_DGROUP_BEGIN("NV097_SET_BEGIN_END: 0x%x %d", pg->primitive_mode, g_nv2a_current_frame_draw_count);
{
char buffer[256] = {0};
sprintf(buffer, "frame_draw %d ", g_nv2a_current_frame_draw_count);
trace_nv2a_pgraph_method(-1, 0, 0, buffer, 0, 0);
}
#endif
// /abaire
uint32_t control_0 = pgraph_reg_r(pg, NV_PGRAPH_CONTROL_0);
bool mask_alpha = control_0 & NV_PGRAPH_CONTROL_0_ALPHA_WRITE_ENABLE;
@ -367,6 +376,10 @@ void pgraph_gl_draw_end(NV2AState *d)
PGRAPHState *pg = &d->pgraph;
PGRAPHGLState *r = pg->gl_renderer_state;
#if DEBUG_NV2A_GL
++g_nv2a_current_frame_draw_count; // abaire
#endif
uint32_t control_0 = pgraph_reg_r(pg, NV_PGRAPH_CONTROL_0);
bool mask_alpha = control_0 & NV_PGRAPH_CONTROL_0_ALPHA_WRITE_ENABLE;
bool mask_red = control_0 & NV_PGRAPH_CONTROL_0_RED_WRITE_ENABLE;

View File

@ -20,6 +20,7 @@
#include "hw/xbox/nv2a/nv2a_int.h"
NV2AStats g_nv2a_stats;
uint32_t g_nv2a_current_frame_draw_count = 0; // abaire
void nv2a_profile_increment(void)
{
@ -51,6 +52,8 @@ void nv2a_profile_flip_stall(void)
(g_nv2a_stats.frame_ptr + 1) % NV2A_PROF_NUM_FRAMES;
g_nv2a_stats.frame_count++;
memset(&g_nv2a_stats.frame_working, 0, sizeof(g_nv2a_stats.frame_working));
g_nv2a_current_frame_draw_count = 0; // abaire
}
const char *nv2a_profile_get_counter_name(unsigned int cnt)