All games

SuperTuxKart

Silver ยท 69 0.2 h played, 0 crashes

A 3D kart racer with items, many tracks and a family-friendly cast.

Genre
racing
Theme
family
Players
single player local multiplayer online multiplayer
Input
supports gamepad
View
3D
Keywords
kart

How it's built, patched and set up for its played test. The numbers are under Test runs.

SuperTuxKart 1.5 runs on its legacy OpenGL 2.1 renderer with Walnut’s big-endian fixes: without them the game quits while loading its track models. The tracks and karts draw correctly. It is the heaviest game on the list: at the lean settings it races at 19 to 22 frames a second.

SuperTuxKart 1.5 runs on its legacy GL 2.1 renderer with our big-endian fixes; without them the game quits while loading its track models. It is the heaviest game we play: at the lean settings, now the package’s default for a fresh configuration, it races at 19-22 fps by the Gallium HUD in the benchmark, and its played session on Mesa ps3.850 (2026-10-26) had a 24 fps median over five tracks with no crash and no glitches. Light tracks play well, heavy ones (Ravenbridge Mansion) are slow, and a track’s load takes about 20-30 s.

Packages and patches

supertuxkart, supertuxkart-data (1.5-2+ps3.N, packages/supertuxkart), replacing Debian’s. supertuxkart-data is Debian’s data, rebuilt because supertuxkart needs it at its own version. 839 MB with the data (752 MB of it data), so it deploys by name and is in no suite.

