All games

X-Moto

Platinum · 96 0.4 h played, 0 crashes

A 2D motorbike trials game: ride through physics-based levels without falling off, collecting strawberries.

controller: full platformer, racing 2d physics bike levels

Played sessions

Testing is done with Walnut's rating tool (walnut-rate, planned): how ratings are made and submitted.

Same in every session: Walnut 0.1

The platform builds under it (3)
Linux kernel6.12.111+ps3.747 Walnut's build
Mesa26.2.4-1+ps3.721 Walnut's build
ps3rsx0.735+k6.12.111+ps3.747 Walnut's build
DateLauncherGame buildRulesPlayEndedPicture
2026-10-24 X-Moto xmoto 0.6.3+repack-1+ps3.788 1.026 minquit ok Details
2026-10-23 X-Moto xmoto 0.6.3+repack-1+ps3.721 1.01 minquit ok Details
2026-10-23 X-Moto xmoto 0.6.3+repack-1+ps3.721 1.06 minquit ok Details

Download all sessions as CSV (one row per session, the aspects as columns)

Rating history

The rating on each version it was tested on, newest first: each row is rated from that version's sessions alone, under the newest rules those sessions have the data for.

VersionTestedMedalRules Frame rateSmoothnessSoundPictureStabilityDisplayLoad Play
Walnut 0.1
xmoto 0.6.3+repack-1
2026-10-24
from 2026-10-23
Platinum · 96 1.0 98899810091-99 0.4 h
3 tests

Scripted benchmarks

Not rated: tests of driver and game changes. A script plays the same scene on the PS3 again and again (the desktop stopped, vsync off) to compare two builds of the game or of the graphics driver. The numbers say which build is faster; they never feed the medal.

How the script plays it: X-Moto 0.6.3: replays the "credits" replay with --timedemo --benchmark, fullscreen 1920x1080, no network.

The recipe's full description

