mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-28 10:59:16 -04:00
35442249ba
Adds a nocontain census (tex_pack sub=nocontain): the sample rects that no
tracked upload contained, each with the upload that overlapped it most. Purely
diagnostic -- it records in the failure path and changes no decision the
renderer makes.
The result overturns the previous commit's reading. Every failing rect has
ov = 0: no tracked upload overlaps it AT ALL. Not partial coverage, not a rect
spanning several uploads -- there is simply no record there.
sample rect best overlap ov hits
688,0,8,32 none 0 44
560,160,8,32 none 0 39
784,0,15,62 none 0 8
768,416,32,16 none 0 4
... 64 distinct rects, every one ov = 0
The addresses say why: x = 768..832, y = 0..416, the right-hand side of VRAM.
Track and craft textures arrive there by DMA or VRAM-to-VRAM copy, not by the
GP0(A0) CPU->VRAM transfer that tex_pack_on_upload hooks. Menu and font
textures DO come through A0, which is exactly why the pack works on menus and
does nothing in a race.
So containment is only the last gate to fail, not the cause, and relaxing it
would have achieved nothing while risking the font path -- the one place a
looser rule has already erased every glyph in the game once. The real gap is
upstream: tex_pack observes one of the several ways VRAM is written.
Making the pack work in-race means tracking DMA and copy destinations as
texture sources too, hashing them the same way. That is a real piece of work
with a real question attached (a copy's source content may itself be
un-tracked), not a tweak to the lookup.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>