Repository navigation
FH2 Recompiled 0.3.0
Pre-release
Pre-release
Important
Unofficial, non-commercial fan project, not affiliated with or endorsed by Microsoft, Xbox Game Studios or
Playground Games. This APK contains no game data. It does nothing without the files extracted from your
own legally obtained copy of Forza Horizon 2 for Xbox 360. Do not ask for game files.
Release v0.3.0
English
Much faster on both phones, same image.
- No read-backs of small resolves (on by default): the CPU used to read back 18–27 tiny 64×64 textures per frame for auto exposure, forcing the game, the ring and the GPU to take turns. 38 → 55 fps on the S23 Ultra.
- Vertex cache across frames (on by default): reuses the vertices the game hasn't changed instead of copying them again. Parked scene: 27 → 36.5 fps (+35 %); vegetation-heavy landscape: ~30 → ~40 fps; vertex uploads 12.5 → 1.0 GB per 10 s; 192 MB cache on phones with 8 GB+ of RAM.
- Exact-size small render targets (optional, off by default): the reflection cube's faces and reduction chain are created at their exact height instead of 720 rows. S23 Ultra parked:
menores−0.9 ms,copias−0.4 ms per Swap. Moto G9 Play: steadier frame pacing (see below). - Experimental
Fastest core for the gametoggle (off by default): gives the fastest core to the game's busiest thread instead of the ring. Measured −30 % in S23 Ultra testing (the ring still limits) — stays off. - Performance hints (ADPF) always on; XMA audio decoding fixed on Android; pipeline cache saved after slow compiles; fewer clock reads on the ring; no GPU-timestamp overhead by default; render scale down to 12 %; watched fetch table restarts when full (fixes the 4 fps dip at the festival); usage log with clocks, battery and thermal headroom.
Head-to-head, S23 Ultra (same parked scene, render scale 100 %, cold, Anisotropic filtering 16x, FXAA):
| v0.2.0 | v0.3.0 | |
|---|---|---|
| Parked fps | ~21–26 | ~48–61 (avg ~53, ~2.3×) |
| Game thread | 91–98 % all the time | 81–96 %, alternating with the ring |
borrados (clears — deferred clears via loadOp = CLEAR replaced full-image clears outside passes) |
8–10 ms GPU | 0.02 ms |
| hueco entre trabajos (idle gap between GPU submissions — it collapsed because the ring no longer stalls on read-backs and fences) | 8–9 ms | ~0.5–1 ms |
| copias (resolve copies, render target → texture) | ~3.0–3.2 ms | ~1.8–2.9 ms |
Head-to-head, Moto G9 Play (race, 30 fps cap, render scale 78 %, native):
| v0.2.0 | v0.3.0 | |
|---|---|---|
| Steady fps | ~8–9 | ~10 (~15 % faster frame, never drops to 8) |
| Game thread | 66–78 % | 60–99 % |
| GPU busy | 72–87 % | 80–93 % |
| borrados | 16–37 ms | n/a (measuring off) |
| copias | 2.6–12 ms | n/a (measuring off) |
Caveats: vblank quantization at the 30 fps cap on the Moto, routes may differ slightly.
Full Changelog: v0.2.0...v0.3.0