mirror of
https://github.com/ran-j/PS2Recomp.git
synced 2026-09-26 16:59:35 -04:00
81f2a7f5e1
sceGifPkRefLoadImage seeded its A+D header GIFtag with nloop=4 via makeGiftagAplusD(4u), then closePacketGifTag computed the appended register-qword count (4) from the write-cursor delta and ADDED it to the seed, finalizing nloop=8 for a tag with only 4 A+D register qwords (BITBLTBUF/TRXPOS/TRXREG/TRXDIR). A GIF parser consuming that tag eats the following IMAGE GIFtag and its first payload qwords as bogus A+D data, starving the CLUT/texture upload that the setup packet precedes (e.g. DQ8 font-glyph CLUTs staying all-zero). Seed an open A+D tag (nloop=0, nreg=1, EOP clear) instead and let closePacketGifTag add the true count, finalizing 0x1000000000000004 -- the value the regression test pins. The seed is written via a named makeGiftagAplusDOpen(nloop) helper in Support.h (mirrors makeGiftagAplusD but leaves EOP/bit 15 clear for a chained tag whose nloop is finalized at close), rather than a bare (1ULL << 60) literal, to keep the file's GIFtag-construction convention consistent. makeGiftagAplusD(0u) can't be used because it always sets EOP. Adds a byte-level regression test that drives sceGifPkRefLoadImage (setup only, qwcRemaining=0) against a scratch packet-builder state and asserts the finalized header tag lo/hi, the four A+D register descriptors (0x50..0x53), and their four register payloads (BITBLTBUF dbp/dbw/psm, TRXPOS, TRXREG width/height, TRXDIR) -- pinning the full setup packet. Full build clean; ps2x_tests 297/297.