PGXP depth: no cost when off; render-thread-safe setters; Smooth motion honours depth

- gpu.c sends gr_set_depth_triangle only while a PGXP renderer feature is
  on (gl_renderer_pgxp_render_wanted): no RTH_DEPTH per triangle otherwise.
- The SZ rides in the textured vertex's unused colour alpha, so TEXV stays
  26 floats for every title.
- gl_renderer_set_pgxp_depth / _threshold / pgxp_render_stats sync with a
  live render thread (GL_RT_SYNC) like their neighbours.
- A depth-mode change is its own batch-break reason (7); batch_diag returns
  all eight reasons.
- Smooth-motion in-between frames replay RTH_DEPTH and test depth from
  their own clear; gl_frame_gen_test gains a PGXP pass (overlapping 3D
  triangles out of painter order) where the in-between frame must match
  the real one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Shokunin
2026-10-07 22:17:28 -07:00
parent d89a27fd9b
commit dc2cd301d3
9 changed files with 140 additions and 21 deletions
+4 -1
View File
@@ -267,6 +267,9 @@ float gl_renderer_get_post_gamma(void);
void gl_renderer_set_wide_fast(int on);
/* PGXP renderer features (docs/ENHANCEMENTS.md G1.14), all off by default:
* depth buffer for opaque 3D polygons and the depth clear threshold in SZ units (DuckStation's default 4096). */
/* Nonzero when a PGXP renderer feature is on: only then does gpu.c send
* gr_set_depth_triangle (no extra command per triangle otherwise). Any thread. */
int gl_renderer_pgxp_render_wanted(void);
void gl_renderer_set_pgxp_depth(int on);
int gl_renderer_get_pgxp_depth(void);
void gl_renderer_set_pgxp_depth_threshold(float sz);
@@ -489,7 +492,7 @@ void gl_renderer_draw_projected_triangle(const PSXProjectedVertex vertices[3],
int perspective);
/* Cumulative textured-batch diagnostics: total, then flushes caused by
* isolation, blend-mode, mask, filter, backdrop-gate, texture-window, capacity. */
void gl_renderer_batch_diag(uint64_t out[8]);
void gl_renderer_batch_diag(uint64_t out[9]);
/* Texture-window batching ([video] texture_window_batching; default off).
* On: textured prims with different GP0(E2h) texture windows share a batch