A test build for slower CPUs (Issue #65). If something looks wrong in a race (missing or broken geometry), set SFR_INDEX_CACHE=0 and tell us in Issue #65.
Changes
- Index buffers kept on the GPU (#81, Issue #65): an index buffer the game leaves unchanged is decoded once, straight into a GPU buffer, and later draws use it as it is. Before, every draw decoded its indices and copied them into the upload ring, about 3 MB a frame, which on a PC with a small CPU cache also pushed out the game's own data. A buffer the game writes to is dropped and decoded again.
SFR_INDEX_CACHE=0turns this off. - Fewer checks per draw: cached vertex and index buffers are found by address, without checking which of three memory views are readable for every draw, and the per-draw "logged before?" check uses a hashed set.
- Diagnostics: the frame metrics (
SFR_FRAME_METRICS=1) countindexed_drawsandkept_index_draws;run_benchmark.bathas ano-index-cachesetting to compare.
Validation
- Per frame, desktop (RTX 4090), fixed-step Dolphin Resort race, on against off, twice in alternating order: drawing 1.91 and 1.84 ms against 2.01 and 2.03 ms, recording 0.38 against 0.44 ms; all indexed draws used kept indices, on D3D12 and on Vulkan. The difference should be larger on a CPU with a small L3, which is what this build is for.
- Unit tests: the full CTest suite (143) passed on Windows; GitHub Actions builds passed.
- Windows package: completed race checks on D3D12 (Frozen Forest) and Vulkan (Dolphin Resort), both with kept indices, every pipeline prepared and the save left unchanged.
- Linux package: passed a Vulkan startup smoke test in WSL (all 455 pipelines prepared).
- Android: the APKs keep the existing signing certificate.
Comparing on your PC
run_benchmark.bat exe 6 solo
with this build's sfr_cpu_diagnostic.exe as _b against v0.6.4's as _a, or within this build, scripts\benchmark.ps1 -Configs baseline,no-index-cache -Scenario solo -FixedStep.
Downloads
- Windows x64: download and extract the Windows ZIP; run
FreeRidersRecompiled.exe. - Linux x64: download and extract the Linux archive; run
FreeRidersRecompiled. - Android 10 or later: prefer
android10-arm64.apk. - Android 9: use
android-arm64.apk. - Android version code: 30. The companion licence archive applies to both APKs.
- Checksums:
SHA256SUMS.txt.
Use your own game disc image. No game data, private saves or test overrides are included.
Known limitations
- This build: the index cache was checked on two courses (Dolphin Resort, Frozen Forest) on Windows; other courses, the World Grand Prix story and Android devices have not been played with it.
- Being investigated: a crash in a race on a 4-core PC (Issue #64), and a character occasionally saying a winning line after losing (Issue #47).
- Relay Race: 2P vs 2P is not supported yet.
- Mali GPUs: only the graphics start-up has been checked on Mali GPUs.
- From v0.5.0: lighting has not been compared with the Xbox 360; no camera motion inference on Linux or Android; performance varies by device.