mirror of
https://github.com/ARMSX2/ARMSX2.git
synced 2026-08-24 16:50:16 -07:00
The mobile overlay layers onto bin/resources/GameIndex.yaml, and the loader clears-then-replaces each map rather than merging: an entry that lists one gsHWFix erases every other fix upstream sets for that serial. The file header states the invariant - each entry must carry the complete block - but nothing enforces it and nothing warns when it is broken. 115 serials were silently dropping at least one upstream fix. The bulk of it is one generation defect, not sync drift. Android used to carry a forked copy of the GameDB;54f0f8ba91generated this overlay by diffing that stale copy against bin and treating every difference as an intentional override. Where the stale copy merely lacked a fix, the generator promoted the absence into a deliberate-looking one, and the replace semantics then erased the upstream value at runtime. Nothing upstream added after generation is involved: every fix upstream sets today it already set on 2026-07-22. Three changes here. drawBuffering restored on 63 serials. All of them are entries the stale copy also lacked, so the class has a single cause and no residue; before this, exactly one overlay entry carried the key at all. It is a pure performance fix lost on the tier that needs it most. Measured on NFS Underground 2 (SLUS-21065), GS-dump replay on the SD865 at 2x, fan pinned, 3 interleaved reps per arm with disjoint ranges: draws/frame passes RT copies frame ms as shipped 6250 2640 2630 29.1 + drawBuffering 3559 1633 1623 18.9 -35% frame time, 1.55x, and visually free: deterministic in both arms with 0.12% of pixels differing by 2/255 or less. Delta Force: Black Hawk Down (SLUS-21124, SLES-53299) restated complete. That entry listed hwDownloadMode alone and thereby erased upstream's autoFlush, halfPixelOffset, textureInsideRT and nativeScaling - the bloom, sky-bloom and post-processing fixes. Both commit messages behind it describe only an addition, and the entry is hand-appended above the sorted body, so this was an accident rather than a decision. It keeps its out-of-sorted position; moving it risks a future regeneration adding a second SLUS-21124 in the sorted slot. Valkyrie Profile 2 (11 serials) keeps its configuration and regains the comment explaining it. Upstream's halfPixelOffset:4 with nativeScaling:2 blows out the render target when upscaling on Adreno and Mali; only nativeScaling:1 with roundSprite:1 renders cleanly, so the drop is the point. The original entry said so in an 8-line comment that54f0f8ba91stripped when it re-sorted the file, which is why the entry has read as unexplained collateral since. The intent was never lost, only the record of it - so the rationale now lives next to the entry, where a regeneration cannot separate them, and it warns that an audit will flag it. 57 entries still drop some other upstream fix and are deliberately untouched. That residue is a mix of causes and needs per-fix judgement: the 7 preloadFrameData removals are the Rogue Galaxy see-through-wall fix and must stay dropped, 10 more are advisory-only keys that change no setting, and the cpuSpriteRender and minimumBlendingLevel drops would cost performance on this exact tier if restored. drawBuffering was the one class safe to restore wholesale. Audit re-run clean: no serial drops drawBuffering, none sets it where upstream does not, and no other fix class was touched.