pgxp: note the best-supported remaining hypothesis, and a flaw in my own method

Method flaw first, because it invalidates one measurement: comparing depth ON
against OFF by loading the savestate ONCE and capturing the two frames 0.6s
apart lets the demo advance between them, so the ship moves and shading drifts.
A per-pixel "what replaced the ship" run done that way reported 41071 changed
pixels, but most were still ship-coloured (192,160,0 and neighbours) -- shade
drift, not loss. Only ~16% went dark. Any A/B here MUST reload the state for
each configuration and sample at matched offsets, which the sweep numbers below
did do and which is why they stand.

Standing measurements:
    OFF 1.41   LEQUAL 0.52   GL_ALWAYS 1.40   (ship coverage, 6 matched samples)
    Z census   min 125  max 28443  mean 5761
    znear 32/64/100 all within noise
    ship median depth 219 vs 227 for the track around it

Best-supported hypothesis, explicitly NOT yet demonstrated: z-fighting between
the craft and the track it hovers over. SZ3 is 16-bit and already quantised by
the GTE, the craft rides a very small distance above the surface, and the two
medians (219 / 227) have overlapping ranges. That would explain every result at
once -- why the ship is lost in patches rather than wholesale, why GL_ALWAYS
restores it exactly, and why znear cannot help, since scaling the near plane
changes absolute precision but not the RELATIVE separation of two surfaces that
are already within a quantum of each other.

If that is right, no projection tuning fixes it: a depth buffer cannot resolve a
difference the source data does not carry, and the answer is to keep the
ordering table as the tiebreak where PGXP depth cannot separate two primitives,
rather than letting the depth test overrule it. Testing it needs a per-draw
depth histogram at the contact region, not another parameter sweep.

Depth stays OFF.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
tetrisgm
2026-08-17 19:15:53 -07:00
parent c319a7f96f
commit 39ea52f59d

Diff Content Not Available