Patch What
0001 the .spm mesh and armature loader byte-swaps the little-endian data instead of refusing to run (upstream #5578 was closed as not planned); all 1268 .spm files parse identically on amd64 and ppc64
0002 textures and vertex colours in the right channel order on the OpenGL driver
0003 legacy renderer: no crash when render-to-texture fails, a power-of-two (512x512) minimap render target
0004 texture compression reaches the legacy renderer: opaque power-of-two textures as DXT1, compressed by Mesa at upload
0005 STK_PROFILE_WARMUP=S: profile mode restarts its frame count and clock once the race passes S seconds and ends the race at S + the profile time
0006 defaults of a fresh configuration (a key already in config.xml keeps its value): the lean graphics (HD textures off, important particles only, drivers not animated, no minimap), texture compression on, the old-driver popup off, fullscreen at the desktop’s resolution (real_width/real_height 0, resolved in IrrDriver::initDevice)
0007 game controllers like a console game: a fixed scheme as the default bindings of any pad with the usual buttons, a second binding per action, a hot-plug scan

Controls (0007). A pad’s bindings come from its SDL game controller mapping (GamepadConfig::initSDLMapping), once, when STK first sees that pad; 0007 rewrites that table. A pad that already has an entry in ~/.config/supertuxkart/config-0.10/input.xml keeps it (delete the entry, or the file, to get the new scheme). R2 or R1 accelerate, L2 or L1 brake and reverse, the left stick or d-pad steer (and move in menus), Cross skids (selects), Square fires the item, Circle nitro (back), Triangle looks back, Select rescues, Start pauses. STK allows one binding per action, so 0007 adds a second one (DeviceConfig::setAltBinding, saved as a second <action ... alt="true">; setting a binding by hand clears it). A pad with fewer buttons gets the game’s older default. Hot-plug: InputManager::update looks every 2 s for a pad SDL lists that isn’t open.

How it performs

Configuration Steady fps (HUD) Gameplay stalls / 1% low / longest Free RAM / VRAM Batch
base (the game’s own defaults) 12.6 13.5 s / 8.4 / 676 ms 24 / 130 MB batch 2026-10-18-batch8
lean 21.4 2.4 s / 12.2 / 663 ms 19 / 96 MB batch 2026-10-18-batch8
lean (6 runs) 19.1-21.0 1.3-2.7 s / 11.4-12.1 / 430-690 ms 22-27 / 95-96 MB batch 2026-10-18-batch16
lean, SSD root (n=3) 20 (20-22) 2.0 s (0.2-3.6) / 11.1 / 448 ms 26 / 97 MB batch 2026-10-19-ssdroot1-baseline, batch 2026-10-19-ssdroot2-force-dxt
lean, Mesa 0044 NV30_MINMAX_VMX=1 (x5 against unset) 22 against 20 0.6 against 1.2 s / 12.3 against 11.6 batch 2026-10-20-ssdroot9-minmax-vmx
  • Two frame rates. The game’s own “Average FPS” (105-111 for lean) is its physics tick rate, not a frame rate; the HUD’s 19-22 is (the investigation).
  • The load is the suite’s longest: 54.3 s on the USB root, 31.1 s on the SSD root, where the main thread’s 23.8 s of CPU is 53% decoders (png 4.2, zlib 3.9, audio 2.2, jpeg 2.1 s) (PROFILING.md); all threads (batch 2026-10-19-ssdroot2-startup-profiles): the game 5.35 s, png 4.2, zlib 3.9, audio 2.2, jpeg 2.1, Mesa 1.3, linking 0.9. It is the one game where decoders matter: twice as fast, the main thread would lose 2.7 s of the game’s load path, 2.1 of png, 2.0 of zlib, 1.1 each of audio and jpeg. Our libpng16 +ps3.560 took the png part from 4.0 to 1.6 s and the load from 30.3 to 27.6 s (batch 2026-10-19-ssdroot6-libpng); our libvorbis -0.7 s, zlib-ng -0.9 s, and libjpeg-turbo’s AltiVec path is in use (JSIMD=none +1 s) (batch 2026-10-19-ssdroot5-load-libraries).
  • Gameplay CPU (batch 2026-10-19-ssdroot2-gameplay-profiles, 20 fps profiled): the game 36.5% (the main thread: Irrlicht’s driver and Bullet by the symbolised profile of 10-18; __dynamic_cast 0.8%), Mesa 35.5%, libc 15.1% (unsymbolised but for __memcmpeq 0.7, cfree 0.7, malloc 0.5), the kernel 5.1%, ps3rsx 2.6%, the audio thread 3.3% with the “buffer size too low” warnings (HOTPATHS.md).
  • Played (rules 2.0): on Mesa ps3.827 a crash on Ravenbridge Mansion after GART ran out, with garbage textures from dropped uploads before it; Mesa 0049 (ps3.850) fixed both, and the next session played five tracks with a restart, textures and kart shadows as on the PC (the investigation).

The benchmark (recipe): profile mode (--profile-time) starts a race at once with every kart AI-driven, on lighthouse with 4 karts (STK_TRACK, STK_KARTS), fullscreen 1920x1080, --no-start-screen; with STK_PROFILE_WARMUP=60 and --profile-time=180 it drives 240 s. The load ends at the “Track: Overall scene complexity” line; GL 2.1 picks the legacy renderer by itself (“Using the fixed pipeline”). setup() writes the whole config.xml every run; base is the game’s defaults with HD textures on. The race is AI-driven (rand() seeded from the clock, frame-time physics): close between runs, not identical. Its GPU timers are garbage on the RSX (timer queries return a pixel count). The sound state is read at 70 s: at 15 s on the slow USB root the game hadn’t opened its audio device yet, so the runs of 2026-10-17 and 10-18 logged sound=none.

Known problems

  • Slow on the heavy tracks (the legacy fixed pipeline on the PPE); objects popped in and out on Ravenbridge Mansion in the ps3.827 session (the dropped uploads, since fixed).
  • OpenAL logs “Wait timeout… buffer size too low?” in about half the runs on the stock kernel: the sound card’s DMA stopping, fixed by kernel local/0047 (batch 2026-10-20-ssdroot12-dma-watchdog).
  • Log noise: irr_driver: Using the fixed pipeline (old GPU, or shaders disabled) and OpenGL: OpenGL version is too old! in every run (the modern renderer needs GL 3.3, by design); 30 User Config: Unknown value for X; expected true or false and Couldn't find parameter group ... lines in 25 runs, because the recipe’s config.xml holds only the attributes it sets (all keep their defaults); SFXBuffer: Positional audio is not supported with stereo files for WilhelmScream.ogg and a car sound; “out of VRAM” lines. Writing a full default config once would clear the config noise.
  • The RSX wedged after the ps3.827 crash: X kept running but nothing drew, and a fresh X couldn’t draw either; why the FIFO stopped is open (docs/TESTS.md).

What was tried

Change Result Verdict
Mesa 0038 NV30_FORCE_DXT=opaque on lean forced 0 textures (182 kept for alpha, 173 for their format, 22 small, 6 non-power-of-two: the game’s own compression already takes its opaque ones), fps and stalls equal (batch 2026-10-19-ssdroot2-force-dxt) nothing to gain
Mesa 0038 NV30_FORCE_DXT=all on lean its alpha textures as DXT5: peak VRAM 95.5 to 58.1 MiB (-39%), fps, 1% low, stalls, CPU and load the same, no blocks or banding on the webcam (batch 2026-10-20-ssdroot8-force-dxt) a VRAM win if it goes into game mode short of VRAM; not set until the user has seen the picture at the TV (todo.toml)
Mesa 0044 NV30_MINMAX_VMX=1 +10% (22 against 20), stalls 0.6 against 1.2 s (batch 2026-10-20-ssdroot9-minmax-vmx); +5% in batch 2026-10-19-ssdroot7-minmax-vmx a gain, candidate default
our openal-soft, Debian’s, and OAL=f32 wedged 2, 3 and 0 of 5 runs: the wedge is the sound card, not OpenAL (batch 2026-10-20-ssdroot10-openal-wedge) the kernel fix instead
game prefetch the USB load unchanged (batch 2026-10-18-batch16) off

Investigations

Research

What the surveys and plans said about it, newest first; each line names its source, the section and the date.

  • 2026-10-15, the user’s first wish list (backlog.txt, commit 7d58e3d), “2. GPU driver and game support”: a stretch goal (may work, but RAM or CPU will hurt), in its legacy GL 2.1 renderer mode; the assets are big, so memory will be the problem.

Build

Packagessupertuxkart, supertuxkart-data
Suitenot in the game suite yet
Game datacomes with the packages

Our source packages

Played test

What a played session sets up (rating/test.toml); the medal comes from these sessions only.

Processsupertuxkart
Set aside~/.config/supertuxkart, ~/.local/share/supertuxkart (the game starts on fresh defaults)
Play starts atTrack: Overall scene complexity
Load ends atTrack: Overall scene complexity
Sound read at70 s

Investigations