GSVertexTraceFMM::FindMinMax re-walks the draw's index list at flush (strip vertices up to 3x redundant) with a non-pipelined FDIV per vertex pair — 6.6% of the GS thread on the MQ65 UYA profile. Accumulate the min/max at index-emission time instead, where the vertex is register/L1-hot, and consume the accumulator in GSVertexTrace::Update. - Per-buffer FmmAcc (position/texture/color pairs) in GSVertexBuff, maintained by VertexKickDirect for triangle strips/lists. A watermark dedups already-folded vertices (past strip warmup only the register- resident new vertex accumulates); rewind/compaction sites clamp it so rewritten positions re-accumulate. Fan emissions poison the draw's fused state — the fan head doesn't fit the watermark model and FlushPrim can rebuild fan indices (caught by GS_VERTEX_CROSSCHECK on the UYA dump corpus). - FmmFinish reproduces the legacy tail bit-exactly or declines: STQ requires one constant, normal, nonzero Q (min(s/q) == min(s)/q by monotone IEEE division; negative Q swaps; FLT_MAX sentinels folded at quotient level) and no inf/NaN S/T — legacy masks NaN quotients per lane and reports vt.nan, which a min/max summary can't reproduce. Declined draws run the legacy FindMinMax unchanged. - aarch64-only: NaN detection relies on FMIN/FMAX propagation (sticky in the raw accumulator); SSE min/max can drop a NaN again. x86 keeps the legacy walk everywhere. - TME/FST/IIP are stable across one draw's emissions (TestDrawChanged flushes or buffer-switches on any draw-affecting PRIM change), so kick-time PRIM flags select the accumulation policy. Gates: gs_vertex_tests +4 property sweeps (600k draws vs a transcription of the legacy walk: benign must fuse and match bit-exactly, special Q/ST must decline or match); GS_VERTEX_CROSSCHECK replay of all 10 local dumps clean; sw+vk frame hashes bit-identical to pre-campaign baselines; recompiler_tests 1359/1359. Co-Authored-By: Claude <noreply@anthropic.com>
yaps2
This is a fork of PCSX2 targeting ARM based linux handheld devices. We're aiming to be performant and compatible on lower end ARM hardware, and adopt a "by any means" philosophy.
Thanks
A massive thank you to the PCSX2 team for 20 years of dedication. yaps2 doesn't meet the rigor required of PCSX2 upstream commits, but maybe someday it will.
The following people worked on the yaps2 fork of this project:
- bmdhacks
- tokyovigilante
- pstef
FAQ
Is it good?
A: Yeah. It's pretty fast.
Where do I get builds of this software?
A: Builds are available in nightly releases of Rocknix and Batocera
Did you vibe code it? I see that claude authors your commits you cheater!
A: This fork was written by seasoned developers using LLM devleopment tools. Our philosophy is focused on results, not policing methodology, and modern LLM tools are the most effective way for us to reach our goals.
Can I contribute?
A: Sure. Send a PR. If it's vibe-coded trash we'll reject it. If it's good we'll use it.
Can I fork this project for my own purposes?
A: Sure. If you do cool stuff we'll probably use your code.
Don't you know about XYZ project that already does this
A: Yes we probably copied a lot of their techniques.
Can I make feature requests or tell you that I don't like what you're doing or how you're doing it?
A: Look, we're not trying to be a serious project here so no.
Can I make bug reports?
A: Absolutely, file a github issue and we might look at it.