mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-25 18:05:12 -04:00
fe42da2744
Keeps both lines: master's PGXP session, draw-distance clamps, masked rejects and saturated-winding NCLIP; the release's render-pass kit additions, verified media/disc extents, timeline/present rings, cull-scale sites. Overlay ABI v30. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
64 lines
2.8 KiB
C
64 lines
2.8 KiB
C
#ifndef PSX_RENDER_PASS_H
|
|
#define PSX_RENDER_PASS_H
|
|
|
|
/* Host-timed render passes: runtime side of psx_mod_render_pass_plan() and
|
|
* psx_mod_render_pass() (mod_plugins.h). See docs/RENDER_PASSES.md. */
|
|
|
|
#include <stdint.h>
|
|
|
|
#include "psx_cycle_freeze.h" /* g_psx_render_pass_active, the time freeze */
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* Stores a pass may not make (memory.c render_pass_store): they would escape
|
|
* the restore, so they are dropped and counted per device class. */
|
|
enum {
|
|
RENDER_PASS_DROP_SPU = 0,
|
|
RENDER_PASS_DROP_CD,
|
|
RENDER_PASS_DROP_TIMER,
|
|
RENDER_PASS_DROP_DMA, /* DMA channels other than GPU (2) and OTC (6) */
|
|
RENDER_PASS_DROP_GPU, /* GP1 commands other than DMA mode / info */
|
|
RENDER_PASS_DROP_OTHER, /* SIO, MDEC, memory control, mod arenas, ... */
|
|
RENDER_PASS_DROP_CLASSES
|
|
};
|
|
extern uint64_t g_render_pass_dropped_writes[RENDER_PASS_DROP_CLASSES];
|
|
|
|
typedef struct RenderPassStats {
|
|
uint64_t plans; /* psx_mod_render_pass_plan calls that planned >= 1 */
|
|
uint64_t planned; /* phases planned (after shedding) */
|
|
uint64_t wanted; /* phases wanted before shedding */
|
|
uint64_t refused; /* plan calls that returned 0 while enabled */
|
|
uint64_t passes; /* passes run to completion and presented */
|
|
uint64_t aborted; /* passes rolled back by a fault */
|
|
uint64_t discarded; /* passes whose plugin declined the image */
|
|
uint64_t watchdog; /* of which: guest-cycle watchdog overruns */
|
|
uint64_t vram_leaks; /* GPU writes outside the declared rect (dropped) */
|
|
uint64_t nesting_repairs; /* aborts whose skipped exits the restore undid */
|
|
uint64_t verify_checks; /* PSX_RENDER_PASS_VERIFY comparisons */
|
|
uint64_t verify_mismatch; /* ... that found a difference */
|
|
uint64_t spans; /* psx_mod_run_guest_span calls that reached stop */
|
|
uint64_t span_failures; /* ... that left the span or overran */
|
|
uint64_t dropped[RENDER_PASS_DROP_CLASSES];
|
|
double last_pass_ms; /* host time of the last pass (sandbox + draw) */
|
|
double avg_pass_ms; /* smoothed */
|
|
double avg_begin_ms; /* smoothed: VRAM backup + checkpoint */
|
|
double avg_guest_ms; /* smoothed: the plugin's guest draw code */
|
|
double avg_end_ms; /* smoothed: GPU flush, capture, VRAM restore */
|
|
double avg_restore_ms; /* smoothed: machine state restore */
|
|
uint64_t guest_cycles_last; /* guest cycles the last pass executed */
|
|
int disabled; /* sticky: passes disabled after repeated faults */
|
|
int watchdog_flag; /* internal: the current pass overran */
|
|
} RenderPassStats;
|
|
|
|
void render_pass_get_stats(RenderPassStats *out);
|
|
/* Clears counters and the sticky fault latch (new mod session). */
|
|
void render_pass_reset_session(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|