X-Moto 0.6.3: replays the "credits" replay (shipped inside xmoto.bin, which --replay doesn't read: assets/xmoto-credits.rpl is it, extracted, MD5 05a7200d...) with --timedemo --benchmark (draws every frame, prints the average and exits), fullscreen 1920x1080, no network. It sets no swap interval itself: vblank_mode=0. The replay runs in real time (physics steps by the wall clock; --timedemo only lifts the frame cap): ~144 s, so runs before 2026-10-17's steady state (cut at 90 s) never printed the average. Steady state: passes. Our patch 0003 (StateReplaying::update, at the benchmark end) with XMOTO_BENCH_LOOPS=N plays the replay N times (a new StatePreplayingReplay instead of closing), printing the lines each pass. Two passes (~300 s with the reloads): the first is the warm-up, the second (~144 s, starts after 0.9 x 60 s) is counted and covers the 120 s. fps= is the first pass's.

The recipe today runs it at 1920x1080, with vblank_mode=0 XMOTO_BENCH_LOOPS=2 (vsync off). Older batches ran the recipe as it was then: their titles and observations say what changed (a new game build, a driver change).

11 variants of the recipe
base stands for the gamethe recipe as it is, without a variant
kick100Mesa ps3.282: a submission every 100 draws (0026), the Armagetron fix, checked here
autooffMesa ps3.299 switches, to bisect its cost here: 0027 (adaptive submission) off, 0030 (index upload) off
idxoff-
glstatsour xmoto (gamedb/games/xmoto/packages/xmoto/, +ps3.N): DrawLib's primitives batched and the GL state set only when drawing (XMOTO_GL_BATCH), the level's blocks and edges from one buffer (XMOTO_GL_BLOCKS); base has both. Draws, vertices and syncs per frame every 5 s on stderr (game.log):
nobatchDebian's drawing: glBegin/glEnd, a draw per block polygon (~1960 draws a frame)
noblocksbatching only, the blocks polygon by polygon (~1000 draws a frame, ~40 with base)
fpvram0031 (fragment programs from GART after a constant change) off; 0028 (index buffer fenced) off
idxlate-
streamour xmoto 0004 (docs/HOTPATHS.md, target 3): the batches written straight into a mapped stream buffer instead of client memory that Mesa copies at every draw (u_upload_data's memcpy, 5.5% of the CPU, the minimap's circles most of it); the same vertices and draws. streamstats counts its buffer renewals too
streamstats-

Conditions: what a variant adds to the recipe (its environment switches) and what ran alongside (the stall recorder, a profiler). Rows marked invalid or not comparable say why. The other numbers, the build and the run length are under "All numbers" in each batch.

What the run length means

"warm-up + 120 s" is a steady-state run, which leaves out a 60 s warm-up and measures 120 s or more; "whole run" counted everything from the start, the way runs before 2026-10-17 did.

Suite summary

2026-10-20 · batch suite-summary-2026-10

Purpose: The 13 benchmarked games (15 rows) with their known numbers, the rules-1 calibration of the rating formula (docs/GAMEDB.md "Calibration", tools/gamedb/score.py). Each value names its source: a batch's cell, or the suite table of docs/games/README.md where the number is a reading or a range (no single cell holds it). Stutter is the stall seconds over the 2-minute window; load unmeasured, stability assumed clean, picture and display right.

Row ram_free
MiB
vram
MiB
fps_steady
frames a second
stall_play_s
seconds
low1_play
frames a second
longest_play_ms
ms
sound_faults_per_min
faults a minute
Picture, sound
X-Moto base 5137160.70.0106.7430 right, right

batch ssdroot2 P2: ps3rsx shadow_fast (PS3RSX_SHADOW_FAST=1 against off, STALLS=1)

2026-10-19 · batch 2026-10-19-ssdroot2-shadow-fast · 12 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base stall recorder at 10 ms 158.498.10.0
base stall recorder at 10 ms
switch rsx_shadow_fast1
159.097.40.0
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 158.0 cpu 303.5 seconds underruns 206.5 underruns ram_free 48.0 MiB vram 37.3 MiB longest_ms 264.5 ms stall_disk_s 0.0 seconds stall_swap_s 0.0 seconds stall_reclaim_s 0.0 seconds stall_gpu_s 0.0 seconds stall_cpu_s 0.2 seconds stall_play_s 0.0 seconds longest_play_ms 43.8 ms no build recorded
1920x1080, warm-up + 120 s
base fps whole run 158.9 cpu 301.1 seconds underruns 209.0 underruns ram_free 46.6 MiB vram 37.2 MiB longest_ms 250.6 ms stall_disk_s 0.1 seconds stall_swap_s 0.0 seconds stall_reclaim_s 0.0 seconds stall_gpu_s 0.0 seconds stall_cpu_s 0.2 seconds stall_play_s 0.0 seconds longest_play_ms 58.6 ms no build recorded
1920x1080, warm-up + 120 s

Observations: same boot (2026-10-19 03:28-04:20Z), x2 interleaved per game, kernel .472 ps3rsx 0.443, parameter set per run and put back. ClassiCube steady 46.11 both arms (1% low 30.1 off, 29.7 on, client CPU 80.3 against 86.3 s: within the 79.8-86.6 s the same config showed across the boot), Sauerbraten 39.15 off against 39.7 on (spread of the unprofiled baseline 39.06-40.3; stalls 0.05 against 0.15 s, VRAM equal), X-Moto 158.4 against 159.0 (1% low 98.1 against 97.5). No gain resolved in fps, stalls or CPU at n=2 on three games; the switch stays off. In the ClassiCube and Sauerbraten profiles ps3rsx_shadow_burst and validate are 2-6% of the CPU, the most the switch could touch.

batch 16: game prefetch A/B, idle fix on/off (433), ClassiCube chunks1, X-Moto stream, Luanti lean parts

2026-10-18 · batch 2026-10-18-batch16 · 41 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base the recipe as it is 160.7106.70
stream XMOTO_GL_STREAM=1 162.1106.31.0
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 160.0 cpu 299.4 seconds underruns 148 underruns ram_free 51.0 MiB vram 37.3 MiB longest_ms 693.0 ms stall_play_s 0.0 seconds longest_play_ms 42.9 ms no build recorded
1920x1080, warm-up + 120 s
stream fps whole run 161.9 cpu 290.2 seconds underruns 129.5 underruns ram_free 49.3 MiB vram 37.2 MiB longest_ms 380.4 ms stall_play_s 0.4 seconds longest_play_ms 380.4 ms no build recorded
1920x1080, warm-up + 120 s

Observations: same boot 2026-10-18 ~18:00-20:25 local, kernel 433 (idle fix, no kicker), interference detector on (3 interfered runs excluded: ssh logins). Prefetch fetch vs base x3: no gain (Sauerbraten load 18.1-18.6 vs 15.2-18.8 s; OA gl2min ~0.5 s faster; Luanti WORSE: load +1-4 s, two runs with 3 s hitches): turn the default off. Idle fix on/off x2: stall_play_s 0.4/0.4 vs 9.0/7.9 s, longest 0.22-0.38 vs 2.2-2.8 s (clean). ClassiCube chunks1 48.1 vs 46.0 (+4.7%). X-Moto stream 162.1 vs 160.6 (+1%). Luanti chunk3 renders a black void at 150 s (the lean culprit); srvunload/active2 render but stall more (6.3/6.7 s vs ~2.5)

Mesa ps3.416~dev hot spots (staging pool, query wait), cube2 355 oqlag, xmoto 362 stream, ClassiCube chunks1 (kick)

2026-10-18 · batch 2026-10-18-mesa-416-hot-spots · 9 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base waker kick at 10 ms 160.4100.41
stream XMOTO_GL_STREAM=1
waker kick at 10 ms
163.1107.81
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 160.4 cpu 298.0 seconds underruns 104 underruns ram_free 52.8 MiB vram 37.3 MiB longest_ms 713.9 ms stall_play_s 0.4 seconds longest_play_ms 403.7 ms Mesa ps3.416~dev
1920x1080, warm-up + 120 s
stream fps whole run 162.9 cpu 282.2 seconds underruns 103 underruns ram_free 47.3 MiB vram 37.4 MiB longest_ms 675.6 ms stall_play_s 0.1 seconds longest_play_ms 145.8 ms Mesa ps3.416~dev
1920x1080, warm-up + 120 s

Observations: same boot 2026-10-18 ~13:40-14:15 local, x1 (Sauerbraten demo now first-person with the nonfree data: gun/HUD visible, heavier than earlier spectator runs, not comparable). ClassiCube chunks1 50.9 vs base 48.4 (+5%); staging pool same fps, cpu -4%. Sauerbraten base 25.0 steady/30.3 smooth, NV30_QUERY_WAIT=200 45.6/50.0 (low1 4.9 -> 16.9), oqlag 39.4/43.5: single runs, repeat pending. X-Moto stream 163.1 vs 160.4, longest 146 vs 404 ms

xmoto ps3.323 + etr ps3.324 (game-side batching) + Mesa ps3.299

2026-10-17 · batch 2026-10-17-xmoto-etr-batching · 8 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base the recipe as it is ---
nobatch XMOTO_GL_BATCH=0 ---
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 166.5 cpu 72.7 seconds underruns 29.0 underruns ram_free 54.8 MiB vram 37.2 MiB Mesa ps3.299
1920x1080, whole run
nobatch fps whole run 44.5 cpu 87.1 seconds underruns 32.0 underruns ram_free 53.1 MiB vram 36.3 MiB Mesa ps3.299
1920x1080, whole run

Observations: Our X-Moto: 18,500 -> 165 GL calls and 1,960 -> 40 draws per frame (host count); credits replay 44.5 -> 166.5 fps HUD median (nobatch = old drawing, same boot), picture identical on the webcam. Our Extreme Tux Racer: 19,400 -> 850 calls, 697 -> 72 draws; race replay 52 -> 59 (gloff = old drawing).

Mesa ps3.282 A/B on the ps3.299 boot

2026-10-17 · batch 2026-10-17-mesa-282-ab · 4 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base the recipe as it is ---
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 47.0 cpu 86.2 seconds underruns 26.5 underruns ram_free 52.8 MiB vram 36.3 MiB Mesa ps3.282
1920x1080, whole run

Observations: Same boot as the ps3.299 row, Mesa ps3.282 reinstalled for 2 runs each: X-Moto 47.0, ClassiCube 46.9.

Mesa ps3.299 + ps3rsx 0.249

2026-10-17 · batch 2026-10-17-mesa-299 · 24 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base the recipe as it is ---
autooff NV30_PS3_KICK_AUTO=0 ---
fpvram NV30_FP_CONST_VRAM=1 ---
idxlate NV30_IDXBUF_LATE_REF=1 ---
idxoff NV30_INDEX_UPLOAD=0 ---
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 46.0 cpu 84.0 seconds underruns 33.5 underruns ram_free 51.4 MiB vram 36.3 MiB Mesa ps3.299, ps3rsx 0.249
1920x1080, whole run
autooff fps whole run 45.5 cpu 80.1 seconds underruns 108.5 underruns ram_free 47.6 MiB vram 36.3 MiB Mesa ps3.299, ps3rsx 0.249
1920x1080, whole run
fpvram fps whole run 46.0 cpu 85.9 seconds underruns 28.0 underruns ram_free 54.7 MiB vram 36.4 MiB Mesa ps3.299, ps3rsx 0.249
1920x1080, whole run
idxlate fps whole run 46.0 cpu 85.4 seconds underruns 26.5 underruns ram_free 57.6 MiB vram 36.3 MiB Mesa ps3.299, ps3rsx 0.249
1920x1080, whole run
idxoff fps whole run 45.0 cpu 80.7 seconds underruns 112.5 underruns ram_free 46.3 MiB vram 36.2 MiB Mesa ps3.299, ps3rsx 0.249
1920x1080, whole run

Observations: Mesa round 3 (0027 adaptive submission, 0028 index buffer fenced, 0029 state reset, 0030 index upload, 0031 FP constants from GART). Clean runs (one-ssh webcam watcher), 2 each: Armagetron 61.5 (ps3.282: 50), OpenArena tc1 52.4 (51.3), ClassiCube 46.3 (same-boot ps3.282 A/B: 46.9: noise), X-Moto 44.5 (same-boot ps3.282: 47.0, real -5%; neither autooff 45.5 nor idxoff 45.0 restores it; fpvram 46, idxlate 46: 0031 and 0028 about a frame each). 0031 checked on the webcam with OpenArena opengl2: right picture, no wedge. GL tests pass. Runs 13:05-14:50 UTC with the old watcher (an ssh every 5 s) were slowed and are left out.

Mesa ps3.282 + ps3rsx 0.249: kick100 against base in OpenArena X-Moto ClassiCube

2026-10-17 · batch 2026-10-17-mesa-282-kick100 · 12 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base the recipe as it is ---
kick100 NV30_PS3_KICK_DRAWS=100 ---
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 47.5 cpu 88.8 seconds underruns 32.5 underruns ram_free 55.8 MiB vram 36.2 MiB Mesa ps3.282, ps3rsx 0.249
1920x1080, whole run
kick100 fps whole run 43.0 cpu 88.9 seconds underruns 25.5 underruns ram_free 54.0 MiB vram 36.3 MiB Mesa ps3.282, ps3rsx 0.249
1920x1080, whole run

Observations: 12:24-12:44Z, Mesa ps3.282 (0026: NV30_PS3_KICK_DRAWS=100 submits every 100 draws), two base and two kick100 runs per game, interleaved, libspeq0 0.288. OpenArena tc1: base 52.2 and 50.4 fps, kick100 52.2 and 53.9 (+3%), CPU 36-38 s in all, longest frame 892-935 ms base against 954-1216 ms. X-Moto (HUD median): base 47 and 48, kick100 42 and 44 (-9%), CPU 88-90 s in all, underruns 22-43 against 22-29. ClassiCube fly-through (own counter): base 48.1 and 48.5 fps, kick100 48.8 and 49.0 (about +1%, neutral) but 59-60 s of CPU against 54.6 s (+9%). With the Armagetron row (kick100 restores 60.5 fps there): 0019 cost Armagetron its CPU/GPU overlap; NV30_PS3_RELOCS=1 or a submission every 100 draws gets it back, but kick100 costs X-Moto 9%, gains OpenArena 3% and is neutral for ClassiCube, so there is no fixed-N default that is good for every game. The reason X-Moto loses is not established. Four runs per game; spread between two runs of the same variant is 1-2 fps.

Mesa ps3.262 + ps3rsx 0.249

2026-10-17 · batch 2026-10-17-mesa-262 · 12 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base the recipe as it is ---
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 47 cpu 89.6 seconds underruns 42 underruns ram_free 56.7 MiB vram 36.3 MiB Mesa ps3.262, ps3rsx 0.249
1920x1080, whole run

Observations: 2026-10-17 10:42-11:04Z, suite round after Mesa 0019-0025 (fewer words per draw: no relocations, texture cache invalidate only after texture changes, no duplicate VTXFMT writes, batched VP constants; bcd99d7, 5fe2290), one run per game. Against ps3.246: OpenArena tc1 44.2 to 54.4 (+23%), Yamagi 51.4 to 63.9 (+24%), X-Moto 39 to 47 (+21%), Extreme Tux Racer 46 to 53 (+15%), dsda-doom software 33 to 38 and now finishes (+15%), ClassiCube 47.6 to 50.1 (+5%), Neverball 78.2 to 71.5 (noise), QuakeSpasm 70.5 to 66.3 (repeated in the next row), Luanti 53 to 53. Armagetron drops from 60 to 51 (HUD). Sauerbraten reads 28 to 8 (HUD): it is memory-stalled (MemAvailable 13 MB, killed at the cap), so that is not a driver number and the cause is uncertain. No validator rejects. Single runs.

Mesa ps3.246 + ps3rsx 0.249

2026-10-17 · batch 2026-10-17-mesa-246-ps3rsx-249 · 12 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base the recipe as it is ---
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 39 cpu 83.8 seconds underruns 45 underruns ram_free 70.9 MiB vram 36.4 MiB Mesa ps3.246, ps3rsx 0.249
1920x1080, whole run

Observations: 2026-10-17 08:32-08:54Z, first suite round after the reboot, one run per game. fps: Armagetron 60 (HUD), ClassiCube 47.6, dsda-doom software 33 (HUD, demo unfinished), Extreme Tux Racer 46 (HUD), Luanti 53 (HUD), Neverball 78.2, OpenArena tc1 44.2 (longest frame 2.1 s), QuakeSpasm 70.5, Sauerbraten CPU skinning 28 (HUD), X-Moto 39 (HUD), Yamagi Quake II 51.4. Pictures right and sound right for these games except dsda-doom (1161 underruns, MIDI music), Sauerbraten (176) and OpenTTD (1429, choppy). OpenTTD base ran 55.5 s of CPU with no frame rate (plain X11 path). Single runs, so differences of a few fps are within the run-to-run spread.

Mesa ps3.246 + ps3rsx 0.219

2026-10-17 · batch 2026-10-17-mesa-246 · 7 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base the recipe as it is ---
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 37 cpu 86.1 seconds underruns 126 underruns ram_free 70.8 MiB vram 36.3 MiB Mesa ps3.246, ps3rsx 0.219
1920x1080, whole run

Observations: 00:36-00:42Z, Mesa ps3.246 (0015-0017: no fence reference work when the fence is unchanged, one fence read per validate, no duplicate krefs; same command stream; c9eb36c) before the ps3rsx 0.249 reboot. gl-texsub, gl-texfmt, gl-genmip and gl-mipread all PASS (no cells). X-Moto 37 fps HUD (35 on ps3.223; underruns 208 to 126), ClassiCube demo 44.9 fps (43.2 on ps3.225). OpenTTD with libsdl3 +ps3.242 (accelerated framebuffer, colours right per the user) runs at 2 fps by the HUD with 937 underruns because the framebuffer was converted on the CPU twice per frame; killed at the 60 s cap. Single runs.

Mesa ps3.223 + ps3rsx 0.219

2026-10-16 · batch 2026-10-16-mesa-223 · 5 runs in the batch (all games)

Not comparable: every game was profiled with perf during the run, which slows it.

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base
not comparable
the recipe as it is ---
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 34.6 cpu 165.7 seconds underruns 208 underruns ram_free 42.6 MiB vram 36.4 MiB Mesa ps3.223, ps3rsx 0.219
1920x1080, whole run

Observations: 22:08-22:17Z, the five games profiled with perf for GAME-PLAN's 'where the CPU goes' table (15 s per game; the perf recording is stated there, the run directories do not show it), so fps are lower than plain runs. X-Moto 34.6 fps (own counter), OpenArena tc1 37.2 (longest frame 3.1 s), ClassiCube 54 (HUD), Extreme Tux Racer 40 (menu, HUD), Armagetron 102 (HUD, live first-run game). 208 X-Moto underruns. Result: the driver stack, not the games, takes most of the CPU (Mesa 28-56%, ps3rsx 6-16%), which started the per-draw work in Mesa ps3.246/ps3.262 and ps3rsx 0.249. One run per game.

Group 1 X-Moto credits replay (Mesa ps3.186)

2026-10-16 · batch 2026-10-16-xmoto-credits · 1 run in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base the recipe as it is ---
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 35.0 cpu 165.0 seconds underruns 196 underruns ram_free 58.6 MiB vram 36.3 MiB Mesa ps3.186
1920x1080, whole run

Observations: 21:46Z, Debian xmoto 0.6.3 credits replay: 35.04 fps by the game's own counter (5075 frames in 144.83 s), CPU-bound (165 s of CPU in a 167 s run), 196 ALSA underruns. Runs with the right picture; the effects play but the engine sound is masked by the music (08e914e). Single run.

Group 1 X-Moto first smoke (Mesa ps3.186; no fps line)

2026-10-16 · batch 2026-10-16-xmoto-smoke · 1 run in the batch (all games)

Invalid: the run printed no frame-rate line; the 320 is the Gallium HUD's median over the whole run, not the replay's frame rate.

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base
invalid
the recipe as it is ---
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 320 cpu 146.9 seconds underruns 67 underruns ram_free 50.5 MiB vram 25.8 MiB Mesa ps3.186
1920x1080, whole run

Observations: 21:41Z, Debian xmoto 0.6.3, credits replay: the run exited with rc 0 after 206 s but printed no frame-rate line; the Gallium HUD median is 320 fps (p10 249), which is not the replay's frame rate. The cell is that HUD number, not a game frame rate. 67 underruns. Cause not recorded in the run directory; the next launch printed its fps line.