Changes
-
Even less work per race frame (#176). Three more parts of the game's main thread got cheaper:
- Shader constants: each draw now prepares only the shader constants its shaders read, about 620 bytes instead of 8 KB.
- Graphics lock: the lock every graphics call takes is kept between back-to-back calls on the main thread instead of being taken and released thousands of times a frame.
- Translated game code (Android): the frequent safety checks in the translated code no longer force the compiler to reload registers. The helpers that save and restore registers also find guest memory directly.
On an AYN Thor (Snapdragon 8 Gen 2), in the same race:
0.10.11 0.10.12 0.10.13 0.10.14 Frame without drawing ~10.9 ms ~9.5 ms ~8.9 ms ~7.3–8.5 ms Frames the race had to skip 372 162 137 35–65 Phones that slow down when they get hot keep up for longer. On a PC the difference is smaller, since the CPU usually has room to spare.
Everything else is the same as v0.10.13.
Validation
- Each change was measured on its own on an AYN Thor, with A/B runs from the same APK:
- shader constants: about 0.5 ms less main-thread time a frame;
- graphics lock: lock overhead fell from 0.52 to 0.18 ms a frame;
- translated code: about 0.5 ms less in a frame without drawing.
- Shader constants: checked against all 476 shaders of the release's shader pack on both backends. A diagnostic run that fills unread constants with invalid values still renders normally.
- Graphics lock: in a whole race, no other thread ever waited for it.
- The three changes together:
- Windows x64, Vulkan with the validation layer: a whole race, no validation errors, all 455 pipelines.
- Windows x64, D3D12: a whole race.
- macOS (M1): a whole race at full speed, all 455 pipelines.
- AYN Thor, this release's APK: two whole races at full speed (0.999, 60 fps), all 455 pipelines.
- Unit tests: 159 passed on Linux. GitHub Actions builds and tests passed on Windows, Linux, macOS and Android.
- If something looks wrong: the shader-constant change can be turned off under Settings › Test options › Upload only used constants. Please report anything odd with a
game.log.
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: 62. The companion licence archive applies to both APKs.
- macOS (Apple Silicon): download and extract the macOS ZIP; open
FreeRidersRecompiled.app(right-click › Open the first time). - iOS:
ios-arm64.ipa, to install with your own sideloading tool. - Online server:
docker pull ghcr.io/yuutatsubasa/free-riders-server:0.10.14 - Checksums:
SHA256SUMS.txt.
Use your own game disc image. No game data, private saves or test overrides are included.
Known limitations
The same as v0.10.6.