add stats with f4 toggle
This commit is contained in:
parent
a29a6018b8
commit
8c0777b547
7 changed files with 88 additions and 36 deletions
|
|
@ -19,6 +19,9 @@
|
|||
#include "pxl8_sys.h"
|
||||
#include "pxl8_types.h"
|
||||
|
||||
void pxl8_renderer_update_stats(pxl8_renderer* r, f32 dt);
|
||||
pxl8_gfx_stats* pxl8_renderer_get_stats(pxl8_renderer* r);
|
||||
|
||||
#define PXL8_MAX_TARGET_STACK 8
|
||||
|
||||
typedef struct pxl8_sprite_cache_entry {
|
||||
|
|
@ -1043,3 +1046,11 @@ bool pxl8_gfx_get_wireframe(const pxl8_gfx* gfx) {
|
|||
u8 pxl8_gfx_get_ambient(const pxl8_gfx* gfx) {
|
||||
return gfx ? gfx->frame.uniforms.ambient : 0;
|
||||
}
|
||||
|
||||
const pxl8_gfx_stats* pxl8_gfx_get_stats(const pxl8_gfx* gfx) {
|
||||
return gfx ? pxl8_renderer_get_stats(gfx->renderer) : NULL;
|
||||
}
|
||||
|
||||
void pxl8_gfx_update_stats(pxl8_gfx* gfx, f32 dt) {
|
||||
if (gfx) pxl8_renderer_update_stats(gfx->renderer, dt);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,15 +13,12 @@ typedef struct pxl8_gfx pxl8_gfx;
|
|||
|
||||
typedef struct pxl8_gfx_stats {
|
||||
u64 draw_calls;
|
||||
u64 triangles;
|
||||
u64 clipped_triangles;
|
||||
u64 depth_tests;
|
||||
u64 depth_passes;
|
||||
u64 shader_calls;
|
||||
u64 pixels_written;
|
||||
u64 submit_ns;
|
||||
u64 execute_draw_ns;
|
||||
f32 dt_accumulator;
|
||||
f32 fps;
|
||||
u32 frame_count;
|
||||
f32 raster_ms;
|
||||
u64 raster_ns;
|
||||
u64 triangles;
|
||||
} pxl8_gfx_stats;
|
||||
|
||||
typedef enum pxl8_gfx_effect {
|
||||
|
|
@ -77,6 +74,9 @@ u8 pxl8_gfx_ui_color(pxl8_gfx* gfx, u8 index);
|
|||
void pxl8_gfx_set_wireframe(pxl8_gfx* gfx, bool enabled);
|
||||
bool pxl8_gfx_get_wireframe(const pxl8_gfx* gfx);
|
||||
|
||||
const pxl8_gfx_stats* pxl8_gfx_get_stats(const pxl8_gfx* gfx);
|
||||
void pxl8_gfx_update_stats(pxl8_gfx* gfx, f32 dt);
|
||||
|
||||
u8 pxl8_gfx_get_ambient(const pxl8_gfx* gfx);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
|||
|
|
@ -740,6 +740,7 @@ struct pxl8_renderer {
|
|||
u32 scissor_w, scissor_h;
|
||||
|
||||
pxl8_shader_fn shader;
|
||||
pxl8_gfx_stats stats;
|
||||
};
|
||||
|
||||
struct pxl8_gfx_cmdbuf {
|
||||
|
|
@ -782,6 +783,28 @@ void pxl8_renderer_set_shader(pxl8_renderer* r, pxl8_shader_fn fn) {
|
|||
if (r) r->shader = fn;
|
||||
}
|
||||
|
||||
void pxl8_renderer_update_stats(pxl8_renderer* r, f32 dt) {
|
||||
if (!r) return;
|
||||
|
||||
r->stats.dt_accumulator += dt;
|
||||
r->stats.frame_count++;
|
||||
|
||||
if (r->stats.frame_count >= 60) {
|
||||
r->stats.fps = (f32)r->stats.frame_count / r->stats.dt_accumulator;
|
||||
r->stats.raster_ms = ((f32)r->stats.raster_ns / (f32)r->stats.frame_count) / 1000000.0f;
|
||||
r->stats.dt_accumulator = 0.0f;
|
||||
r->stats.raster_ns = 0;
|
||||
r->stats.frame_count = 0;
|
||||
}
|
||||
|
||||
r->stats.draw_calls = 0;
|
||||
r->stats.triangles = 0;
|
||||
}
|
||||
|
||||
pxl8_gfx_stats* pxl8_renderer_get_stats(pxl8_renderer* r) {
|
||||
return r ? &r->stats : NULL;
|
||||
}
|
||||
|
||||
static u32 texture_byte_size(pxl8_gfx_texture_format fmt, u32 w, u32 h) {
|
||||
switch (fmt) {
|
||||
case PXL8_GFX_FORMAT_INDEXED8: return w * h;
|
||||
|
|
@ -1090,6 +1113,7 @@ static void execute_draw(
|
|||
pxl8_renderer* r,
|
||||
const pxl8_gfx_cmd_draw* cmd
|
||||
) {
|
||||
r->stats.draw_calls++;
|
||||
if (!VALID_BUF(r, cmd->vertex_buffer)) return;
|
||||
bool use_indices = pxl8_gfx_handle_valid(cmd->index_buffer) && VALID_BUF(r, cmd->index_buffer);
|
||||
if (!VALID_PASS(r, r->current_pass)) return;
|
||||
|
|
@ -1186,6 +1210,7 @@ static void execute_draw(
|
|||
bool is_wireframe = pip->desc.rasterizer.fill == PXL8_GFX_FILL_WIREFRAME;
|
||||
|
||||
for (u32 i = cmd->first_index; i < cmd->first_index + cmd->index_count; i += 3) {
|
||||
r->stats.triangles++;
|
||||
u16 i0, i1, i2;
|
||||
|
||||
if (use_indices) {
|
||||
|
|
@ -1295,8 +1320,10 @@ static void execute_draw(
|
|||
continue;
|
||||
}
|
||||
|
||||
u64 raster_start = pxl8_get_ticks_ns();
|
||||
rasterize_triangle(&setup, fb, zb, fb_w, shader, &pip->desc,
|
||||
&shader_bindings, &shader_uniforms);
|
||||
r->stats.raster_ns += pxl8_get_ticks_ns() - raster_start;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
#include "pxl8_colormap.h"
|
||||
#include "pxl8_gfx.h"
|
||||
#include "pxl8_render_types.h"
|
||||
#include "pxl8_shader.h"
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue