mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-26 10:19:47 -04:00
3d705f73c3
A generation's timeline is fixed at plan time (t_len = plan period x VBlank). When the game frame stayed up longer (a 30 Hz tick that lags to three VBlanks, or host-interval drift), pass_gen_present expired the generation past phase 1 + 0.5/period and the presenter fell back to its own capture, which in FLIP mode is the frame's phase-0 image: the output ran 0 -> .25 -> .5 -> .75, stepped back to 0, then jumped to the next frame. render_pass_gen_select() (render_pass_plan.c) now keeps render_pass_select's hold of the newest image past phase 1 and only expires a generation after RENDER_PASS_GEN_HOLD_MAX (4) frame lengths without a flip, i.e. a game that stopped flipping. render_pass_stats reports late_presents (presents more than 1/64 of a frame past its planned end). The plan keeps the plugin's period: its phases were placed on the output deadlines of a frame of that length, and the flip tracker's period is the previous frame's, which cannot predict a sporadic lag. render_pass_plan_test covers phases 1 to 4 (hold) and past 4 / NaN (expire); render_pass_guards pins pass_gen_present to the rule. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>