<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Technical notes on Walnut Games</title>
		<link>https://walnut.nanobyte.dev/gamedb/technical/</link>
		<description>Recent content in Technical notes on Walnut Games</description>
		<generator>Hugo</generator>
		<language>en</language>
		
		
		
		
			<atom:link href="https://walnut.nanobyte.dev/gamedb/technical/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>32 MB in a random number generator (2026-10-18)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/yquake2/investigations/prng-table/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/yquake2/investigations/prng-table/</guid>
				<description>&lt;p&gt;Moved on 2026-10-26 from docs/MEMORY.md (&amp;ldquo;Findings in the games&amp;rsquo; code&amp;rdquo;, &amp;ldquo;Cuts, ranked&amp;rdquo; row 1 and the&#xA;packages table), where the cross-game memory picture stays.&lt;/p&gt;&#xA;&lt;h2 id=&#34;symptom&#34;&gt;Symptom&lt;/h2&gt;&#xA;&lt;p&gt;The MEM=1 batch of 2026-10-18 (00:40-01:40 UTC, Mesa ps3.299, one run per game) had Yamagi Quake II at&#xA;77 MB of Rss + 3.4 MB swapped, with 42.1 MB of anonymous memory (the most of the ten games) and a&#xA;23 MB .bss in the client, 18 MB of it resident.&lt;/p&gt;</description>
			</item>
			<item>
				<title>An 8 MB staging buffer every frame (2026-10-19)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/openttd/investigations/staging-buffer-per-frame/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/openttd/investigations/staging-buffer-per-frame/</guid>
				<description>&lt;p&gt;Moved on 2026-10-26 from docs/HOTPATHS.md (&amp;ldquo;OpenTTD: an 8 MB staging buffer every frame&amp;rdquo; and the&#xA;OpenTTD rows of the SSD-root profiles). The driver side, what a soft-masked sample is and the three&#xA;switches built against it (Mesa 0040 &lt;code&gt;NV30_STAGING_POOL_MB&lt;/code&gt;, kernel local/0046&#xA;&lt;code&gt;ps3_htab.insert_readback&lt;/code&gt;, ps3rsx &lt;code&gt;clear_dcbz&lt;/code&gt;), stays in&#xA;&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/docs/HOTPATHS.md#soft-masked-time-and-the-staging-buffer-per-frame&#34;&gt;docs/HOTPATHS.md&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;symptom&#34;&gt;Symptom&lt;/h2&gt;&#xA;&lt;p&gt;The gameplay profile of batch ssdroot2 P1b (2026-10-19, kernel .472, Mesa ps3.476, OpenTTD&amp;rsquo;s OpenGL&#xA;driver, 18 fps; the webcam showed the title screen with its menu open, so it is the title screen&amp;rsquo;s&#xA;redraw and music, not play) spent 49.5% of OpenTTD&amp;rsquo;s samples in the kernel, 37.6% of them booked as&#xA;&lt;code&gt;__replay_soft_interrupts&lt;/code&gt; (time with interrupts soft-masked), against 1.7-5.7% in the six other games&#xA;profiled. Mesa&amp;rsquo;s own share was 1.1%, but its GL API entry hot path was 33.2% (&lt;code&gt;_mesa_memcpy_texture&lt;/code&gt;, the&#xA;CPU copy of its PBO upload) and buffer allocation and free 17.0%.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Armagetron Advanced: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/armagetronad/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/armagetronad/technical/</guid>
				<description>&lt;p&gt;Armagetron Advanced 0.2.9.3 is Debian&amp;rsquo;s package with two patches of ours (fullscreen at the desktop&amp;rsquo;s&#xA;resolution by default, a fixed game-controller scheme) and runs with the right picture and sound. Live AI&#xA;rounds play at 83 steady fps in the benchmark; its played session (2026-10-25) had a 104 fps median, quit&#xA;cleanly and was fully playable with the pad.&lt;/p&gt;&#xA;&lt;h2 id=&#34;packages-and-patches&#34;&gt;Packages and patches&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;armagetronad&lt;/code&gt;, &lt;code&gt;armagetronad-common&lt;/code&gt; (Debian&amp;rsquo;s 0.2.9.3.0-1 with our patches,&#xA;&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/tree/main/gamedb/games/armagetronad/packages/armagetronad&#34;&gt;packages/armagetronad&lt;/a&gt;). Its textures are RGBA8, and the big-endian risk (GL_RGBA or&#xA;GL_BGRA picked from the SDL surface&amp;rsquo;s red mask) didn&amp;rsquo;t bite.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Armagetron: Mesa ps3.262&#39;s -13%, the lost CPU/GPU overlap (2026-10-17)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/armagetronad/investigations/submission-overlap/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/armagetronad/investigations/submission-overlap/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Symptom.&lt;/strong&gt; Mesa ps3.262 (0019-0025, fewer words per draw) sped up every game of the suite by 11-24%,&#xA;except Armagetron: its playback went from 60 fps HUD median on ps3.246 (59 and 61 in the same boot,&#xA;&lt;a href=&#34;../../test-runs/#batch-2026-10-17-mesa-246-control&#34;&gt;batch 2026-10-17-mesa-246-control&lt;/a&gt;) to 52.5 (-13%, &lt;a href=&#34;../../test-runs/#batch-2026-10-17-mesa-262&#34;&gt;batch 2026-10-17-mesa-262&lt;/a&gt;), and 50 on&#xA;ps3.282.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Evidence.&lt;/strong&gt; Not 0020&amp;rsquo;s texture invalidation: &lt;code&gt;texinv&lt;/code&gt; gave 52 (&lt;a href=&#34;../../test-runs/#batch-2026-10-17-mesa-262-repeats&#34;&gt;batch 2026-10-17-mesa-262-repeats&lt;/a&gt;).&#xA;On ps3.282 (&lt;a href=&#34;../../test-runs/#batch-2026-10-17-mesa-282-armagetron&#34;&gt;batch 2026-10-17-mesa-282-armagetron&lt;/a&gt;) the switches told: with relocations back on, or a&#xA;fixed kick every 50 or 100 draws (&lt;code&gt;kick50&lt;/code&gt;, &lt;code&gt;kick100&lt;/code&gt;), it was 60.5 again. In the first profile (Mesa&#xA;ps3.223) &amp;ldquo;other kernel&amp;rdquo; was 21% of its CPU.&lt;/p&gt;</description>
			</item>
			<item>
				<title>BananaBread: OOM-killed, then the first memory patches (2026-10-16 to 10-17)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/bananabread/investigations/oom-and-the-memory-patches/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/bananabread/investigations/oom-and-the-memory-patches/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Symptom.&lt;/strong&gt; The research of 2026-10-16 found that the Cube 2 engine (and Red Eclipse) turns texture&#xA;compression off on Mesa: a one-line patch would make it a third S3TC game. On 2026-10-17 the game was&#xA;OOM-killed while loading cave without the VRAM swap (smoke&amp;rsquo;s default). With the swap it ran, holding&#xA;138 MB of VRAM and filling the swap. The first run with CPU skinning gave a 15 fps HUD median, including&#xA;a load of over 60 s. GPU skinning ran without a wedge, but at 11 fps and badly stuttering.&lt;/p&gt;</description>
			</item>
			<item>
				<title>BananaBread: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/bananabread/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/bananabread/technical/</guid>
				<description>&lt;p&gt;BananaBread is Debian&amp;rsquo;s &lt;code&gt;cube2&lt;/code&gt;, which is Sauerbraten&amp;rsquo;s engine, playing Debian&amp;rsquo;s &lt;code&gt;cube2-data&lt;/code&gt; (the&#xA;BananaBread content, 20 maps) completed by our licensed &lt;code&gt;sauerbraten-nonfree-data&lt;/code&gt;. It runs on our&#xA;&lt;a href=&#34;../../../engines/cube2/&#34;&gt;Cube 2 build&lt;/a&gt; with all its patches. The user&amp;rsquo;s recorded demo plays at&#xA;39.1 steady fps on the SSD root with 0.05 s of gameplay stalls, and at 45.1 with the world normals sent&#xA;as shorts (cube2 0011, +17%, not the default yet). It is the suite&amp;rsquo;s heaviest GLSL game: 117 MB of VRAM&#xA;and about 20-25 MB of RAM free at the lowest. Its played session (the &amp;ldquo;Cube2:Demo&amp;rdquo; launcher,&#xA;2026-10-24) had a 20 fps median and 22 s of stutter a minute.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Beneath a Steel Sky: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/beneath-a-steel-sky/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/beneath-a-steel-sky/technical/</guid>
				<description>&lt;h2 id=&#34;status&#34;&gt;Status&lt;/h2&gt;&#xA;&lt;p&gt;Untested: nobody has played a session of it on Walnut yet. Runs on ScummVM (&lt;a href=&#34;../../../engines/scummvm/&#34;&gt;the engine&lt;/a&gt;, Debian&amp;rsquo;s package).&lt;/p&gt;&#xA;&lt;p&gt;First run 2026-10-19 (batch 2026-10-19-ssdroot3-smoke-new, ScummVM 2026.1.0): the intro, the&#xA;sound running (20 underruns; the mic heard it 12 dB over the room), 85 MB peak RSS. Escape never reached&#xA;the window then (the recipe&amp;rsquo;s keys missed SDL&amp;rsquo;s window names until 2026-10-28), so the run stayed in the&#xA;intro. Not run since: its package wasn&amp;rsquo;t installed in the 2026-10-29 runs. The package is the CD version&#xA;with speech, all its languages in &lt;code&gt;sky.dsk&lt;/code&gt;; the launcher plays the English one.&lt;/p&gt;</description>
			</item>
			<item>
				<title>BomberClone: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/bomberclone/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/bomberclone/technical/</guid>
				<description>&lt;p&gt;BomberClone 0.11.9, an Atomic Bomberman clone (SDL 1.2 on sdl12-compat, up to 8 local or network players),&#xA;is Debian&amp;rsquo;s 0.11.9-9 with two patches of ours. Its played session (2026-10-26, about 5 minutes against bots)&#xA;had a 50 fps median, no crash, the picture right (4:3 with bars at the sides) and the sound effects and music&#xA;heard; the gamepad works in matches but not in the menus.&lt;/p&gt;&#xA;&lt;h2 id=&#34;packages-and-patches&#34;&gt;Packages and patches&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;bomberclone&lt;/code&gt;, &lt;code&gt;bomberclone-data&lt;/code&gt; (&lt;code&gt;0.11.9-9+ps3.N&lt;/code&gt;, &lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/tree/main/gamedb/games/bomberclone/packages/bomberclone&#34;&gt;packages/bomberclone&lt;/a&gt;),&#xA;replacing Debian&amp;rsquo;s; in no suite.&lt;/p&gt;</description>
			</item>
			<item>
				<title>BZFlag: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/bzflag/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/bzflag/technical/</guid>
				<description>&lt;h2 id=&#34;status&#34;&gt;Status&lt;/h2&gt;&#xA;&lt;p&gt;Debian&amp;rsquo;s &lt;code&gt;bzflag-client&lt;/code&gt;, &lt;code&gt;bzflag-data&lt;/code&gt; and &lt;code&gt;bzflag-server&lt;/code&gt; 2.4.30-4 from debian-ports, unchanged (about 20 MB&#xA;installed). It runs: smoke run on 2026-10-28 (kernel .874, Mesa ps3.924; runs&#xA;&lt;code&gt;ps3-bench-20261028T194448Z&lt;/code&gt; and &lt;code&gt;T194805Z&lt;/code&gt;): the client joins a bzfs on the console with three robot tanks,&#xA;fullscreen at 1920x1080 (&lt;code&gt;geom=1920x1080+0+0 fs=1&lt;/code&gt;), the robots fight each other, our tank spawns on &lt;code&gt;i&lt;/code&gt; and&#xA;drives. The Gallium HUD over the 90 s window: 59 fps steady, 1% low 30, one frame over 100 ms (243 ms, the&#xA;screenshot&amp;rsquo;s capture), 136% CPU (client, robots and server together), 65 MB RSS, 48 MB of VRAM, 23 MB of&#xA;GART. Sound ran (&lt;code&gt;RUNNING&lt;/code&gt;, 18 dropouts logged, 1 audible). Not checked yet: the sound by ear, the pad, a long&#xA;match.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Chromium B.S.U.: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/chromium-bsu/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/chromium-bsu/technical/</guid>
				<description>&lt;h2 id=&#34;status&#34;&gt;Status&lt;/h2&gt;&#xA;&lt;p&gt;Debian&amp;rsquo;s Chromium B.S.U. 0.9.16.1 (&lt;code&gt;chromium-bsu&lt;/code&gt;, &lt;code&gt;-data&lt;/code&gt;, 1 MB) runs. Smoke runs on 2026-10-28 (kernel .874, Mesa&#xA;ps3.924; the last one &lt;code&gt;ps3-bench-20261028T201110Z&lt;/code&gt;): Return on &amp;ldquo;new game&amp;rdquo; and a few shots and moves through XTEST&#xA;(the recipe&amp;rsquo;s &lt;code&gt;during()&lt;/code&gt;; the first runs never got their keys: xkeys.py looked windows up with XFetchName, which&#xA;misses sdl2-compat&amp;rsquo;s UTF-8 window names, fixed the same night), then the level plays: 55 fps steady on the Gallium&#xA;HUD (the game&amp;rsquo;s own counter says 53), 1% low 42, one frame over 100 ms (the capture), 37% CPU, 48 MB RSS, 31 MB of&#xA;VRAM; sound running, no dropouts logged. The webcam shows the same picture as the capture.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Day of the Tentacle: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/day-of-the-tentacle/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/day-of-the-tentacle/technical/</guid>
				<description>&lt;h2 id=&#34;status&#34;&gt;Status&lt;/h2&gt;&#xA;&lt;p&gt;Untested: published so that Walnut Games can set up its data; nobody has played a session of it on&#xA;Walnut yet. Runs on ScummVM (&lt;a href=&#34;../../../engines/scummvm/&#34;&gt;the engine&lt;/a&gt;, Debian&amp;rsquo;s package).&lt;/p&gt;&#xA;&lt;p&gt;Smoke run 2026-10-28 (&lt;code&gt;ps3-bench-20261028T224303Z-smoke-scummvm-dott&lt;/code&gt;, ScummVM 2026.4.0, recipe&#xA;scummvm variant &lt;code&gt;dott&lt;/code&gt;, from &lt;code&gt;~/Games/scummvm/DOTT&lt;/code&gt;): Escape twice skipped&#xA;the intro, then Bernard in the hotel lobby with the verbs and the inventory, colours right, fullscreen with&#xA;the 4:3 picture between bars; 90 MB peak RSS, the sound running with no audible dropouts.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Diablo (DevilutionX): technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/diablo/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/diablo/technical/</guid>
				<description>&lt;p&gt;Also known as: DevilutionX (the engine); Hellfire (the expansion, also played by DevilutionX).&lt;/p&gt;&#xA;&lt;h2 id=&#34;status&#34;&gt;Status&lt;/h2&gt;&#xA;&lt;p&gt;DevilutionX 1.5.5 built by us (&lt;code&gt;devilutionx&lt;/code&gt; &lt;code&gt;1.5.5-1+ps3.N&lt;/code&gt;, built from&#xA;&lt;code&gt;gamedb/games/diablo/packages/devilutionx/&lt;/code&gt;: DevilutionX is under the Sustainable Use License 1.0, non-commercial&#xA;and not DFSG-free; the user accepted that on 2026-10-29 (&amp;ldquo;I&amp;rsquo;m not using it commercially&amp;rdquo;), so it is public in the&#xA;testing suite, marked non-free in its description, README.Debian and the GameDB page, Section still &lt;code&gt;games&lt;/code&gt;). Two patches:&#xA;0001 opens the audio device in the host byte order (&lt;code&gt;AUDIO_S16SYS&lt;/code&gt;; &lt;code&gt;AUDIO_S16&lt;/code&gt; is little-endian, so the PPE&#xA;swapped every sample twice); 0002 fixes the see-through mouse cursor (below). Upstream&amp;rsquo;s defaults are already&#xA;console-like: fullscreen at the screen&amp;rsquo;s mode (&lt;code&gt;SDL_WINDOW_FULLSCREEN_DESKTOP&lt;/code&gt;, the picture widened to 16:9 and&#xA;scaled up), SDL game controllers on. The package links game-data-packager&amp;rsquo;s &lt;code&gt;diablo-data&lt;/code&gt; files&#xA;(&lt;code&gt;/usr/share/games/diablo/DIABDAT.MPQ&lt;/code&gt;, Hellfire&amp;rsquo;s &lt;code&gt;hellfire.mpq&lt;/code&gt;, &lt;code&gt;hfmonk.mpq&lt;/code&gt;, &lt;code&gt;hfmusic.mpq&lt;/code&gt;, &lt;code&gt;hfvoice.mpq&lt;/code&gt;)&#xA;into &lt;code&gt;/usr/share/diasurgical/devilutionx/&lt;/code&gt;, a folder DevilutionX searches (it never looks in /usr/share/games).&#xA;The player&amp;rsquo;s 1.09 DIABDAT.MPQ (517,501,242 bytes) is not the GOG file GDP knew (517,501,282); gdp patch 0019&#xA;accepts both for &lt;code&gt;diablo-data&lt;/code&gt; (tags &lt;code&gt;?gog&lt;/code&gt; and &lt;code&gt;?1.09&lt;/code&gt;). Proven on the PC (2026-10-30): &lt;code&gt;game-data-packager diablo -p diablo-data&lt;/code&gt; on a folder with the file builds the deb, and the helper&amp;rsquo;s manifest check takes its data&#xA;stream (release 1.09); the import itself on the PS3 is in TESTS.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Doom II: Hell on Earth: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/doom2/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/doom2/technical/</guid>
				<description>&lt;h2 id=&#34;status&#34;&gt;Status&lt;/h2&gt;&#xA;&lt;p&gt;Untested on the PS3: published so that Walnut Games can set up its data; nobody has played it on Walnut&#xA;yet. Its launchers start DSDA-Doom 0.30.0 (Debian&amp;rsquo;s package with Walnut&amp;rsquo;s patches, &lt;a href=&#34;../../dsda-doom/technical/&#34;&gt;dsda-doom&lt;/a&gt;), which plays&#xA;Freedoom 2 at about 56 fps on its OpenGL renderer.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Data&lt;/strong&gt;: game-data-packager&amp;rsquo;s &lt;code&gt;doom2-wad&lt;/code&gt; (build.toml &lt;code&gt;[data_setup]&lt;/code&gt;), made from the&#xA;player&amp;rsquo;s own copy; the WADs go to &lt;code&gt;/usr/share/games/doom/&lt;/code&gt;, where Freedoom&amp;rsquo;s are.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Launchers&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/tree/main/gamedb/games/doom2/desktop/launchers&#34;&gt;desktop/launchers&lt;/a&gt;), one per IWAD, &lt;code&gt;NoDisplay=true&lt;/code&gt; with&#xA;&lt;code&gt;X-Walnut-Requires=&lt;/code&gt; the WAD (shown once the menu rule for it exists, PLAN 5.10):&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;dsda-doom -iwad /usr/share/games/doom/doom2.wad -vidmode gl -width 1920 -height 1080 -fullscreen&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>Doom: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/doom/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/doom/technical/</guid>
				<description>&lt;h2 id=&#34;status&#34;&gt;Status&lt;/h2&gt;&#xA;&lt;p&gt;Played once on the PS3 (2026-11-02, 936 s of play from The Ultimate Doom&amp;rsquo;s DOOM.WAD: median 59 fps, 1% low 40,&#xA;no crash, no audible dropouts, nothing wrong in the picture; Platinum 95, provisional under an hour of play). Its launchers start DSDA-Doom 0.30.0 (Debian&amp;rsquo;s package with Walnut&amp;rsquo;s patches, &lt;a href=&#34;../../dsda-doom/technical/&#34;&gt;dsda-doom&lt;/a&gt;), which also plays&#xA;Freedoom 2 at about 56 fps on its OpenGL renderer.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Data&lt;/strong&gt;: game-data-packager&amp;rsquo;s &lt;code&gt;doom-wad&lt;/code&gt; (build.toml &lt;code&gt;[data_setup]&lt;/code&gt;), made from the&#xA;player&amp;rsquo;s own copy; the WADs go to &lt;code&gt;/usr/share/games/doom/&lt;/code&gt;, where Freedoom&amp;rsquo;s are.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Launchers&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/tree/main/gamedb/games/doom/desktop/launchers&#34;&gt;desktop/launchers&lt;/a&gt;), one per IWAD, &lt;code&gt;NoDisplay=true&lt;/code&gt; with&#xA;&lt;code&gt;X-Walnut-Requires=&lt;/code&gt; the WAD (shown once the menu rule for it exists, PLAN 5.10):&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;dsda-doom -iwad /usr/share/games/doom/doom.wad -vidmode gl -width 1920 -height 1080 -fullscreen&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>Drascula: The Vampire Strikes Back: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/drascula/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/drascula/technical/</guid>
				<description>&lt;h2 id=&#34;status&#34;&gt;Status&lt;/h2&gt;&#xA;&lt;p&gt;Untested: nobody has played a session of it on Walnut yet. Runs on ScummVM (&lt;a href=&#34;../../../engines/scummvm/&#34;&gt;the engine&lt;/a&gt;, Debian&amp;rsquo;s package).&lt;/p&gt;&#xA;&lt;p&gt;Smoke run 2026-10-20 (&lt;code&gt;ps3-bench-20261020T093104Z-smoke-scummvm-drascula&lt;/code&gt;, ScummVM 2026.1.0, the data&#xA;package of then): &amp;ldquo;Couldn&amp;rsquo;t identify game &amp;lsquo;drascula&amp;rsquo; for the engine &amp;lsquo;drascula&amp;rsquo;&amp;rdquo;, so the game didn&amp;rsquo;t start.&#xA;On the PC (2026-10-30, a Debian container, ScummVM 2026.1.0 with &lt;code&gt;drascula&lt;/code&gt; 1.0+ds4-4) the menu entry&amp;rsquo;s&#xA;command says &amp;ldquo;Running Drascula: The Vampire Strikes Back (DOS/English)&amp;rdquo;: to be seen again on the PS3.&#xA;The music is&#xA;&lt;code&gt;drascula-music&lt;/code&gt;&amp;rsquo;s Ogg Vorbis tracks in &lt;code&gt;/usr/share/scummvm/drascula/audio/&lt;/code&gt;. The other languages are&#xA;packages of their own (&lt;code&gt;drascula-spanish&lt;/code&gt;, &amp;hellip;).&lt;/p&gt;</description>
			</item>
			<item>
				<title>dsda-doom: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/dsda-doom/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/dsda-doom/technical/</guid>
				<description>&lt;p&gt;dsda-doom 0.30.0 (the PrBoom+ successor, with the same GL renderer) plays Freedoom&amp;rsquo;s DEMO1 on its GL&#xA;renderer at 55.9 steady fps with no stalls, after big-endian and GL fixes of ours. Its OpenGL played&#xA;session (2026-10-25) had a 58 fps median and was smooth; the software launcher 44. What is left is the&#xA;MIDI music, which still chops: FluidSynth&amp;rsquo;s voice DSP on the SPEs halved the underruns, but hundreds a&#xA;minute remain.&lt;/p&gt;</description>
			</item>
			<item>
				<title>dsda-doom: the MIDI music chops, and FluidSynth&#39;s voices on the SPEs (2026-10-17 onward)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/dsda-doom/investigations/music-on-the-spes/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/dsda-doom/investigations/music-on-the-spes/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Symptom.&lt;/strong&gt; With the music on, dsda-doom&amp;rsquo;s sound chopped: 1095-1335 ALSA underruns in a 60 s &lt;code&gt;play&lt;/code&gt; run,&#xA;the music audibly breaking up.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Evidence.&lt;/strong&gt; FluidSynth took 48% of dsda-doom&amp;rsquo;s CPU, about 40% of a PPE thread, interpolation alone 31%&#xA;(&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/docs/SPU-AUDIO.md#results-on-the-ps3&#34;&gt;SPU-AUDIO.md, &amp;ldquo;Results on the PS3&amp;rdquo;&lt;/a&gt;). Earlier&#xA;sound-settings tries (&lt;a href=&#34;../../test-runs/#batch-2026-10-17-dsda-doom-sound&#34;&gt;batch 2026-10-17-dsda-doom-sound&lt;/a&gt;, Mesa ps3.225): &lt;code&gt;tuned&lt;/code&gt; 340 underruns and 46&#xA;s of CPU in one run, OPL 1312 in its first.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Run (&lt;code&gt;play&lt;/code&gt;, 60 s, GL)&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;CPU a minute&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Underruns&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Batch&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;no music&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;about 29 s&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;18&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;a href=&#34;../../test-runs/#batch-2026-10-17-fluidsynth-309&#34;&gt;batch 2026-10-17-fluidsynth-309&lt;/a&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;stock FluidSynth on the PPE&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;44.5-53 s&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;1095-1335&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;a href=&#34;../../test-runs/#batch-2026-10-17-fluidsynth-spu-dsp&#34;&gt;batch 2026-10-17-fluidsynth-spu-dsp&lt;/a&gt;, &lt;a href=&#34;../../test-runs/#batch-2026-10-17-speq-367-deadline-pool&#34;&gt;batch 2026-10-17-speq-367-deadline-pool&lt;/a&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;version 1 on the SPEs (libspeq 0.288)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;31.7 s&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;1097&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;a href=&#34;../../test-runs/#batch-2026-10-17-fluidsynth-spu-dsp&#34;&gt;batch 2026-10-17-fluidsynth-spu-dsp&lt;/a&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;version 2 (libfluidsynth3 +ps3.309, libspeq 0.318)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;31.8 s&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;588 and 709 (stock 1231 and 1331 the same session)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;a href=&#34;../../test-runs/#batch-2026-10-17-fluidsynth-309&#34;&gt;batch 2026-10-17-fluidsynth-309&lt;/a&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;version 2 on the shared deadline pool (libspeq 0.367)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;26.5 s&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;465 (PPE 1095)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;a href=&#34;../../test-runs/#batch-2026-10-17-speq-367-deadline-pool&#34;&gt;batch 2026-10-17-speq-367-deadline-pool&lt;/a&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;The user listened to version 2: &amp;ldquo;night and day, spu makes a huge difference&amp;rdquo;; the glitches that remain&#xA;line up with the game&amp;rsquo;s own frame stalls. The gameplay profile of 2026-10-19 still puts the synthesis at&#xA;about 30% of the samples. In the played sessions of 2026-10-25 the OpenGL launcher counted 7.5 audible&#xA;dropouts a minute (from 10322 underruns), the software launcher 35.9.&lt;/p&gt;</description>
			</item>
			<item>
				<title>dsda-doom: wrong colours, silent sound lumps, black GL textures (2026-10-16/17)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/dsda-doom/investigations/big-endian-and-gl-fixes/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/dsda-doom/investigations/big-endian-and-gl-fixes/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Symptom.&lt;/strong&gt; The first smoke at 1920x1080 in software ran at about 5 fps; at 960x540 the frame came out&#xA;in wrong colours, green-tinted through SDL&amp;rsquo;s GL renderer (&lt;a href=&#34;../../test-runs/#batch-2026-10-16-dsda-doom-software&#34;&gt;batch 2026-10-16-dsda-doom-software&lt;/a&gt;).&#xA;The engine&amp;rsquo;s own sound lumps didn&amp;rsquo;t play right, screenshots had the wrong byte order, and the GL renderer&#xA;drew walls, sprites and menus missing or black.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Cause.&lt;/strong&gt; Three big-endian assumptions and one missing GL feature:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;dsda-doom.wad&amp;rsquo;s DMX sound lumps are little-endian and were read in host order;&lt;/li&gt;&#xA;&lt;li&gt;the software renderer&amp;rsquo;s SDL buffer wasn&amp;rsquo;t in the texture&amp;rsquo;s own format, so the pixel words were read&#xA;with their bytes the wrong way round; screenshots likewise;&lt;/li&gt;&#xA;&lt;li&gt;the GL renderer uploads every indexed texture as GL_RG, and nv30 has no ARB_texture_rg.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Fix.&lt;/strong&gt; 0001 reads the DMX lumps little-endian; 0003 puts the software renderer&amp;rsquo;s SDL buffer in the&#xA;texture&amp;rsquo;s own format (+ps3.231, &lt;a href=&#34;../../test-runs/#batch-2026-10-16-dsda-doom-colours&#34;&gt;batch 2026-10-16-dsda-doom-colours&lt;/a&gt;); 0004 writes screenshots as&#xA;RGB24; 0002 uploads the indexed textures as GL_LUMINANCE_ALPHA (+ps3.247: the GL renderer runs, 48.8 fps&#xA;on the GL timedemo, &lt;a href=&#34;../../test-runs/#batch-2026-10-17-dsda-doom-gl-music&#34;&gt;batch 2026-10-17-dsda-doom-gl-music&lt;/a&gt;). The software renderer then gave 33 fps&#xA;with the demo unfinished on Mesa ps3.246 and 38 finished on ps3.262.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Extreme Tux Racer: a 4 ms sound buffer (2026-10-24)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/etr/investigations/sound-buffer/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/etr/investigations/sound-buffer/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Symptom.&lt;/strong&gt; The played session of 2026-10-24 logged 608 xruns, 7.5 audible-dropout marks a minute, which&#xA;the player did not hear.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Cause.&lt;/strong&gt; ETR plays through SFML 3.1 (miniaudio), which opens the ALSA device with a 64-frame period and 3&#xA;periods: a 4 ms buffer, which the PPE misses whenever a frame runs long. ETR cannot change it: SFML does not&#xA;expose the setting.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Fix.&lt;/strong&gt; Our &lt;code&gt;libsfml&lt;/code&gt; (packages/patched/audio/libsfml/, 0001) opens it with a 1024-frame period: about 64&#xA;ms of buffer at 48 kHz, 24 KB, a sound effect or the music starting at most 23 ms late in the mix.&#xA;&lt;code&gt;SFML_AUDIO_PERIOD_FRAMES=&amp;lt;32..16384&amp;gt;&lt;/code&gt; overrides it (64 is upstream&amp;rsquo;s). It serves every SFML game. Not yet&#xA;tried on the PS3: the next played session should show the xrun count.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Extreme Tux Racer: game-side batching (2026-10-17)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/etr/investigations/game-side-batching/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/etr/investigations/game-side-batching/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Symptom.&lt;/strong&gt; After its first runs (&lt;a href=&#34;../../test-runs/#batch-2026-10-16-etr-armagetron-smokes&#34;&gt;batch 2026-10-16-etr-armagetron-smokes&lt;/a&gt;), ETR went from 46 fps&#xA;HUD on Mesa ps3.246 to 53 on ps3.262 (+15%) and 52 on ps3.299: just short of the 60 fps target, held back&#xA;by the PPE.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Evidence.&lt;/strong&gt; A frame made 19,400 GL calls and 697 draws: texture binds repeated, the terrain walked and&#xA;drawn in immediate mode, Tux&amp;rsquo;s spheres rebuilt, every tree and item drawn on its own, each snow particle&#xA;its own draw.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Extreme Tux Racer: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/etr/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/etr/technical/</guid>
				<description>&lt;p&gt;Extreme Tux Racer 0.8.4 runs with the right picture and sound at about 59 fps in the benchmark, not a&#xA;vsync cap (59 uncapped too), after our patches cut a frame from 19,400 GL calls to 850. Its played session&#xA;(2026-10-24, with the controller patch) had a 58 fps median, the controller fully usable, and 608 sound&#xA;xruns the player didn&amp;rsquo;t hear, which the new SFML audio period is meant to remove.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Final Doom: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/final-doom/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/final-doom/technical/</guid>
				<description>&lt;h2 id=&#34;status&#34;&gt;Status&lt;/h2&gt;&#xA;&lt;p&gt;Untested on the PS3: published so that Walnut Games can set up its data; nobody has played it on Walnut&#xA;yet. Its launchers start DSDA-Doom 0.30.0 (Debian&amp;rsquo;s package with Walnut&amp;rsquo;s patches, &lt;a href=&#34;../../dsda-doom/technical/&#34;&gt;dsda-doom&lt;/a&gt;), which plays&#xA;Freedoom 2 at about 56 fps on its OpenGL renderer.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Data&lt;/strong&gt;: game-data-packager&amp;rsquo;s &lt;code&gt;plutonia-wad&lt;/code&gt;, &lt;code&gt;tnt-wad&lt;/code&gt; (build.toml &lt;code&gt;[data_setup]&lt;/code&gt;), made from the&#xA;player&amp;rsquo;s own copy; the WADs go to &lt;code&gt;/usr/share/games/doom/&lt;/code&gt;, where Freedoom&amp;rsquo;s are.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Launchers&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/tree/main/gamedb/games/final-doom/desktop/launchers&#34;&gt;desktop/launchers&lt;/a&gt;), one per IWAD, &lt;code&gt;NoDisplay=true&lt;/code&gt; with&#xA;&lt;code&gt;X-Walnut-Requires=&lt;/code&gt; the WAD (shown once the menu rule for it exists, PLAN 5.10):&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;dsda-doom -iwad /usr/share/games/doom/tnt.wad -file /usr/share/games/doom/tnt31.wad -vidmode gl -width 1920 -height 1080 -fullscreen&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;dsda-doom -iwad /usr/share/games/doom/plutonia.wad -vidmode gl -width 1920 -height 1080 -fullscreen&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>Flight of the Amazon Queen: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/flight-of-the-amazon-queen/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/flight-of-the-amazon-queen/technical/</guid>
				<description>&lt;h2 id=&#34;status&#34;&gt;Status&lt;/h2&gt;&#xA;&lt;p&gt;Untested: nobody has played a session of it on Walnut yet. Runs on ScummVM (&lt;a href=&#34;../../../engines/scummvm/&#34;&gt;the engine&lt;/a&gt;, Debian&amp;rsquo;s package).&lt;/p&gt;&#xA;&lt;p&gt;Smoke run 2026-10-20 (&lt;code&gt;ps3-bench-20261020T092844Z-smoke-scummvm-queen&lt;/code&gt;, ScummVM 2026.1.0): &amp;ldquo;Running&#xA;Flight of the Amazon Queen (CD/DOS/English)&amp;rdquo;, the sound running; no screenshots in that run. The package is&#xA;the CD version with speech (&lt;code&gt;queen.1c&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-it-is-set-up&#34;&gt;How it is set up&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Data&lt;/strong&gt;: Debian&amp;rsquo;s &lt;code&gt;flight-of-the-amazon-queen&lt;/code&gt;, installed with ScummVM by Walnut Games, in &lt;code&gt;/usr/share/scummvm/flight-of-the-amazon-queen&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Launcher&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/tree/main/gamedb/games/flight-of-the-amazon-queen/desktop/launchers&#34;&gt;desktop/launchers&lt;/a&gt;): &lt;code&gt;scummvm -c ~/.config/scummvm/walnut/queen.ini -i /usr/share/ps3-games/scummvm/queen.ini -p /usr/share/scummvm/flight-of-the-amazon-queen queen&lt;/code&gt; through ps3-game, shown once the data&#xA;is installed (&lt;code&gt;X-Walnut-Requires=&lt;/code&gt;); the package&amp;rsquo;s own menu entry is diverted&#xA;(&lt;a href=&#34;../../../engines/scummvm/&#34;&gt;the engine&amp;rsquo;s notes&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Settings&lt;/strong&gt;: the initial config &lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/gamedb/games/flight-of-the-amazon-queen/desktop/files/usr/share/ps3-games/scummvm/queen.ini&#34;&gt;queen.ini&lt;/a&gt;; the&#xA;player&amp;rsquo;s settings then live in &lt;code&gt;~/.config/scummvm/walnut/queen.ini&lt;/code&gt;, the saves in&#xA;&lt;code&gt;~/.local/share/scummvm/saves/queen.s*&lt;/code&gt; (set aside by a played session: &lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/gamedb/games/flight-of-the-amazon-queen/rating/test.toml&#34;&gt;rating/test.toml&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>Freed map blocks kept in malloc&#39;s arenas (2026-10-18)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/luanti/investigations/malloc-trim/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/luanti/investigations/malloc-trim/</guid>
				<description>&lt;p&gt;Moved on 2026-10-26 from docs/MEMORY.md (&amp;ldquo;Growth over the window&amp;rdquo;, &amp;ldquo;Malloc arenas&amp;rdquo;, &amp;ldquo;Findings in the&#xA;games&amp;rsquo; code&amp;rdquo; and the Luanti rows of &amp;ldquo;Cuts, ranked&amp;rdquo;). The malloc presets and ps3-malloctrim.so, which&#xA;any game can use, stay in &lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/docs/MEMORY.md#the-malloc-presets-and-ps3-malloctrim&#34;&gt;docs/MEMORY.md&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;symptom&#34;&gt;Symptom&lt;/h2&gt;&#xA;&lt;p&gt;In the MEM=1 batch of 2026-10-18 (00:40-01:40 UTC, Mesa ps3.299, one flight of three minutes) Luanti&#xA;was the biggest game: Rss 102 MB + 47.1 MB swapped, heap 74.5 MB resident (28.5 swapped), and 22.9 MB&#xA;free inside malloc&amp;rsquo;s arenas at the middle snapshot, in 14 arenas. Of the swap, 28.5 MB were heap, 11.0&#xA;anonymous, 3.6 libraries, 2.7 stacks (16 threads: 1.2 MB + 2.7 swapped), 1.2 Mesa.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Garbage textures and a crash in Mesa after GART ran out (2026-10-26)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/supertuxkart/investigations/fence-segfault/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/supertuxkart/investigations/fence-segfault/</guid>
				<description>&lt;p&gt;The driver mechanism of the fix, Mesa 0049, is in&#xA;&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/docs/DRIVER.md#the-mesa-side&#34;&gt;docs/DRIVER.md&lt;/a&gt;. It follows the out-of-GART paths Mesa 0047&#xA;and 0048 closed for Sauerbraten (&lt;a href=&#34;../../../sauerbraten/investigations/online-crashes/&#34;&gt;online-crashes&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;h2 id=&#34;symptom&#34;&gt;Symptom&lt;/h2&gt;&#xA;&lt;p&gt;The first played session (2026-10-25, Scrap) ran at 7 fps on the old default graphics, and every&#xA;texture was garbage after a restart. The first rules-2.0 session (2026-10-26, package ps3.833, Mesa&#xA;ps3.827) ended in a crash on Ravenbridge Mansion, with a 21.7 s freeze in play before it, and objects&#xA;popping in and out on that track (the player, side by side with the PC); the last shot is black. The&#xA;segfault came while loading the track&amp;rsquo;s sky, after 414 &amp;ldquo;out of GART&amp;rdquo; lines in dmesg.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Heretic: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/heretic/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/heretic/technical/</guid>
				<description>&lt;h2 id=&#34;status&#34;&gt;Status&lt;/h2&gt;&#xA;&lt;p&gt;Untested on the PS3: published so that Walnut Games can set up its data; nobody has played it on Walnut&#xA;yet. Its launcher starts DSDA-Doom 0.30.0 (Debian&amp;rsquo;s package with Walnut&amp;rsquo;s patches, &lt;a href=&#34;../../dsda-doom/technical/&#34;&gt;dsda-doom&lt;/a&gt;),&#xA;which plays Heretic and Hexen too (started as &lt;code&gt;dsda-heretic&lt;/code&gt;, Debian&amp;rsquo;s link to it); it plays Freedoom 2 at about 56 fps&#xA;on its OpenGL renderer.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Data&lt;/strong&gt;: game-data-packager&amp;rsquo;s &lt;code&gt;heretic-wad&lt;/code&gt; (build.toml &lt;code&gt;[data_setup]&lt;/code&gt;), made from the player&amp;rsquo;s own copy, in&#xA;&lt;code&gt;/usr/share/games/doom/heretic.wad&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Launcher&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/tree/main/gamedb/games/heretic/desktop/launchers&#34;&gt;desktop/launchers&lt;/a&gt;), &lt;code&gt;NoDisplay=true&lt;/code&gt; with &lt;code&gt;X-Walnut-Requires=&lt;/code&gt; the&#xA;WAD (shown once the menu rule for it exists, PLAN 5.10):&#xA;&lt;code&gt;dsda-heretic -iwad /usr/share/games/doom/heretic.wad -vidmode gl -width 1920 -height 1080 -fullscreen&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;engine-options&#34;&gt;Engine options&lt;/h2&gt;&#xA;&lt;p&gt;DSDA-Doom is the one Walnut ships and patches; the research&amp;rsquo;s pick for vanilla exactness is Chocolate&#xA;Doom (a draft here). The options:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Heroes II: the mid-game &#34;hang&#34; was a message box waiting for OKAY (2026-11-02)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/heroes-of-might-and-magic-2/investigations/mid-game-hang/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/heroes-of-might-and-magic-2/investigations/mid-game-hang/</guid>
				<description>&lt;h2 id=&#34;symptom&#34;&gt;Symptom&lt;/h2&gt;&#xA;&lt;p&gt;On the PS3 (fheroes2 1.1.17+dfsg-1+ps3.1082, SDL2 through our sdl2-compat on SDL3 ps3.1090, Mesa&#xA;ps3.1219), the game stopped responding in the middle of a turn. The picture stayed the same for 3 s and&#xA;longer: the adventure map, the hero selected, a grey strip on the left of the map view. The process used&#xA;11-27% CPU and the GPU logged no error. A gdb backtrace was taken, then the game was killed with SIGABRT&#xA;for a core dump. The player said it had played fine until then.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Heroes of Might and Magic II (fheroes2): technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/heroes-of-might-and-magic-2/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/heroes-of-might-and-magic-2/technical/</guid>
				<description>&lt;h2 id=&#34;status&#34;&gt;Status&lt;/h2&gt;&#xA;&lt;p&gt;Our &lt;code&gt;fheroes2&lt;/code&gt; 1.1.17+dfsg-1+ps3.N (&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/tree/main/gamedb/games/heroes-of-might-and-magic-2/packages/fheroes2&#34;&gt;packages/fheroes2&lt;/a&gt;): Debian&amp;rsquo;s contrib source built for&#xA;ppc64 unchanged (debian-ports builds nothing from contrib). Built on 2026-10-29. The&#xA;engine reads the player&amp;rsquo;s Heroes II data from &lt;code&gt;~/.local/share/fheroes2&lt;/code&gt; or &lt;code&gt;/usr/share/games/fheroes2&lt;/code&gt; (its&#xA;&lt;code&gt;DATA/&lt;/code&gt; and &lt;code&gt;MAPS/&lt;/code&gt; folders: HEROES2.AGG and the maps from the original game, GOG&amp;rsquo;s install or the demo).&lt;/p&gt;&#xA;&lt;p&gt;Smoke runs on 2026-10-29 (kernel .874, Mesa ps3.924, the VRAM swap on; the dev build installed by &lt;code&gt;dpkg -i&lt;/code&gt;) with&#xA;the player&amp;rsquo;s own Heroes of Might and Magic II Gold: &lt;code&gt;DATA/&lt;/code&gt; and &lt;code&gt;MAPS/&lt;/code&gt; (76 MB; &lt;code&gt;HEROES2.AGG&lt;/code&gt; sha256&#xA;&lt;code&gt;7a11c86d...04315d&lt;/code&gt;, &lt;code&gt;HEROES2X.AGG&lt;/code&gt; &lt;code&gt;1f3edad1...f4d41&lt;/code&gt;) in &lt;code&gt;~/.local/share/fheroes2&lt;/code&gt;. The recipe&#xA;(&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/gamedb/games/heroes-of-might-and-magic-2/benchmark/recipe.sh&#34;&gt;benchmark/recipe.sh&lt;/a&gt;) writes a configuration with fullscreen 1920x1080, the first-run&#xA;dialogs and the intro off, then clicks by XTEST: New Game, Standard Game, Okay on the first map (&amp;ldquo;4&#xA;Dimensions&amp;rdquo;). The main menu (the 4:3 picture in the middle, the sides in the game&amp;rsquo;s own brown), the&#xA;scenario dialog and the adventure map at the full 1920x1080 (the map, the radar, the heroes and castles&#xA;panel, the day, the scenario&amp;rsquo;s story) are drawn right, colours included (&lt;code&gt;ps3-bench-20261029T022739Z-smoke-heroes-of-might-and-magic-2-base&lt;/code&gt;, xwd; webcam). 88 MB peak RSS,&#xA;sound running with 9 audible dropouts. The Gallium HUD&amp;rsquo;s few fps mean little: the game presents only when&#xA;something changes. Not checked: a turn, a battle, the pad.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Hexen: Beyond Heretic: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/hexen/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/hexen/technical/</guid>
				<description>&lt;h2 id=&#34;status&#34;&gt;Status&lt;/h2&gt;&#xA;&lt;p&gt;Data import tested, play not: GOG&amp;rsquo;s installer imported on the PS3 (2026-10-27, 85 s) and DSDA-Doom reached&#xA;the title and played demo1 with the launcher&amp;rsquo;s arguments; nobody has played it on Walnut yet. Its launcher starts DSDA-Doom 0.30.0 (Debian&amp;rsquo;s package with Walnut&amp;rsquo;s patches, &lt;a href=&#34;../../dsda-doom/technical/&#34;&gt;dsda-doom&lt;/a&gt;),&#xA;which plays Heretic and Hexen too (started as &lt;code&gt;dsda-hexen&lt;/code&gt;, Debian&amp;rsquo;s link to it); it plays Freedoom 2 at about 56 fps&#xA;on its OpenGL renderer.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Data&lt;/strong&gt;: game-data-packager&amp;rsquo;s &lt;code&gt;hexen-wad&lt;/code&gt; (build.toml &lt;code&gt;[data_setup]&lt;/code&gt;), made from the player&amp;rsquo;s own copy, in&#xA;&lt;code&gt;/usr/share/games/doom/hexen.wad&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Launcher&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/tree/main/gamedb/games/hexen/desktop/launchers&#34;&gt;desktop/launchers&lt;/a&gt;), &lt;code&gt;NoDisplay=true&lt;/code&gt; with &lt;code&gt;X-Walnut-Requires=&lt;/code&gt; the&#xA;WAD (shown once the menu rule for it exists, PLAN 5.10):&#xA;&lt;code&gt;dsda-hexen -iwad /usr/share/games/doom/hexen.wad -vidmode gl -width 1920 -height 1080 -fullscreen&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Deathkings of the Dark Citadel&lt;/strong&gt;: gdp&amp;rsquo;s &lt;code&gt;hexen-deathkings-wad&lt;/code&gt; (HEXDD.WAD 1.0 or 1.1, in&#xA;&lt;code&gt;/usr/share/games/doom/hexdd.wad&lt;/code&gt;) is optional data (edition &lt;code&gt;expansion&lt;/code&gt;); its own launcher adds&#xA;&lt;code&gt;-file /usr/share/games/doom/hexdd.wad&lt;/code&gt; and needs that file. Not tried: none of the user&amp;rsquo;s copies has&#xA;HEXDD.WAD.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;which-copies-work&#34;&gt;Which copies work&lt;/h2&gt;&#xA;&lt;p&gt;game-data-packager wants HEXEN.WAD 1.1 (20083672 bytes, md5 abb033ca&amp;hellip;453f); DSDA-Doom 0.30 plays nothing&#xA;else.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Indiana Jones and the Fate of Atlantis: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/indiana-jones-and-the-fate-of-atlantis/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/indiana-jones-and-the-fate-of-atlantis/technical/</guid>
				<description>&lt;h2 id=&#34;status&#34;&gt;Status&lt;/h2&gt;&#xA;&lt;p&gt;Untested: published so that Walnut Games can set up its data; nobody has played a session of it on&#xA;Walnut yet. Runs on ScummVM (&lt;a href=&#34;../../../engines/scummvm/&#34;&gt;the engine&lt;/a&gt;, Debian&amp;rsquo;s package).&lt;/p&gt;&#xA;&lt;p&gt;Smoke run 2026-10-29 (&lt;code&gt;ps3-bench-20261029T051807Z-smoke-scummvm-atlantis&lt;/code&gt;, variant &lt;code&gt;atlantis&lt;/code&gt;): Indy in&#xA;the college&amp;rsquo;s store room with his first line, colours right. The run before it stopped at once with&#xA;&amp;ldquo;Unrecognized game &amp;lsquo;atlantis&amp;rsquo;&amp;rdquo;: the bare id matches another engine&amp;rsquo;s game too, so the recipe used&#xA;&lt;code&gt;--auto-detect&lt;/code&gt;; the menu entries name the target in their own config instead.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Loom: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/loom/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/loom/technical/</guid>
				<description>&lt;h2 id=&#34;status&#34;&gt;Status&lt;/h2&gt;&#xA;&lt;p&gt;Untested: published so that Walnut Games can set up its data; nobody has played a session of it on&#xA;Walnut yet. Runs on ScummVM (&lt;a href=&#34;../../../engines/scummvm/&#34;&gt;the engine&lt;/a&gt;, Debian&amp;rsquo;s package).&lt;/p&gt;&#xA;&lt;p&gt;Smoke run 2026-10-29 (&lt;code&gt;ps3-bench-20261029T051548Z-smoke-scummvm-loom&lt;/code&gt;, variant &lt;code&gt;loom&lt;/code&gt;): the difficulty&#xA;choice (Estándar, Práctica, Experto), drawn right.&lt;/p&gt;&#xA;&lt;p&gt;The player&amp;rsquo;s copy is the Spanish EGA release (ScummVM: &amp;ldquo;loom&amp;rdquo;, EGA, ES; &lt;code&gt;00.LFL&lt;/code&gt; md5&#xA;&lt;code&gt;2a208ffb...a6e1&lt;/code&gt;). Debian&amp;rsquo;s game-data-packager doesn&amp;rsquo;t know it; ours does (&lt;code&gt;loom-ega-es-data&lt;/code&gt;, patch&#xA;0017: 74 room files, 28 of them the other EGA releases&amp;rsquo; own). The VGA talkie (&lt;code&gt;loom-en-data&lt;/code&gt;) can&amp;rsquo;t be&#xA;imported yet: game-data-packager rips its music from the CD&amp;rsquo;s one audio track, which the import&amp;rsquo;s&#xA;manifest doesn&amp;rsquo;t describe (&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/gamedb/engines/scummvm/todo.toml&#34;&gt;the engine&amp;rsquo;s todo&lt;/a&gt;).&lt;/p&gt;</description>
			</item>
			<item>
				<title>Luanti: LuaJIT&#39;s state allocated where it refuses it (2026-10-16/17)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/luanti/investigations/luajit-state-allocation/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/luanti/investigations/luajit-state-allocation/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Symptom.&lt;/strong&gt; Debian has no ppc64 Luanti (its control lists only LuaJIT architectures; s390x builds&#xA;5.15.2 and passes the unit tests, a 2025 ppc64 attempt at 5.10.0 aborted in TestSAO). Our build started,&#xA;but &lt;code&gt;luaL_newstate()&lt;/code&gt; failed about 40% of the time, and with it the game.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Cause.&lt;/strong&gt; Debian&amp;rsquo;s LuaJIT on ppc64 big-endian allocated its state between 2 and 4 GB, which LuaJIT itself&#xA;then refuses: it checks that the state lies in the low 2 GB.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Luanti: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/luanti/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/luanti/technical/</guid>
				<description>&lt;p&gt;Luanti 5.15.2 with LuaJIT and Minetest Game runs on our own build, since Debian builds none for ppc64.&#xA;At the package&amp;rsquo;s viewing range of 120 it flies the bench path at about 38 steady fps with 1-2 s of&#xA;stalls in the 135 s window (since luanti 0010 and 0011, 2026-10-29: before them 20 fps and 30-36 s);&#xA;at the recipe&amp;rsquo;s 60 at about 46 fps. It keeps only 11-15 MB of RAM free: the suite&amp;rsquo;s most memory-hungry&#xA;engine on the CPU side. Its played session (2026-10-24, before 0010 and 0011) had a 35 fps median with&#xA;25 s of stutter a minute and frames up to 4.3 s, as new map blocks were generated and meshed.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Luanti: the memory variants, the interfered round and its clean repeat (2026-10-17/18)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/luanti/investigations/memory-variants/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/luanti/investigations/memory-variants/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Symptom.&lt;/strong&gt; The first run (2026-10-17) gave 67 fps HUD median in flight but a p10 of 23 and stalls to 0&#xA;while chunks loaded, with 177 MB swapped out and 32 MB free. Twenty memory variants were built, one lever&#xA;each (&lt;code&gt;saved&lt;/code&gt;, &lt;code&gt;nopp&lt;/code&gt;, &lt;code&gt;mip&lt;/code&gt;, &lt;code&gt;chunk3&lt;/code&gt;, &lt;code&gt;srvunload&lt;/code&gt;, &lt;code&gt;active2&lt;/code&gt;, &lt;code&gt;gen3&lt;/code&gt;, &lt;code&gt;io&lt;/code&gt;, &lt;code&gt;cliunload&lt;/code&gt;, &lt;code&gt;leaves&lt;/code&gt;,&#xA;&lt;code&gt;tradeoff&lt;/code&gt;, &lt;code&gt;flatlight&lt;/code&gt;, &lt;code&gt;nominimap&lt;/code&gt;, &lt;code&gt;view40&lt;/code&gt;, &lt;code&gt;view90&lt;/code&gt;, &lt;code&gt;nomerge&lt;/code&gt;, &lt;code&gt;merge100&lt;/code&gt;, &lt;code&gt;meshdelay&lt;/code&gt;,&#xA;&lt;code&gt;meshchunk2&lt;/code&gt;, &lt;code&gt;noraycull&lt;/code&gt;, &lt;code&gt;malloc&lt;/code&gt;, &lt;code&gt;trim16&lt;/code&gt;, &lt;code&gt;trim64&lt;/code&gt;; the bundles &lt;code&gt;lean&lt;/code&gt; and &lt;code&gt;leaner&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Evidence.&lt;/strong&gt; The round of &lt;a href=&#34;../../test-runs/#batch-2026-10-18-luanti-memory&#34;&gt;batch 2026-10-18-luanti-memory&lt;/a&gt; looked good: &lt;code&gt;cliunload&lt;/code&gt; 6.5 to 0.8 s of&#xA;stalls, &lt;code&gt;lean&lt;/code&gt; rendering less terrain. The interference retro-scan then found digs and clicks during&#xA;base, lean and tradeoff: somebody had played in those runs, so the cells were invalid&#xA;(&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/docs/STALLS.md#interference&#34;&gt;STALLS.md, &amp;ldquo;Interference&amp;rdquo;&lt;/a&gt;). The clean re-runs&#xA;(&lt;a href=&#34;../../test-runs/#batch-2026-10-18-luanti-clean-reruns&#34;&gt;batch 2026-10-18-luanti-clean-reruns&lt;/a&gt;, kernel .433, the kicker) and the lean parts alone&#xA;(&lt;a href=&#34;../../test-runs/#batch-2026-10-18-batch16&#34;&gt;batch 2026-10-18-batch16&lt;/a&gt;) replaced them:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Luanti: the Settings menu and string.lower on ppc64 (2026-10-28)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/luanti/investigations/settings-menu-string-lower/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/luanti/investigations/settings-menu-string-lower/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Symptom.&lt;/strong&gt; The played session of 2026-10-24 noted &amp;ldquo;Options menu is broken&amp;rdquo;. Every click on the main&#xA;menu&amp;rsquo;s gear, and on Settings in the pause menu, logged to &lt;code&gt;~/.minetest/debug.txt&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ModError: Runtime error from mod &#39;&#39; in callback open_settings():&#xA;/usr/share/luanti/builtin/common/settings/dlg_settings.lua:139:&#xA;attempt to index field &#39;controls_touchscreen&#39; (a nil value)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Narrowing it down.&lt;/strong&gt; &lt;code&gt;builtin/settingtypes.txt&lt;/code&gt; was installed and complete. The parser&#xA;(&lt;code&gt;settingtypes.lua&lt;/code&gt;) and the page builder (&lt;code&gt;load_settingtypes&lt;/code&gt; in &lt;code&gt;dlg_settings.lua&lt;/code&gt;), run on the PS3&#xA;through the system&amp;rsquo;s libluajit from a small ctypes harness with stubs for &lt;code&gt;core&lt;/code&gt;, gave 643 entries and 74&#xA;categories, Touchscreen among them, but the page ids came out as &lt;code&gt;Controls_Touchscreencontrols_touchscreen&lt;/code&gt;:&#xA;the original string followed by its lower-case copy. Then by itself:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Luanti: the stalls at viewing range 120 (2026-10-29)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/luanti/investigations/view120-stalls/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/luanti/investigations/view120-stalls/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Symptom.&lt;/strong&gt; At the package&amp;rsquo;s viewing range of 120 (0009; the user&amp;rsquo;s floor, no lower) the bench flight&#xA;ran at 20 fps steady with 36 s of frames over 100 ms in its 135 s window, a 1% low of 4 fps and frames&#xA;up to 3.8 s (&lt;a href=&#34;../../test-runs/#batch-2026-10-29-luanti-view120&#34;&gt;batch 2026-10-29-luanti-view120&lt;/a&gt;). The stall recorder put two thirds of it on &lt;code&gt;cpu&lt;/code&gt;&#xA;(the main thread in state R) and a quarter on swapping from the VRAM swap.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lure of the Temptress: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/lure-of-the-temptress/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/lure-of-the-temptress/technical/</guid>
				<description>&lt;h2 id=&#34;status&#34;&gt;Status&lt;/h2&gt;&#xA;&lt;p&gt;Untested: nobody has played a session of it on Walnut yet. Runs on ScummVM (&lt;a href=&#34;../../../engines/scummvm/&#34;&gt;the engine&lt;/a&gt;, Debian&amp;rsquo;s package).&lt;/p&gt;&#xA;&lt;p&gt;Smoke run 2026-10-20 (&lt;code&gt;ps3-bench-20261020T093324Z-smoke-scummvm-lure&lt;/code&gt;, ScummVM 2026.1.0): &amp;ldquo;Running Lure&#xA;of the Temptress (VGA/DOS/English)&amp;rdquo;, the sound running; no screenshots in that run. The package holds&#xA;the English, German, French, Italian and Spanish versions, each in its own folder; the launcher starts&#xA;the English one (Debian&amp;rsquo;s &lt;code&gt;lure&lt;/code&gt; wrapper picks by locale).&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-it-is-set-up&#34;&gt;How it is set up&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Data&lt;/strong&gt;: Debian&amp;rsquo;s &lt;code&gt;lure-of-the-temptress&lt;/code&gt;, installed with ScummVM by Walnut Games, in &lt;code&gt;/usr/share/scummvm/lure-of-the-temptress/en&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Launcher&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/tree/main/gamedb/games/lure-of-the-temptress/desktop/launchers&#34;&gt;desktop/launchers&lt;/a&gt;): &lt;code&gt;scummvm -c ~/.config/scummvm/walnut/lure.ini -i /usr/share/ps3-games/scummvm/lure.ini -p /usr/share/scummvm/lure-of-the-temptress/en lure&lt;/code&gt; through ps3-game, shown once the data&#xA;is installed (&lt;code&gt;X-Walnut-Requires=&lt;/code&gt;); the package&amp;rsquo;s own menu entry is diverted&#xA;(&lt;a href=&#34;../../../engines/scummvm/&#34;&gt;the engine&amp;rsquo;s notes&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Settings&lt;/strong&gt;: the initial config &lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/gamedb/games/lure-of-the-temptress/desktop/files/usr/share/ps3-games/scummvm/lure.ini&#34;&gt;lure.ini&lt;/a&gt;; the&#xA;player&amp;rsquo;s settings then live in &lt;code&gt;~/.config/scummvm/walnut/lure.ini&lt;/code&gt;, the saves in&#xA;&lt;code&gt;~/.local/share/scummvm/saves/lure.*&lt;/code&gt; (set aside by a played session: &lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/gamedb/games/lure-of-the-temptress/rating/test.toml&#34;&gt;rating/test.toml&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>Monkey Island 2: LeChuck&#39;s Revenge: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/monkey-island-2/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/monkey-island-2/technical/</guid>
				<description>&lt;h2 id=&#34;status&#34;&gt;Status&lt;/h2&gt;&#xA;&lt;p&gt;Untested: published so that Walnut Games can set up its data; nobody has played a session of it on&#xA;Walnut yet. Runs on ScummVM (&lt;a href=&#34;../../../engines/scummvm/&#34;&gt;the engine&lt;/a&gt;, Debian&amp;rsquo;s package).&lt;/p&gt;&#xA;&lt;p&gt;Smoke run 2026-10-28 (&lt;code&gt;ps3-bench-20261028T224550Z-smoke-scummvm-monkey2&lt;/code&gt;, variant &lt;code&gt;monkey2&lt;/code&gt;): the game&amp;rsquo;s&#xA;copy-protection screen (the voodoo recipe wheel), drawn right; ScummVM doesn&amp;rsquo;t skip it for this release&#xA;(known issue), so the run went no further.&lt;/p&gt;&#xA;&lt;p&gt;The player&amp;rsquo;s copy is the Spanish floppy release (&lt;code&gt;MONKEY2.000&lt;/code&gt; sha256 &lt;code&gt;bdca6e56...88ac5&lt;/code&gt;, &lt;code&gt;MONKEY2.001&lt;/code&gt;&#xA;&lt;code&gt;f5cb9fc5...8b3&lt;/code&gt;), &lt;code&gt;monkey-island2-es-data&lt;/code&gt; in Debian&amp;rsquo;s game-data-packager 89 already.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Mr.Boom: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/mrboom/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/mrboom/technical/</guid>
				<description>&lt;p&gt;Mr.Boom 5.5, a Bomberman clone for up to eight players (SDL2, pads first). Debian&amp;rsquo;s ppc64 binary crashed&#xA;within 15 s of every start on the PS3: both played sessions of 2026-10-26 ended in a segfault in the game&amp;rsquo;s&#xA;own code on the welcome screen (Scrap). The cause is a big-endian bug in the SDL2 build, now fixed in our&#xA;package; the fix passes every recorded demo under qemu, and the PS3 check is still to come.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Mr.Boom: the emulated 8086 registers in little-endian layout (2026-10-26)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/mrboom/investigations/big-endian-registers/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/mrboom/investigations/big-endian-registers/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Symptom.&lt;/strong&gt; Debian&amp;rsquo;s ppc64 &lt;code&gt;mrboom&lt;/code&gt; 5.5+ds-1 segfaulted on the PS3 within 15 s of every start: two played&#xA;sessions, both on the welcome screen, after 13-14 s of play. dmesg: &lt;code&gt;mrboom: segfault (11) at 1835c88a1 ... in mrboom&lt;/code&gt;, a load (&lt;code&gt;lbzx&lt;/code&gt;) from an address far outside the program.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Evidence.&lt;/strong&gt; The fault is in &lt;code&gt;program()&lt;/code&gt;, at an &lt;code&gt;LODSB&lt;/code&gt; in &lt;code&gt;aff_lettre&lt;/code&gt; (the font code), with ESI 0x481dd440.&#xA;Mr.Boom is the original DOS game translated from 8086 assembly to C: &lt;code&gt;program()&lt;/code&gt; runs the translated code on&#xA;emulated registers. ESI held a value no font offset could have.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Neverball: L8A8 swapped, 1-pixel mipmap levels, and graph exception 0x105 (2026-10-16)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/neverball/investigations/driver-bugs/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/neverball/investigations/driver-bugs/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Symptom.&lt;/strong&gt; Neverball was the first game to show three driver bugs in one day: its fonts and HUD drew with&#xA;wrong alpha, its non-square textures broke the GPU&amp;rsquo;s mipmap generation, and on Mesa ps3.223 it wedged the&#xA;RSX with a graph exception (&lt;a href=&#34;../../test-runs/#batch-2026-10-16-mesa-223-neverball-wedge&#34;&gt;batch 2026-10-16-mesa-223-neverball-wedge&lt;/a&gt;: &lt;code&gt;nouveau: kernel rejected pushbuf&lt;/code&gt;, 89 lines and 35 000 dump lines, &lt;code&gt;ps3rsx: graph exception&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Evidence and cause.&lt;/strong&gt; Each was reduced to a test in ps3-gpu-tools&amp;rsquo; mesa-tests:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Neverball: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/neverball/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/neverball/technical/</guid>
				<description>&lt;p&gt;Neverball (Debian&amp;rsquo;s 2018 snapshot of 1.6, with Neverputt) runs with the right picture at about 66 fps in&#xA;the benchmark&amp;rsquo;s replay, and its played session (2026-10-24) had a 60 fps median (&amp;ldquo;played flawlessly&amp;rdquo;, the&#xA;player). It found three of the driver bugs on its way.&lt;/p&gt;&#xA;&lt;h2 id=&#34;packages-and-patches&#34;&gt;Packages and patches&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;neverball&lt;/code&gt;, &lt;code&gt;neverputt&lt;/code&gt; and their data (&lt;code&gt;1.6.0+git20180603-3+ps3.N&lt;/code&gt;, &lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/tree/main/gamedb/games/neverball/packages/neverball&#34;&gt;packages/neverball&lt;/a&gt;),&#xA;replacing Debian&amp;rsquo;s.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Patch&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;What&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Switch&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/gamedb/games/neverball/packages/neverball/patches/0001-Benchmark-mode-NEVERBALL_BENCH-prints-the-frames-and.patch&#34;&gt;0001&lt;/a&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;bench mode: a replay prints its frames, seconds, fps and longest frame at its end and the game quits&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;NEVERBALL_BENCH=1&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/gamedb/games/neverball/packages/neverball/patches/0002-Benchmark-mode-NEVERBALL_BENCH_LOOPS-N-plays-the-rep.patch&#34;&gt;0002&lt;/a&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;the replay played N times, one line per pass&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;NEVERBALL_BENCH_LOOPS=N&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/gamedb/games/neverball/packages/neverball/patches/0003-Fewer-GL-calls-and-draws-a-frame-shared-mesh-buffers.patch&#34;&gt;0003&lt;/a&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;fewer GL calls and draws: one vertex and element buffer per solid file and one for the five item files, items drawn in a row, the background billboards transformed on the CPU and drawn per material run (76 to 13 draws), no depth toggles around empty passes, one texture unit where one is used&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;NEVERBALL_GL_MESH&lt;/code&gt;, &lt;code&gt;_ITEMS&lt;/code&gt;, &lt;code&gt;_BACK&lt;/code&gt;, &lt;code&gt;_STATE&lt;/code&gt;; &lt;code&gt;NEVERBALL_GL=0&lt;/code&gt; all off&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/gamedb/games/neverball/packages/neverball/patches/0004-config-fullscreen-by-default-Walnut-is-a-console-on-.patch&#34;&gt;0004&lt;/a&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;fullscreen by default for Neverball and Neverputt (a fresh neverballrc started an 800x600 window; fullscreen takes the desktop&amp;rsquo;s mode); checked on the PS3 with Neverputt on 2026-10-29&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;the &lt;code&gt;fullscreen&lt;/code&gt; setting&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/gamedb/games/neverball/packages/neverball/patches/0004-config-fullscreen-by-default-Walnut-is-a-console-on-.patch&#34;&gt;0004&lt;/a&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;fullscreen by default (a fresh &lt;code&gt;neverballrc&lt;/code&gt; started Neverball and Neverputt in an 800x600 window); fullscreen already takes the desktop&amp;rsquo;s mode (1920x1080 on the PS3); the Options menu and a saved &lt;code&gt;neverballrc&lt;/code&gt; still decide. Built 2026-10-28, pending its PS3 test&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;the Options menu&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;On llvmpipe at GL 2.1 with a fixed 33 ms clock, 0003 took &lt;code&gt;gui/demo1.nbr&lt;/code&gt; from 2154 to 844 calls and 137&#xA;to 74 draws a frame (demo2 2916 to 1285; the level intros greed 6289 to 1915 and mover 8205 to 2463;&#xA;Neverputt 565 to 431). Pixels are identical except BACK&amp;rsquo;s rounding at cloud edges (demo1: 163 pixels over 7&#xA;frames, 1 level, one pixel 11); all switches off is the old build&amp;rsquo;s exact call stream. VBOs and point&#xA;parameters are required with no fallback.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Neverputt: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/neverputt/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/neverputt/technical/</guid>
				<description>&lt;h2 id=&#34;status&#34;&gt;Status&lt;/h2&gt;&#xA;&lt;p&gt;Our &lt;code&gt;neverputt&lt;/code&gt; and &lt;code&gt;neverputt-data&lt;/code&gt; from the neverball source package (&lt;a href=&#34;../../neverball/technical/&#34;&gt;Neverball&lt;/a&gt;&amp;rsquo;s packages,&#xA;&lt;code&gt;1.6.0+git20180603-3+ps3.N&lt;/code&gt;; dev build &lt;code&gt;ps3.931~dev&lt;/code&gt; installed with &lt;code&gt;dpkg -i&lt;/code&gt;, Neverball&amp;rsquo;s packages with it).&#xA;Smoke run on 2026-10-29 (kernel .874, Mesa ps3.924, the VRAM swap on; &lt;code&gt;ps3-bench-20261028T230058Z&lt;/code&gt;): without a&#xA;&lt;code&gt;~/.neverball/neverputtrc&lt;/code&gt; (the recipe sets the player&amp;rsquo;s aside and restores it), Return three times by XTEST&#xA;(Play, the first course, the first hole): hole 1 with the flag, the course, the score and par, fullscreen&#xA;1920x1080 from the package&amp;rsquo;s new default (neverball 0004). 129 fps steady on the Gallium HUD, 1% low 88, sound&#xA;running with 6 audible dropouts, 47 MB peak RSS. Not checked: a putt, the pad, the sound by ear. The recipe:&#xA;&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/gamedb/games/neverputt/benchmark/recipe.sh&#34;&gt;benchmark/recipe.sh&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>OpenArena opengl1: batching, and why the lightmap atlas went off (2026-10-17/18)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/openarena/investigations/opengl1-batching-and-the-atlas/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/openarena/investigations/opengl1-batching-and-the-atlas/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Symptom.&lt;/strong&gt; Game-side batching had tripled X-Moto, so the same was tried for OpenArena&amp;rsquo;s fixed-function&#xA;renderer: ioquake3 0019-0022 (the lightmap atlas &lt;code&gt;r_mergeLightmaps&lt;/code&gt;, a GL state cache, no&#xA;&lt;code&gt;glLockArraysEXT&lt;/code&gt; around batches, the sky from vertex arrays). On llvmpipe at GL 2.1 the bench demo went&#xA;from 3022 GL calls and 198 draws a frame to 377 and 79, with the pixels within 1-4 levels. On the RSX it&#xA;measured slower: steady 51.8 fps with all four on against 56.4 with all off&#xA;(&lt;a href=&#34;../../test-runs/#batch-2026-10-17-ioquake3-362-batching&#34;&gt;batch 2026-10-17-ioquake3-362-batching&lt;/a&gt;).&lt;/p&gt;</description>
			</item>
			<item>
				<title>OpenArena opengl2 (gl2min): the 16 s freezes and the memory (2026-10-18)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/openarena/investigations/opengl2-freezes/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/openarena/investigations/opengl2-freezes/</guid>
				<description>&lt;p&gt;Moved on 2026-10-26 from docs/MEMORY.md (&amp;ldquo;OpenArena opengl2 (gl2min): the 16 s freezes and the&#xA;memory&amp;rdquo;). The patches are our ioquake3&amp;rsquo;s (renderer_opengl2); the driver side, nouveau&amp;rsquo;s system-memory&#xA;copies of VRAM buffers and Mesa 0037&amp;rsquo;s switches that limit them, stays in&#xA;&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/docs/MEMORY.md#nouveaus-system-memory-copies-of-vram-buffers-mesa-0037&#34;&gt;docs/MEMORY.md&lt;/a&gt;.&#xA;Both causes are settled: since batch 17 gl2min runs at 57-60 steady fps with 1-2 s of gameplay stalls.&lt;/p&gt;&#xA;&lt;h2 id=&#34;symptom&#34;&gt;Symptom&lt;/h2&gt;&#xA;&lt;p&gt;The profiled gl2min run of 2026-10-18 (&lt;code&gt;PERF=1 MEM=1&lt;/code&gt;, ioquake3 ps3.396, Mesa ps3.408~dev,&#xA;&lt;code&gt;build/bench/ps3-bench-20261018T080250Z-openarena-gl2min&lt;/code&gt;, in &lt;a href=&#34;../../test-runs/#batch-2026-10-18-batch8&#34;&gt;batch 2026-10-18-batch8&lt;/a&gt;) had 54.7 s of gameplay stalls, a 16148 ms&#xA;longest frame, 66.5 MB swapped and 117 MB of VRAM. Two causes, one in our report and one in memory.&lt;/p&gt;</description>
			</item>
			<item>
				<title>OpenArena opengl2: making the GLSL renderer fit in memory (2026-10-15 to 10-17)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/openarena/investigations/opengl2-fits-in-memory/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/openarena/investigations/opengl2-fits-in-memory/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Symptom.&lt;/strong&gt; On 2026-10-15 the GLSL renderer was tried once and dropped: it &amp;ldquo;ran out of RAM compiling&#xA;its shaders&amp;rdquo; (commit 82b6b5f), before the VRAM swap and game mode existed. On 2026-10-17 it ran on nv30&#xA;(e708512: all 97 programs link), but compiled them twice at about 25 s each, and Debian&amp;rsquo;s build played&#xA;the bench demo at 10.7 fps (&lt;code&gt;gl2&lt;/code&gt;, Debian&amp;rsquo;s opengl2 defaults: 15.9).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Evidence.&lt;/strong&gt; Where the memory went, from the hunk counters and Mesa&amp;rsquo;s allocations: Mesa kept every&#xA;shader&amp;rsquo;s source and IR after its program linked; 27 bone-animation programs indexed a 105-matrix array,&#xA;which nv30 (no indirect constant addressing) turns into compare trees; 15 shadow and post-processing&#xA;programs needed framebuffer objects gl2min never uses; a renderer restart at the map load compiled&#xA;everything again; the VAO cache held 21 MB that were never drawn from; and the renderer kept a CPU copy&#xA;of every MD3 vertex frame, about 87 MB of hunk for the demo&amp;rsquo;s models.&lt;/p&gt;</description>
			</item>
			<item>
				<title>OpenArena: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/openarena/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/openarena/technical/</guid>
				<description>&lt;p&gt;OpenArena 0.8.8 (Debian&amp;rsquo;s data) runs on our &lt;a href=&#34;../../../engines/ioquake3/&#34;&gt;ioquake3&lt;/a&gt; with both&#xA;of its renderers. The fixed-function &lt;code&gt;opengl1&lt;/code&gt; renderer is the suite&amp;rsquo;s baseline: 70.6 steady fps with&#xA;no gameplay stalls. The GLSL &lt;code&gt;opengl2&lt;/code&gt; renderer, in its lean &lt;code&gt;gl2min&lt;/code&gt; settings, reaches 56-60 fps with&#xA;0-2.4 s of gameplay stalls since ioquake3 0027 sends its vertex colours in a format nv30 fetches. In&#xA;played sessions the GL 2.0 launcher did better than GL 1.2 (54 against 43 fps median), so the game&amp;rsquo;s&#xA;medal comes from GL 2.0.&lt;/p&gt;</description>
			</item>
			<item>
				<title>OpenRCT2 on the PS3: big-endian port estimate (2026-10-19)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/openrct2/investigations/big-endian-port-estimate/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/openrct2/investigations/big-endian-port-estimate/</guid>
				<description>&lt;p&gt;Moved on 2026-10-26 from &lt;a href=&#34;../../../../research/game-reeval/&#34;&gt;game-reeval.md&lt;/a&gt;, where it was part B of the re-evaluation of 2026-10-19 (the file &lt;code&gt;reeval-part-B-openrct2.md&lt;/code&gt; its ranked table names). It was written before the port: the package and its PS3 runs are in the game&amp;rsquo;s bundle (&lt;a href=&#34;../../technical/&#34;&gt;technical notes&lt;/a&gt;, &lt;a href=&#34;../big-endian-port/&#34;&gt;the port&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;2026-10-19. Read-only look at the source plus web research. Nothing was built for ppc64. The RAM&#xA;figure in section 9 was measured in a throwaway amd64 container.&lt;/p&gt;&#xA;&lt;p&gt;Sources examined:&lt;/p&gt;</description>
			</item>
			<item>
				<title>OpenRCT2: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/openrct2/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/openrct2/technical/</guid>
				<description>&lt;h2 id=&#34;status&#34;&gt;Status&lt;/h2&gt;&#xA;&lt;p&gt;Published, Untested: OpenRCT2 0.5.6 ported to big-endian ppc64, packaged, installed on the PS3 and baselined, not&#xA;played yet. Under qemu-ppc64 the build matches amd64 bit for bit on every check (gtest 275/275, 35 parks after&#xA;10000 ticks, 210 screenshots, 169 track designs: &lt;a href=&#34;../investigations/big-endian-port/&#34;&gt;the port&lt;/a&gt;).&#xA;Software renderer only (the GL engine needs GL 3.3 core). It needs RollerCoaster Tycoon 2&amp;rsquo;s data from the&#xA;player&amp;rsquo;s own copy: game-data-packager&amp;rsquo;s &lt;code&gt;roller-coaster-tycoon2-data&lt;/code&gt; (build.toml &lt;code&gt;[data_setup]&lt;/code&gt;, in&#xA;&lt;code&gt;/usr/share/games/roller-coaster-tycoon2&lt;/code&gt;, a path upstream searches: a fresh home finds it there, gdp-step1 on&#xA;the PS3), which the licensed suite now builds too, or our older licensed &lt;code&gt;rct2-data&lt;/code&gt; (from the CD,&#xA;&lt;code&gt;/usr/share/games/rct2&lt;/code&gt;, the path our patch 0005 adds). On the PS3 it runs at 21-24 fps in Electric Fields (10 fps in Six Flags Magic&#xA;Mountain) with the console&amp;rsquo;s RAM nearly gone.&lt;/p&gt;</description>
			</item>
			<item>
				<title>OpenRCT2: the big-endian port, milestone 1 (2026-10-19)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/openrct2/investigations/big-endian-port/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/openrct2/investigations/big-endian-port/</guid>
				<description>&lt;p&gt;The port followed &lt;a href=&#34;../big-endian-port-estimate/&#34;&gt;the estimate&lt;/a&gt; of the same day. Upstream refuses&#xA;big-endian on purpose (a &lt;code&gt;static_assert&lt;/code&gt; in &lt;code&gt;Platform.h&lt;/code&gt;), so this is our own out-of-tree series.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Starting point.&lt;/strong&gt; The closed PR #27114, &amp;ldquo;AmigaOS 3.x (m68k, big-endian) port [RFC]&amp;rdquo; (Thomas Luebker, 43&#xA;commits, 2026-09-10/12, head a5dbca57c5be, closed unmerged as too invasive and AI-generated), contributed to&#xA;OpenRCT2 and so GPL-3.0-or-later like the rest of the tree. Its endian core was applied on v0.5.6 (82b30979)&#xA;with 2 conflicts resolved (&lt;code&gt;DataSerialiserTraits.h&lt;/code&gt;, &lt;code&gt;SawyerCoding.cpp&lt;/code&gt;) and cleaned of the Amiga parts. The&#xA;work was done in a cross build (g++-16 for powerpc64 against a ppc64 sysroot) with the ppc64 binaries run&#xA;under qemu-ppc64-static, next to a native amd64 build of the same tree.&lt;/p&gt;</description>
			</item>
			<item>
				<title>OpenRCT2: the blue screenshots and the console defaults (2026-10-27)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/openrct2/investigations/colours-and-console-defaults/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/openrct2/investigations/colours-and-console-defaults/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Report.&lt;/strong&gt; In the data-pilot run (docs/TESTS.md, 10-27 17:43) OpenRCT2 0.5.6+ds-1+ps3.889 with&#xA;&lt;code&gt;roller-coaster-tycoon2-data&lt;/code&gt; 89 (game-data-packager&amp;rsquo;s import of the user&amp;rsquo;s CD) showed the title, the windows&#xA;and Electric Fields in blue and purple in every xwd screenshot, while the 10-19 smoke test (the old&#xA;&lt;code&gt;rct2-data&lt;/code&gt;, build ps3.574) had looked right. It also started in a 1280x720 window with the changelog open.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-colours-the-game-draws-right-the-screenshot-is-wrong&#34;&gt;The colours: the game draws right, the screenshot is wrong&lt;/h2&gt;&#xA;&lt;p&gt;Nothing was wrong with the game, the data or the renderer. Same build, same data, same config&#xA;(&lt;code&gt;drawing_engine = SOFTWARE_HWD&lt;/code&gt;, the default a fresh config gets), started windowed:&lt;/p&gt;</description>
			</item>
			<item>
				<title>OpenTTD: &#34;no memory to back the GART&#34; with the staging pool (2026-10-19)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/openttd/investigations/gart-nearly-full/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/openttd/investigations/gart-nearly-full/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Symptom.&lt;/strong&gt; One of 13 OpenTTD runs since Mesa ps3.544 (&lt;code&gt;20261019T102932Z-openttd-base&lt;/code&gt;, with&#xA;&lt;code&gt;NV30_STAGING_POOL_MB=24&lt;/code&gt;) logged five &lt;code&gt;ps3rsx: no memory to back the GART (56 of 63 MiB in use)&lt;/code&gt; within a&#xA;second, at 37683 s of uptime; &lt;code&gt;bench/analysis/logscan.py&lt;/code&gt; flagged it as NEW. The run still finished&#xA;(&lt;code&gt;ended=window&lt;/code&gt;), nothing showed in the picture, and the other twelve runs are clean.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Cause.&lt;/strong&gt; OpenTTD uploads an 8 MB staging buffer per frame; the 24 MB pool (Mesa 0040) and the rest of&#xA;the process&amp;rsquo;s buffers reach the 63 MiB GART when something else arrives at the same moment (a second&#xA;4 MB buffer, the title screen&amp;rsquo;s textures). This is a different path from the GART-full crashes of other&#xA;games: the kernel cannot get pages (CMA chunks) to back the GART, not a full aperture. The draw that asked&#xA;for the buffer may have been dropped.&lt;/p&gt;</description>
			</item>
			<item>
				<title>OpenTTD: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/openttd/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/openttd/technical/</guid>
				<description>&lt;p&gt;OpenTTD 15.1 runs with the right picture through both of its video drivers: SDL&amp;rsquo;s software path and the&#xA;OpenGL driver, which our patches made start on nv30. With the 8bpp-optimized blitter (our package&amp;rsquo;s&#xA;default since patch 0003) and Mesa 0040&amp;rsquo;s staging pool, the 1962 benchmark savegame plays at about 52&#xA;steady fps; its OpenGL played session (2026-10-25) had a 60 fps median with clean music. The software&#xA;driver plays too, but gives the frame timer nothing to measure.&lt;/p&gt;</description>
			</item>
			<item>
				<title>OpenTTD: the 1962 savegame, and why the 8bpp-optimized blitter became the default (2026-10-19)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/openttd/investigations/savegame-blitters/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/openttd/investigations/savegame-blitters/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Symptom.&lt;/strong&gt; On the new savegame benchmark (820 vehicles, 30 towns, the camera on a city of 5000, sound&#xA;and music on, the GL driver) Debian&amp;rsquo;s default 32bpp-anim blitter ran at 10-14 fps, mostly 11, with 22-54&#xA;s of gameplay stalls in the 120 s window, 3500-4700 underruns, 13-22 MB free.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Evidence&lt;/strong&gt; (batch ssdroot3: SSD root, kernel .472, Mesa ps3.476, openttd ps3.297, three rounds per group):&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Variant&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Steady fps&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;1% low&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Gameplay stalls&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Underruns&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Free RAM&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;base&lt;/code&gt; (32bpp-anim), 9 runs&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;10-14, mostly 11&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;5.5-7.5&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;22-54 s&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;700-4700&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;13-22 MB&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;blit8&lt;/code&gt; (8bpp-optimized)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;34, 35, 43&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;13-15&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;0.3-0.5 s&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;2600-4000&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;41 MB&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;blit32&lt;/code&gt; (32bpp-optimized)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;13-14&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;6-6.5&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;26-35 s&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;3400-4400&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;18-26 MB&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;nosound&lt;/code&gt; / &lt;code&gt;nomusic&lt;/code&gt; / &lt;code&gt;quiet&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;14 / 13 / 14&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;7-8&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;19-21 / 24-28 / 19-21 s&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;0 / 63-107 / 0&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;hz22&lt;/code&gt;, &lt;code&gt;buf2048&lt;/code&gt;, &lt;code&gt;buf4096&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;11-14, as &lt;code&gt;base&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;5.7-7.5&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;21-46 s&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;80-3500&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;zoomout&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;7&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;4.0-4.3&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;115-120 s&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;3200-4400&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;9-18 MB&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;scroll&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;7-8&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;3.9-4.4&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;100-116 s&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;2700-4600&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;simplay&lt;/code&gt; (the save&amp;rsquo;s simulation only)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;6000 ticks in 82.7 s&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;51 MB&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;32bpp-anim draws every sprite into a 32-bit buffer and keeps an 8-bit animation buffer next to it; the&#xA;8bpp-optimized blitter writes one byte a pixel and the GL driver applies the palette on the GPU. So the&#xA;frame rate triples and a frame no longer takes 100 ms or more. 32bpp-optimized (no palette animation)&#xA;gains only 2 fps. The picture is the same: webcam pairs of &lt;code&gt;base&lt;/code&gt; and &lt;code&gt;blit8&lt;/code&gt; at 60 s and 150 s show the&#xA;same sprites, town labels, bridges, water and date bar (the speckled water is the webcam catching the&#xA;palette animation mid-cycle, in both). OpenGFX is an 8bpp base set, so nothing the 8bpp blitter loses&#xA;shows; 32bpp-only NewGRFs would. Zooming out and scrolling were the worst case: the sprite count per&#xA;frame. The music costs about 3 fps (-20%) and 25-30 s of stalls.&lt;/p&gt;</description>
			</item>
			<item>
				<title>OpenTTD: the OpenGL driver on GL 2.1, and SDL3&#39;s blue cast (2026-10-16 to 10-18)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/openttd/investigations/gl-driver-on-gl21/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/openttd/investigations/gl-driver-on-gl21/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Symptom.&lt;/strong&gt; The research expected the GL mode to fail at init with no GPU risk, and it did: stock&#xA;&lt;code&gt;-v sdl-opengl&lt;/code&gt; refused to start on nv30 with &amp;ldquo;Single element texture formats not supported&amp;rdquo;&#xA;(&lt;a href=&#34;../../test-runs/#batch-2026-10-16-openttd-smokes&#34;&gt;batch 2026-10-16-openttd-smokes&lt;/a&gt;). The software path started, but with a strong blue cast.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Cause.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The OpenGL driver needs GL 3.0 or ARB_texture_rg for its single-channel textures; its VAO check wants&#xA;ARB &lt;em&gt;and&lt;/em&gt; APPLE vertex array objects below GL 3.0 (an upstream bug: Mesa has no APPLE one); and its&#xA;sprite shaders use &lt;code&gt;texture2DLod&lt;/code&gt; in the fragment stage, which needs ARB_shader_texture_lod (nv30 has&#xA;no TXL).&lt;/li&gt;&#xA;&lt;li&gt;SDL3&amp;rsquo;s accelerated window framebuffer was BGRA8888 on big-endian, so OpenTTD&amp;rsquo;s 0xAARRGGBB words came out&#xA;with red and blue swapped.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Fix.&lt;/strong&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Particles of one size at every distance: nv30 never took the vertex program&#39;s point size (2026-10-27)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/yquake2/investigations/point-size-attenuation/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/yquake2/investigations/point-size-attenuation/</guid>
				<description>&lt;p&gt;Found right after the round particles of &lt;a href=&#34;../point-smooth/&#34;&gt;the point-smooth fix&lt;/a&gt; showed&#xA;up on the PS3; the driver mechanism of this fix, Mesa 0051 and ps3rsx&amp;rsquo;s PS3_ABI 2, is in&#xA;&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/docs/DRIVER.md#the-mesa-side&#34;&gt;docs/DRIVER.md&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;symptom&#34;&gt;Symptom&lt;/h2&gt;&#xA;&lt;p&gt;With Mesa ps3.874 the particles (blood, sparks, bullet trails) were round, but every one was a disc&#xA;of about 40 pixels at 1080p, whether it was next to the player or across the room. Blood sprays&#xA;turned into big overlapping blobs. The user remembered them as &amp;ldquo;gradients on PC, or much smaller&amp;rdquo;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Quake III Arena: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/quake-3-arena/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/quake-3-arena/technical/</guid>
				<description>&lt;h2 id=&#34;status&#34;&gt;Status&lt;/h2&gt;&#xA;&lt;p&gt;Untested as a played game: published so that Walnut Games can set up its data. On 2026-10-27 the data&#xA;came from the CD&amp;rsquo;s ISO on the PS3 and ioquake3 loaded q3dm1 with the right picture (lightmaps, models,&#xA;HUD; xwd fullscreen, looked at); on 2026-10-28 from GOG&amp;rsquo;s installer, with Team Arena, whose mpteam1&#xA;loaded with its own HUD. Nobody has played a session or measured it yet.&lt;/p&gt;&#xA;&lt;h2 id=&#34;packages-data-and-settings&#34;&gt;Packages, data and settings&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Engine&lt;/strong&gt;: our &lt;code&gt;ioquake3&lt;/code&gt; (&lt;a href=&#34;../../../engines/ioquake3/&#34;&gt;ioquake3&lt;/a&gt;, OpenArena&amp;rsquo;s engine), &lt;code&gt;/usr/lib/ioquake3/ioquake3&lt;/code&gt;. Its&#xA;package already has Debian&amp;rsquo;s native game code links: &lt;code&gt;/usr/lib/quake3/base/baseq3/{cgame,qagame,ui}.so&lt;/code&gt;&#xA;for Quake III and &lt;code&gt;/usr/lib/quake3/ta/{baseq3,missionpack}/&lt;/code&gt; for Team Arena. The launchers set&#xA;&lt;code&gt;vm_cgame 0&lt;/code&gt;, &lt;code&gt;vm_game 0&lt;/code&gt;, &lt;code&gt;vm_ui 0&lt;/code&gt; and &lt;code&gt;sv_pure 0&lt;/code&gt;, so ioquake3 loads those native libraries&#xA;(ioquake3&amp;rsquo;s build of id&amp;rsquo;s GPL game code, the same game as 1.32&amp;rsquo;s bytecode): ioquake3 has no PowerPC&#xA;compiler for the QVM bytecode any more (only x86, x86-64 and ARM), and the interpreter is slow on the&#xA;PPE. With &lt;code&gt;sv_pure 1&lt;/code&gt; the client would insist on the paks&amp;rsquo; bytecode.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Data&lt;/strong&gt;: game-data-packager&amp;rsquo;s &lt;code&gt;quake3-data&lt;/code&gt; (&lt;code&gt;/usr/share/games/quake3-data/baseq3/pak0-8.pk3&lt;/code&gt;) and&#xA;&lt;code&gt;quake3-team-arena-data&lt;/code&gt; (&lt;code&gt;.../quake3-team-arena-data/missionpack/pak0-3.pk3&lt;/code&gt;), each with gdp&amp;rsquo;s links&#xA;into &lt;code&gt;/usr/lib/quake3/{base,ta}&lt;/code&gt;. Those links are why the data manifest and walnut-games-helper take&#xA;symlinks now (docs/PACKAGING.md &amp;ldquo;Links&amp;rdquo;). Team Arena&amp;rsquo;s Conflicts/Replaces &lt;code&gt;quake3-data (&amp;lt;&amp;lt; 77~)&lt;/code&gt; is&#xA;about old gdp builds and is left out of the manifest: unversioned it would remove quake3-data.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Launchers&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/tree/main/gamedb/games/quake-3-arena/desktop/launchers&#34;&gt;desktop/launchers&lt;/a&gt;), both &lt;code&gt;NoDisplay=true&lt;/code&gt; with&#xA;&lt;code&gt;X-Walnut-Requires=&lt;/code&gt; the pak0 of their data: &amp;ldquo;Quake III Arena&amp;rdquo; (&lt;code&gt;fs_basepath /usr/lib/quake3/base&lt;/code&gt;) and&#xA;&amp;ldquo;Quake III: Team Arena&amp;rdquo; (&lt;code&gt;fs_basepath /usr/lib/quake3/ta&lt;/code&gt;, &lt;code&gt;fs_game missionpack&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Defaults&lt;/strong&gt;: &lt;code&gt;autoexec.cfg&lt;/code&gt; in &lt;code&gt;/usr/lib/quake3/base/baseq3/&lt;/code&gt; and &lt;code&gt;/usr/lib/quake3/ta/baseq3/&lt;/code&gt;&#xA;(&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/tree/main/gamedb/games/quake-3-arena/desktop/files&#34;&gt;desktop/files&lt;/a&gt;), OpenArena&amp;rsquo;s: &lt;code&gt;opengl1&lt;/code&gt;, &lt;code&gt;r_mode -2&lt;/code&gt; fullscreen at the desktop&amp;rsquo;s&#xA;resolution, vsync, &lt;code&gt;com_maxfps 60&lt;/code&gt;, DXT1 textures, the pad bindings; and &lt;code&gt;cl_cdkeyCheck 0&lt;/code&gt;&#xA;(ioquake3 0030): without it both menus open on a CD KEY screen at every start. &lt;code&gt;ui_cdkeychecked&lt;/code&gt; can&amp;rsquo;t&#xA;skip it: the UIs register it &lt;code&gt;CVAR_ROM&lt;/code&gt;, which forces a value set on the command line or in a config&#xA;back to 0. No key is shipped or needed (it mattered only to id&amp;rsquo;s authorize servers).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Settings&lt;/strong&gt; live in ioquake3&amp;rsquo;s XDG folders: &lt;code&gt;~/.config/Quake3&lt;/code&gt;, &lt;code&gt;~/.local/state/Quake3&lt;/code&gt; (&lt;code&gt;~/.q3a&lt;/code&gt; when it exists).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;data-sources-tried&#34;&gt;Data sources tried&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;CD ISO&lt;/strong&gt; (&lt;code&gt;QUAKE3.iso&lt;/code&gt;, 1.11-era: &lt;code&gt;Quake3/baseq3/pak0.pk3&lt;/code&gt; and pak1): loop-mounted by walnut-data;&#xA;gdp needs 1.32&amp;rsquo;s pak1-8 too, from id&amp;rsquo;s point release &lt;code&gt;linuxq3apoint-1.32b-3.x86.run&lt;/code&gt;. gdp downloaded it&#xA;from &lt;code&gt;ftp.fu-berlin.de&lt;/code&gt; (idstuff) in the games builder on the PC. On the PS3 the import ran with&#xA;&lt;code&gt;--no-download&lt;/code&gt; and GOG&amp;rsquo;s pak1-8 beside the ISO, for lack of room for the download&amp;rsquo;s 128 MB.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;GOG&amp;rsquo;s Quake III Gold&lt;/strong&gt; (&lt;code&gt;setup_quake3_2.0.0.2.exe&lt;/code&gt;, 921 MB, known to gdp): gdp unpacks&#xA;&lt;code&gt;baseq3/pak0.pk3&lt;/code&gt; as well when only Team Arena is asked for (the installer unpacks to 981 MB, whichever&#xA;package is asked for); walnut-data&amp;rsquo;s space check counts that. On the PS3 (2026-10-28) a plain import made&#xA;quake3-data in 349 s and named Team Arena as an add-on, &lt;code&gt;-p quake3-team-arena-data&lt;/code&gt; took 315 s; about&#xA;2.4 GB free for the base and 2 GB for Team Arena, besides the installer itself.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;MDF/MDS&lt;/strong&gt;: the CD&amp;rsquo;s ISO written as a 2448-byte-sector MDF (2352 + 96 bytes of subchannel) with its&#xA;&lt;code&gt;.mds&lt;/code&gt; and extracted again by walnut-data&amp;rsquo;s code gave the ISO 9660 volume byte for byte (on the PC).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;known-problems&#34;&gt;Known problems&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Sound drops out for 80-170 ms about once a minute in a game with bots (OpenAL&amp;rsquo;s &lt;code&gt;mmap commit error: Broken pipe&lt;/code&gt; in the log, one per dropout): OpenAL&amp;rsquo;s mixer thread starves at normal priority. With a&#xA;real-time limit for the session there were none in 3 runs; that change is system-wide and not made&#xA;yet (&lt;a href=&#34;../../../engines/ioquake3/investigations/sigterm-hang-and-openal-xruns/&#34;&gt;the investigation&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;engine-options&#34;&gt;Engine options&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ioquake3 (the pick: &lt;a href=&#34;../../openarena/technical/&#34;&gt;OpenArena&lt;/a&gt; runs on our ioquake3 engine, gamedb/engines/ioquake3)&lt;/li&gt;&#xA;&lt;li&gt;Quake3e (a performance fork: x86/ARM JIT, Vulkan; no PPC JIT)&lt;/li&gt;&#xA;&lt;li&gt;spearmint (not fetchable)&lt;/li&gt;&#xA;&lt;li&gt;id&amp;rsquo;s Quake-III-Arena (frozen dump, reference)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;research&#34;&gt;Research&lt;/h2&gt;&#xA;&lt;p&gt;What the surveys and plans said about it, newest first; each line names its source, the section and the date.&lt;/p&gt;</description>
			</item>
			<item>
				<title>QuakeSpasm: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/quakespasm/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/quakespasm/technical/</guid>
				<description>&lt;p&gt;Debian&amp;rsquo;s &lt;code&gt;quakespasm&lt;/code&gt; 0.96.3, unpatched, with the Quake shareware data. It plays the shareware&amp;rsquo;s demo1&#xA;timedemo at 91.0 steady fps with almost no stalling (&lt;a href=&#34;../test-runs/#batch-2026-10-18-mesa-407-switches&#34;&gt;batch 2026-10-18-mesa-407-switches&lt;/a&gt;), and its&#xA;played session of 2026-10-26 (the GLSL launcher) had a 70 fps median with a 1% low of 42 and&#xA;no audible dropouts: one of the games that meet the 60 fps target with room to spare.&lt;/p&gt;&#xA;&lt;h2 id=&#34;packages-data-and-settings&#34;&gt;Packages, data and settings&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;quakespasm&lt;/code&gt; from Debian, nothing of ours in the binary. Two menu entries of ours&#xA;(&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/tree/main/gamedb/games/quakespasm/desktop/launchers&#34;&gt;desktop/launchers&lt;/a&gt;) replace Debian&amp;rsquo;s (diverted): &amp;ldquo;QuakeSpasm (GLSL)&amp;rdquo; and a&#xA;&lt;code&gt;-noglsl&lt;/code&gt; one, both &lt;code&gt;-basedir /usr/share/games/quake -nopackedpixels -width 1920 -height 1080 -fullscreen&lt;/code&gt;, packed hidden (&lt;code&gt;NoDisplay=true&lt;/code&gt;, &lt;code&gt;X-Walnut-Requires=/usr/share/games/quake/id1/pak0.pak&lt;/code&gt;,&#xA;which the shareware and the full game both have), so they show only with the original game&amp;rsquo;s data; a third, Quake (2021 re-release), for the re-release&amp;rsquo;s own folder (below). Don&amp;rsquo;t install&#xA;the &lt;code&gt;quake&lt;/code&gt; launcher package: it pulls GTK 4.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;-nopackedpixels&lt;/code&gt;&lt;/strong&gt;: 0.96.3&amp;rsquo;s packed-pixel lightmaps give wrong colours and dlight wraparound on&#xA;big-endian (quakespasm issue #114). Upstream master disables the path on big-endian; nv30 has no&#xA;10-bit format anyway.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;The data&lt;/strong&gt; (licensed, not in the public suite): &lt;code&gt;quake-shareware&lt;/code&gt;&#xA;(&lt;code&gt;/usr/share/games/quake/id1/pak0.pak&lt;/code&gt;, Quake 1.06 shareware, 18 MB, demo1-3), built once on the PC by&#xA;game-data-packager 89 (&lt;code&gt;make game-data&lt;/code&gt;, the Debian games builder with &lt;code&gt;lhasa&lt;/code&gt;; the shareware archive&#xA;downloaded from id&amp;rsquo;s mirrors and kept in &lt;code&gt;build/downloads/game-data&lt;/code&gt;) as &lt;code&gt;quake-shareware_89_all.deb&lt;/code&gt;,&#xA;Section &lt;code&gt;non-free/games&lt;/code&gt;, and published once to our licensed suite, since game-data-packager&amp;rsquo;s output&#xA;isn&amp;rsquo;t reproducible: the version 89 files the LAN repository published are in the retirement backup&amp;rsquo;s&#xA;&lt;code&gt;ps3-licensed-debs/&lt;/code&gt;, and &lt;code&gt;make publish DEBS=&amp;quot;&amp;lt;those files&amp;gt;&amp;quot;&lt;/code&gt; before the next &lt;code&gt;make game-data&lt;/code&gt; keeps&#xA;them the same. Install it by name or from Walnut Games (&lt;code&gt;ps3-games-licensed&lt;/code&gt;, which pulled it in, is retired). A registered Quake needs the player&amp;rsquo;s own &lt;code&gt;id1/pak0.pak&lt;/code&gt; and &lt;code&gt;pak1.pak&lt;/code&gt; (the data guide on the&#xA;game&amp;rsquo;s page).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;how-it-performs&#34;&gt;How it performs&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Bench (&lt;a href=&#34;../test-runs/#batch-2026-10-18-mesa-407-switches&#34;&gt;batch 2026-10-18-mesa-407-switches&lt;/a&gt;, the kicker on, same boot): steady 91.0, 1% low 48.6,&#xA;2.5 s of gameplay stalls (10 frames over 100 ms), longest 393 ms, 44 MB free at the lowest, 49 MB of&#xA;VRAM, 5 underruns. Mesa&amp;rsquo;s &lt;code&gt;NV30_TRANSLATE_LUT=1&lt;/code&gt; changed nothing in fps (90.9/91.0 against 91.0/90.8)&#xA;but saved about 3% of the CPU.&lt;/li&gt;&#xA;&lt;li&gt;Memory: 58 MB Rss, its 256 MB heap mapping 24.8 MB touched. The cache inside the heap never needs&#xA;flushing at this size, so sounds and models stay loaded; nothing to cut&#xA;(&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/docs/MEMORY.md#findings-in-the-games-code&#34;&gt;MEMORY.md&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;li&gt;How it got there: the first runs on 2026-10-17 gave 59.2 fps without GLSL, 64.8 with, 70.3 with the&#xA;gamma pass, colours right; Mesa ps3.262 took it from 70.5 to 78.6 (+11%, &lt;a href=&#34;../test-runs/#batch-2026-10-17-mesa-262&#34;&gt;batch 2026-10-17-mesa-262&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The recipe (&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/gamedb/games/quakespasm/benchmark/recipe.sh&#34;&gt;benchmark/recipe.sh&lt;/a&gt;) can&amp;rsquo;t use &lt;code&gt;+timedemo&lt;/code&gt; on the command line: the&#xA;shareware&amp;rsquo;s own quake.rc runs &lt;code&gt;startdemos demo1 demo2 demo3&lt;/code&gt; after the command line and the attract&#xA;loop replaces the timedemo, and the shareware refuses &lt;code&gt;-game&lt;/code&gt; directories. So a &lt;code&gt;quake.rc&lt;/code&gt; of ours in&#xA;&lt;code&gt;~/.quakespasm/id1&lt;/code&gt; loops the timedemo by frame count (&lt;code&gt;bench&lt;/code&gt; starts it and waits 1100 host frames;&#xA;demo1&amp;rsquo;s timedemo is 969 frames), since QuakeSpasm has no hook at a demo&amp;rsquo;s end: about 5 warm-up passes&#xA;of 13 s, then about 9 measured. A line starting with &lt;code&gt;-1 frames&lt;/code&gt; means a timedemo started before the&#xA;last one ended. Base keeps GLSL on with gamma at 1.0, so the full-screen gamma pass doesn&amp;rsquo;t run;&#xA;variants &lt;code&gt;noglsl&lt;/code&gt; and &lt;code&gt;glslgamma&lt;/code&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Sauerbraten: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/sauerbraten/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/sauerbraten/technical/</guid>
				<description>&lt;p&gt;The real game: Sauerbraten&amp;rsquo;s 2020 Edition release with its maps, models, sounds and music, on the same&#xA;&lt;a href=&#34;../../../engines/cube2/&#34;&gt;Cube 2 engine build&lt;/a&gt; that runs &lt;a href=&#34;../../bananabread/technical/&#34;&gt;BananaBread&lt;/a&gt;.&#xA;Debian&amp;rsquo;s &lt;code&gt;cube2&lt;/code&gt; is Sauerbraten&amp;rsquo;s own engine source, so no second engine package was made (building the&#xA;release&amp;rsquo;s source again would give the same program without the patches); what was missing was the&#xA;launcher and the data. It plays right, but its big maps fill the 250 MB of VRAM, and both played sessions&#xA;ended in a crash in Mesa when that happened. Those two crashes are fixed (Mesa 0046, then 0047 and 0048);&#xA;a session with all three is still to be played.&lt;/p&gt;</description>
			</item>
			<item>
				<title>SIGTERM hangs ioquake3; OpenAL&#39;s &#34;mmap commit error&#34; (2026-10-28)</title>
				<link>https://walnut.nanobyte.dev/gamedb/engines/ioquake3/investigations/sigterm-hang-and-openal-xruns/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/engines/ioquake3/investigations/sigterm-hang-and-openal-xruns/</guid>
				<description>&lt;p&gt;Two problems seen in Quake III&amp;rsquo;s first runs on the PS3 (2026-10-27): ioquake3 hung for good after a&#xA;SIGTERM, and OpenAL logged &lt;code&gt;[ALSOFT] (EE) mmap commit error: Broken pipe&lt;/code&gt; during play. Tested on the&#xA;PS3 (kernel .472, Mesa ps3.924, openal-soft ps3.874) with OpenArena (opengl1 and opengl2) and Quake III&#xA;with its native game libraries, each started through &lt;code&gt;ps3-game&lt;/code&gt; on the desktop&amp;rsquo;s display with a map.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sigterm-the-shutdown-ran-inside-the-signal-handler&#34;&gt;SIGTERM: the shutdown ran inside the signal handler&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Symptom.&lt;/strong&gt; With ioquake3 ps3.931 a SIGTERM after the map had loaded hung the game in 4 of 6 tries&#xA;(OpenArena 2 of 3, Quake III 2 of 3); the log stopped at &lt;code&gt;RE_Shutdown( 1 )&lt;/code&gt;, the last frame stayed on&#xA;the TV, and only SIGKILL ended it. A second SIGTERM did nothing.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Skeletal models skinned on the SPEs (2026-10-17)</title>
				<link>https://walnut.nanobyte.dev/gamedb/engines/cube2/investigations/spu-skinning/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/engines/cube2/investigations/spu-skinning/</guid>
				<description>&lt;p&gt;Moved on 2026-10-26 from docs/SPU.md (&amp;ldquo;BananaBread&amp;rsquo;s skinning&amp;rdquo;), where libspeq&amp;rsquo;s skinning op stays&#xA;described. Measured in BananaBread; the patches are the Cube 2 engine&amp;rsquo;s.&lt;/p&gt;&#xA;&lt;h2 id=&#34;symptom&#34;&gt;Symptom&lt;/h2&gt;&#xA;&lt;p&gt;The engine skins its skeletal models (players, the hud gun, monsters) either on the GPU (&lt;code&gt;gpuskel 1&lt;/code&gt;)&#xA;or on the CPU. GPU skinning runs on nv30 without a wedge but at 11 fps against 28 with CPU skinning:&#xA;nv30 turns the vertex program&amp;rsquo;s bone lookups into if/else trees. So cube2 0002 makes CPU skinning the&#xA;default and drops the GPU skinning shaders, and the skinning becomes PPE time.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Square particles: nv30 ignored GL_POINT_SMOOTH (2026-10-26)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/yquake2/investigations/point-smooth/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/yquake2/investigations/point-smooth/</guid>
				<description>&lt;p&gt;Found in the played session of 2026-10-26; the driver mechanism of the fix, Mesa 0050, is in&#xA;&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/docs/DRIVER.md#the-mesa-side&#34;&gt;docs/DRIVER.md&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;symptom&#34;&gt;Symptom&lt;/h2&gt;&#xA;&lt;p&gt;In the session the player saw Quake II&amp;rsquo;s round particles (blood, sparks, bullet trails) drawn as&#xA;squares on the PS3, against round ones on the PC (the session&amp;rsquo;s review: &amp;ldquo;missing: ps3: round&#xA;particles &amp;hellip; draw as squares&amp;rdquo;).&lt;/p&gt;&#xA;&lt;h2 id=&#34;cause&#34;&gt;Cause&lt;/h2&gt;&#xA;&lt;p&gt;Yamagi Quake II&amp;rsquo;s GL1 renderer draws its particles as GL_POINTS with GL_POINT_SMOOTH. nv30 ignored&#xA;&lt;code&gt;point_smooth&lt;/code&gt;, and NV3x/NV4x have no known smoothing switch, so every point was a square.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Started from the Games menu, Luanti found no X (2026-10-18)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/luanti/investigations/menu-freeze/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/luanti/investigations/menu-freeze/</guid>
				<description>&lt;p&gt;A start from the desktop&amp;rsquo;s Games menu on the PS3 that went wrong. The bug was game&#xA;mode&amp;rsquo;s, not Luanti&amp;rsquo;s; its fix (ps3-desktop 0.456, commit ba80992) is described in&#xA;&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/docs/DESKTOP.md#the-menu-freeze-2026-10-18-fixed-in-0456&#34;&gt;docs/DESKTOP.md&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;symptom&#34;&gt;Symptom&lt;/h2&gt;&#xA;&lt;p&gt;On the PS3, Luanti started from the Games menu found no video device and quit. About 10 s after the&#xA;click, X stopped answering other clients; killing jgmenu freed it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;cause&#34;&gt;Cause&lt;/h2&gt;&#xA;&lt;p&gt;Game mode freezes the desktop&amp;rsquo;s programs (&lt;code&gt;ps3-desktop.slice&lt;/code&gt;) when a game starts. The freeze had&#xA;caught jgmenu, which stays running between uses, while it held its keyboard and pointer grab, so X&#xA;waited on a frozen client and Luanti&amp;rsquo;s connection to it got no answer.&lt;/p&gt;</description>
			</item>
			<item>
				<title>SuperTuxKart: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/supertuxkart/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/supertuxkart/technical/</guid>
				<description>&lt;p&gt;SuperTuxKart 1.5 runs on its legacy GL 2.1 renderer with our big-endian fixes; without them the game quits&#xA;while loading its track models. It is the heaviest game we play: at the &lt;code&gt;lean&lt;/code&gt; settings, now the&#xA;package&amp;rsquo;s default for a fresh configuration, it races at 19-22 fps by the Gallium HUD in the benchmark,&#xA;and its played session on Mesa ps3.850 (2026-10-26) had a 24 fps median over five tracks with no crash&#xA;and no glitches. Light tracks play well, heavy ones (Ravenbridge Mansion) are slow, and a track&amp;rsquo;s load&#xA;takes about 20-30 s.&lt;/p&gt;</description>
			</item>
			<item>
				<title>SuperTuxKart: the &#34;Average FPS&#34; is a tick rate (2026-10-19)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/supertuxkart/investigations/two-frame-rates/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/supertuxkart/investigations/two-frame-rates/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Symptom.&lt;/strong&gt; The recipe read the game&amp;rsquo;s own &lt;code&gt;Number of frames: N time T, Average FPS: F&lt;/code&gt; line as the frame&#xA;rate: 105-111 fps for &lt;code&gt;lean&lt;/code&gt;, while the Gallium HUD said 19-22 and the race looked like 20.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Evidence.&lt;/strong&gt; The number of frames was 21602 in every run. Patch 0005 counts &lt;code&gt;ProfileWorld::update&lt;/code&gt; calls,&#xA;one per physics tick, and STK steps physics at 120 Hz, so 180 s of race is 21600 ticks whatever the&#xA;renderer does. The HUD counts frames that reached the screen: 5436-5692 swaps in a 300 s run, 3.8-4.0&#xA;physics ticks per frame.&lt;/p&gt;</description>
			</item>
			<item>
				<title>SuperTuxKart: the big-endian port and the VRAM (2026-10-16 to 10-18)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/supertuxkart/investigations/big-endian-port/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/supertuxkart/investigations/big-endian-port/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Symptom.&lt;/strong&gt; The research of 2026-10-16 had two warnings: the FAQ asks for at least 1 GB of RAM against our&#xA;217 MB, and Debian had an old powerpc colour bug (#714519). On 2026-10-17 Debian&amp;rsquo;s build stopped while&#xA;loading: its mesh loader refuses big-endian (e708512). Our +ps3.264 loaded, the karts rendered, the track&#xA;didn&amp;rsquo;t: VRAM exhausted (210 failed buffer allocations), the minimap FBO incomplete, a SIGSEGV at exit.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Cause and fix.&lt;/strong&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>The dark 3D view, the RSX&#39;s fragment TXB, and what came after (2026-10-20)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/warzone2100/investigations/dark-3d-view/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/warzone2100/investigations/dark-3d-view/</guid>
				<description>&lt;p&gt;The hardware fact this found is in &lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/docs/RSX.md&#34;&gt;docs/RSX.md&lt;/a&gt; (the fragment program&amp;rsquo;s TXB&#xA;samples wrong whatever the bias), the driver&amp;rsquo;s answer, Mesa 0045, in&#xA;&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/docs/DRIVER.md#the-mesa-side&#34;&gt;docs/DRIVER.md&lt;/a&gt;. The earlier smoke runs of the same day&#xA;(the black textures from the stb_image_resize miscompile, the white-noise music) are in the game&amp;rsquo;s&#xA;technical page.&lt;/p&gt;&#xA;&lt;h2 id=&#34;symptom&#34;&gt;Symptom&lt;/h2&gt;&#xA;&lt;p&gt;The third smoke run (2026-10-20 13:43-13:49, warzone2100 ps3.619 with patches 0004-0008: the&#xA;stb_image_resize no-vectorize and the Opus byte order, Mesa ps3.545): the sound was right, and the user&#xA;heard plausible music and effects (white noise before; the card fine, 9 recovered xruns), but the&#xA;picture was still wrong: the loading bar broken, the 3D view dark (terrain black, structures flat and&#xA;untextured). The UI was fine. qemu ppc64 rendered the same build correctly, so it was RSX-specific.&lt;/p&gt;</description>
			</item>
			<item>
				<title>The Secret of Monkey Island: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/the-secret-of-monkey-island/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/the-secret-of-monkey-island/technical/</guid>
				<description>&lt;h2 id=&#34;status&#34;&gt;Status&lt;/h2&gt;&#xA;&lt;p&gt;Untested: published so that Walnut Games can set up its data; nobody has played a session of it on&#xA;Walnut yet. Runs on ScummVM (&lt;a href=&#34;../../../engines/scummvm/&#34;&gt;the engine&lt;/a&gt;, Debian&amp;rsquo;s package).&lt;/p&gt;&#xA;&lt;p&gt;Smoke run 2026-10-29 (&lt;code&gt;ps3-bench-20261029T023324Z-smoke-scummvm-monkey&lt;/code&gt;, variant &lt;code&gt;monkey&lt;/code&gt;): the &amp;ldquo;Parte&#xA;Uno&amp;rdquo; title, then Guybrush on the dock at night with the verbs, colours right.&lt;/p&gt;&#xA;&lt;p&gt;The player&amp;rsquo;s copy is the Spanish VGA floppy release (eight disks; ScummVM: &amp;ldquo;monkey&amp;rdquo;, VGA, ES; &lt;code&gt;000.LFL&lt;/code&gt;&#xA;sha256 &lt;code&gt;4b24ef06...dfd9fc&lt;/code&gt;). Debian&amp;rsquo;s game-data-packager doesn&amp;rsquo;t know it; ours does&#xA;(&lt;code&gt;secret-of-monkey-island-floppy-es-data&lt;/code&gt;, patch 0016, from the copy&amp;rsquo;s sizes and checksums; its&#xA;901-904.LFL are the German floppy&amp;rsquo;s).&lt;/p&gt;</description>
			</item>
			<item>
				<title>The water&#39;s occlusion query: the frame waits for the GPU (2026-10-18)</title>
				<link>https://walnut.nanobyte.dev/gamedb/engines/cube2/investigations/water-query-wait/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/engines/cube2/investigations/water-query-wait/</guid>
				<description>&lt;p&gt;Moved on 2026-10-26 from docs/HOTPATHS.md (Target 5, &amp;ldquo;BananaBread&amp;rsquo;s 62.8%&amp;rdquo;, the third round and&#xA;&amp;ldquo;Measured on the PS3&amp;rdquo;). Found in BananaBread&amp;rsquo;s benchmark demo (map cave); the code is the Cube 2&#xA;engine&amp;rsquo;s, so cube2 0010 serves Sauerbraten too. The driver side, Mesa 0035 &lt;code&gt;NV30_QUERY_WAIT&lt;/code&gt; and&#xA;0042 &lt;code&gt;NV30_QUERY_KICK&lt;/code&gt;, is described in &lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/docs/HOTPATHS.md#target-5-the-query-result-wait-mesa-0035&#34;&gt;docs/HOTPATHS.md&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;symptom&#34;&gt;Symptom&lt;/h2&gt;&#xA;&lt;p&gt;The first profiling batch (2026-10-18, Mesa ps3.299) put 10.3% of BananaBread&amp;rsquo;s CPU in&#xA;&lt;code&gt;nv30_query_result&lt;/code&gt;, Mesa&amp;rsquo;s busy loop waiting for a query result; no other game of the nine had it.&#xA;On the SSD root (batch ssdroot2 P1b, Mesa ps3.476, 2026-10-19) it was 17.4% of the game&amp;rsquo;s CPU, the&#xA;second biggest hot path after the vertex conversion (&lt;a href=&#34;../byte-normals/&#34;&gt;byte-normals&lt;/a&gt;),&#xA;and the start-up profiles of batch 17 found the same spin in the warm-up (&lt;code&gt;nv30_query_result&lt;/code&gt; 13.1 s).&lt;/p&gt;</description>
			</item>
			<item>
				<title>The world&#39;s normals as signed bytes: a vertex conversion at every draw (2026-10-18)</title>
				<link>https://walnut.nanobyte.dev/gamedb/engines/cube2/investigations/byte-normals/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/engines/cube2/investigations/byte-normals/</guid>
				<description>&lt;p&gt;Moved on 2026-10-26 from docs/HOTPATHS.md (Target 1, &amp;ldquo;BananaBread&amp;rsquo;s 62.8%&amp;rdquo;) and docs/MEMORY.md&#xA;(&amp;ldquo;BananaBread&amp;rsquo;s world normals as shorts&amp;rdquo;). Found in BananaBread&amp;rsquo;s benchmark demo (map cave); the&#xA;vertex layout is the Cube 2 engine&amp;rsquo;s (&lt;code&gt;engine/world.h&lt;/code&gt;), so Sauerbraten&amp;rsquo;s world has it too. The driver&#xA;side, Mesa 0033&amp;rsquo;s translate table and 0043&amp;rsquo;s vertex-program normalisation, is in&#xA;&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/docs/HOTPATHS.md#target-1-the-snorm8-vertex-conversion-mesa-0033&#34;&gt;docs/HOTPATHS.md&lt;/a&gt;;&#xA;the system-memory copies it causes are Mesa 0037&amp;rsquo;s subject in &lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/docs/MEMORY.md&#34;&gt;docs/MEMORY.md&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;symptom&#34;&gt;Symptom&lt;/h2&gt;&#xA;&lt;p&gt;The first profiling batch (2026-10-18 early morning, Mesa ps3.299) had BananaBread at 22 fps with&#xA;72% of its CPU in Mesa, 44.9% of it in vertex format translation: &lt;code&gt;util_format_r8g8b8a8_snorm_unpack_rgba_float&lt;/code&gt;&#xA;18.2%, &lt;code&gt;util_format_r8g8b8_snorm_unpack_rgba_float&lt;/code&gt; 16.4%, the translate loop &lt;code&gt;generic_run&lt;/code&gt; around them.&#xA;On the SSD root (batch ssdroot2 P1b, 2026-10-19, Mesa ps3.476 with 0033&amp;rsquo;s table on) it was 40 fps&#xA;with Mesa at 62.8% of the game&amp;rsquo;s CPU: vertex format translation 18.3, the query wait 17.4&#xA;(&lt;a href=&#34;../water-query-wait/&#34;&gt;water-query-wait&lt;/a&gt;), per-draw state 13.8, submission 6.9, nv30&#xA;validation 3.8, buffer allocation 3.4, the rest 13.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Trigger Rally: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/trigger-rally/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/trigger-rally/technical/</guid>
				<description>&lt;h2 id=&#34;status&#34;&gt;Status&lt;/h2&gt;&#xA;&lt;p&gt;Debian&amp;rsquo;s Trigger Rally 0.6.6.1 (&lt;code&gt;trigger-rally&lt;/code&gt;, &lt;code&gt;-data&lt;/code&gt;, 116 MB). Smoke runs on 2026-10-28 (kernel .874, Mesa&#xA;ps3.924, the VRAM swap on): the menus are mouse-only (Return and the arrows do nothing there), so the recipe&#xA;(&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/gamedb/games/trigger-rally/benchmark/recipe.sh&#34;&gt;benchmark/recipe.sh&lt;/a&gt;) clicks through them by XTEST (&lt;code&gt;xkeys.py @X,Y&lt;/code&gt;): single race,&#xA;Aegyptian, race, the car (Return), then holds the throttle a few times. The race runs, the picture right&#xA;(desert, sky, the car, the HUD, the offroad sign; xwd and webcam):&lt;/p&gt;</description>
			</item>
			<item>
				<title>Two crashes in Mesa: a query&#39;s report slot taken back, then a NULL upload buffer (2026-10-24)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/sauerbraten/investigations/online-crashes/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/sauerbraten/investigations/online-crashes/</guid>
				<description>&lt;p&gt;The real Sauerbraten (our cube2 on the 2020_12_29 release&amp;rsquo;s data) crashed in both of its first played&#xA;sessions, each time in Mesa&amp;rsquo;s nv30 driver. The fixes are Mesa 0046, 0047 and 0048, whose mechanisms&#xA;are in &lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/docs/DRIVER.md#the-mesa-side&#34;&gt;docs/DRIVER.md&lt;/a&gt;; upstream nv30 has the same code.&lt;/p&gt;&#xA;&lt;h2 id=&#34;symptom&#34;&gt;Symptom&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Session of 2026-10-24 (an online insta-CTF match on eternal_valley, then berlin_wall; run&#xA;&lt;code&gt;ps3-bench-20261024T233328Z-session-sauerbraten-edition-base&lt;/code&gt;): 54 fps median, 14.7 s of stutter a&#xA;minute, a segfault after 202 s of play. Occlusion-culled geometry popped (the player&amp;rsquo;s &amp;ldquo;a bit&#xA;glitchy&amp;rdquo;).&lt;/li&gt;&#xA;&lt;li&gt;Session of 2026-10-25 (bots, about 6 minutes, Mesa ps3.819 with 0046, sauerbraten 0.819; run&#xA;&lt;code&gt;ps3-bench-20261025T013202Z-session-sauerbraten-edition-base&lt;/code&gt;): no query crash; a different one at&#xA;400 s.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;evidence-and-cause-the-first-crash-mesa-0046&#34;&gt;Evidence and cause: the first crash (Mesa 0046)&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;nip&lt;/code&gt; resolves (stable-debug&amp;rsquo;s &lt;code&gt;mesa-libgallium-dbgsym&lt;/code&gt; ps3.721) to &lt;code&gt;nouveau_heap_free&lt;/code&gt;&#xA;(nouveau_heap.c:106, &lt;code&gt;r-&amp;gt;in_use = 0&lt;/code&gt;), called from &lt;code&gt;nv30_query_object_del&lt;/code&gt; (nv30_query.c:76). The heap&#xA;node it wrote was &lt;code&gt;nouveau_mm_free_work&lt;/code&gt;&amp;rsquo;s function descriptor in libgallium&amp;rsquo;s read-only &lt;code&gt;.opd&lt;/code&gt;: the&#xA;query object had been freed and its memory reused for a fence work. nv30 has 124 report slots; the&#xA;engine ends up to 2048 occlusion queries a frame and reads them a frame later, so slots were taken&#xA;back from queries that still pointed at them: the query&amp;rsquo;s next result check read freed memory and&#xA;freed it again. The same bug gave queries each other&amp;rsquo;s results, which shows as geometry popping.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Warzone 2100: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/warzone2100/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/warzone2100/technical/</guid>
				<description>&lt;p&gt;Warzone 2100 4.3.5, the last release with a GL 2.1 renderer, is our package, and it runs on the PS3 with the&#xA;right picture and sound after a set of big-endian, AltiVec and driver fixes. Its played session&#xA;(2026-10-25, a skirmish) had a 38 fps median and 5.4 s of stutter a minute. As a console game it is a poor&#xA;fit: mouse and keyboard only, a sparse 1999 interface, small at 1080p (Options &amp;gt; Video &amp;gt; Display Scale&#xA;helps). Stable &lt;code&gt;warzone2100&lt;/code&gt; 4.3.5-1+ps3.644; the user played it next to the PC build on 2026-10-20.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Warzone 2100: the black 3D view, etcpak and a GCC miscompile (2026-10-19/20)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/warzone2100/investigations/black-3d-view/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/warzone2100/investigations/black-3d-view/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Symptom.&lt;/strong&gt; The first PS3 smoke run (batch ssdroot6, warzone2100 ps3.566, 2026-10-19) had the HUD and the&#xA;minimap but a black 3D view, and garbled text.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Evidence.&lt;/strong&gt; The amd64 build on llvmpipe, cut down to the PS3&amp;rsquo;s GL 2.1 extension list&#xA;(&lt;code&gt;MESA_GL_VERSION_OVERRIDE=2.1&lt;/code&gt;, &lt;code&gt;MESA_GLSL_VERSION_OVERRIDE=120&lt;/code&gt;, &lt;code&gt;MESA_EXTENSION_OVERRIDE&lt;/code&gt; minus&#xA;everything nv47 lacks, ARB_texture_rg, ARB_texture_float and EXT_texture_array among them), rendered the&#xA;skirmish normally: not a GL 2.1 limit. The ppc64 build under qemu-user with llvmpipe and with softpipe was&#xA;black, as on the PS3. Shader overrides as an autoload mod showed the lightmap (fog of war) right and the&#xA;textures black; logging each texture upload against the amd64 run showed level 0 identical and level 1&#xA;down from 103538663 to 465002 (the byte sum of a 512x512 level). The game&amp;rsquo;s compiled&#xA;&lt;code&gt;stb_image_resize.cpp.o&lt;/code&gt; reproduced it on its own; it takes &lt;code&gt;-mcpu=cell&lt;/code&gt; (or 970, power6: AltiVec), &lt;code&gt;-O3&lt;/code&gt;&#xA;and &lt;code&gt;-DNDEBUG&lt;/code&gt; together.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Warzone 2100: the music was white noise (2026-10-20)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/warzone2100/investigations/opus-white-noise/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/warzone2100/investigations/opus-white-noise/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Symptom.&lt;/strong&gt; The second PS3 smoke run (ps3.617, stopped at 110 s) played white noise for the music.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Evidence.&lt;/strong&gt; Checked under qemu with OpenAL Soft&amp;rsquo;s wave writer at the main menu: a zero-crossing rate of&#xA;0.44 with ps3.617 (noise). The decode itself was right on big-endian: track19.opus through the game&amp;rsquo;s&#xA;opusfile, built with its flags, matches amd64 within 8 LSB. The Vorbis effects already asked &lt;code&gt;ov_read&lt;/code&gt; for&#xA;big-endian.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Cause.&lt;/strong&gt; The Opus decoder (the soundtrack, warzone2100-music) wrote its samples little-endian, but&#xA;OpenAL&amp;rsquo;s &lt;code&gt;AL_FORMAT_*16&lt;/code&gt; expects native order.&lt;/p&gt;</description>
			</item>
			<item>
				<title>What stalls in OpenArena: map reloads, bots joining and the lost decrementer (2026-10-17)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/openarena/investigations/reload-stalls/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/openarena/investigations/reload-stalls/</guid>
				<description>&lt;p&gt;Moved on 2026-10-26 from docs/STALLS.md (&amp;ldquo;OpenArena&amp;rdquo;) and docs/TESTS.md&amp;rsquo;s history rows, merged. The&#xA;stall recorder, report.py&amp;rsquo;s gameplay-only columns (which OpenArena&amp;rsquo;s reloads led to) and the kernel&amp;rsquo;s&#xA;lost decrementer, a cause outside the game that OpenArena showed first, stay described in&#xA;&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/docs/STALLS.md#why-frames-stalled-the-lost-decrementer&#34;&gt;docs/STALLS.md&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;symptom&#34;&gt;Symptom&lt;/h2&gt;&#xA;&lt;p&gt;The first stall-recorder runs (ioquake3 ps3.379, the timedemo looped, 20261017T233701Z and T234549Z)&#xA;had 17.6-17.9 s of stall time in the window, 81% of it on the main thread&amp;rsquo;s CPU.&lt;/p&gt;&#xA;&lt;h2 id=&#34;evidence&#34;&gt;Evidence&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;passsplit.py&lt;/code&gt; splits it by where it falls in a pass:&lt;/p&gt;</description>
			</item>
			<item>
				<title>X-Moto: game-side batching beat the driver rounds (2026-10-17)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/xmoto/investigations/game-side-batching/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/xmoto/investigations/game-side-batching/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Symptom.&lt;/strong&gt; X-Moto, a 2D game, played at 35-47 fps: a GL 1.x game held back by the PPE. The Mesa rounds&#xA;moved it a little each: ps3.246 35 to 37 (HUD median, underruns 208 to 126), ps3.262 39 to 47 (+21%,&#xA;&lt;a href=&#34;../../test-runs/#batch-2026-10-17-mesa-262&#34;&gt;batch 2026-10-17-mesa-262&lt;/a&gt;), and ps3.299 cost 5% against ps3.282 in the same boot (44.5 against 47.0;&#xA;neither 0027 nor 0030 off restored it, 0031 off and 0028 off gave 46 each,&#xA;&lt;a href=&#34;../../test-runs/#batch-2026-10-17-mesa-282-ab&#34;&gt;batch 2026-10-17-mesa-282-ab&lt;/a&gt;). A fixed &lt;code&gt;kick100&lt;/code&gt; cost 9% (&lt;a href=&#34;../../test-runs/#batch-2026-10-17-mesa-282-kick100&#34;&gt;batch 2026-10-17-mesa-282-kick100&lt;/a&gt;).&lt;/p&gt;</description>
			</item>
			<item>
				<title>X-Moto: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/xmoto/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/xmoto/technical/</guid>
				<description>&lt;p&gt;X-Moto 0.6.3 runs at 1920x1080 with the right picture and sound. Our package batches the game&amp;rsquo;s OpenGL&#xA;drawing (a frame went from 18,500 GL calls to 165), which took the benchmark replay from 44.5 to about 160&#xA;fps; its played sessions ran at the 60 fps vsync cap with clean sound (&amp;ldquo;flawless&amp;rdquo;, the player). It is one&#xA;of the games where game-side batching paid most.&lt;/p&gt;&#xA;&lt;h2 id=&#34;packages-and-patches&#34;&gt;Packages and patches&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;xmoto&lt;/code&gt;, &lt;code&gt;xmoto-data&lt;/code&gt; (&lt;code&gt;0.6.3+repack-1+ps3.N&lt;/code&gt;, &lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/tree/main/gamedb/games/xmoto/packages/xmoto&#34;&gt;packages/xmoto&lt;/a&gt;), replacing Debian&amp;rsquo;s.&lt;/p&gt;</description>
			</item>
			<item>
				<title>X-Moto&#39;s batches copied at every draw (2026-10-18)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/xmoto/investigations/client-array-copies/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/xmoto/investigations/client-array-copies/</guid>
				<description>&lt;p&gt;Moved on 2026-10-26 from docs/HOTPATHS.md (&amp;ldquo;X-Moto&amp;rsquo;s client arrays&amp;rdquo; and the &amp;ldquo;Measured on the PS3&amp;rdquo;&#xA;rows), where Mesa&amp;rsquo;s side of client vertex arrays stays.&lt;/p&gt;&#xA;&lt;h2 id=&#34;symptom&#34;&gt;Symptom&lt;/h2&gt;&#xA;&lt;p&gt;The first profiling batch (2026-10-18, Mesa ps3.299) put 5.5% of X-Moto&amp;rsquo;s CPU (profile 013240, the&#xA;credits replay at 154 fps) in &lt;code&gt;u_upload_data&lt;/code&gt;, Mesa&amp;rsquo;s copy of client vertex arrays: memcpy &amp;lt;&#xA;&lt;code&gt;u_upload_data&lt;/code&gt; 5.3%, the biggest single X-Moto item in the graphics stack.&lt;/p&gt;&#xA;&lt;h2 id=&#34;evidence&#34;&gt;Evidence&lt;/h2&gt;&#xA;&lt;p&gt;All of it is xmoto&amp;rsquo;s own batches (patch 0001 batches DrawLib&amp;rsquo;s primitives per state run), drawn from a&#xA;client array that Mesa copies at every draw. 3.9 of the 5.5% is the minimap: &lt;code&gt;renderMiniMap &amp;gt; drawCircle&lt;/code&gt;, a circle of 8 segments per sprite entity in the minimap&amp;rsquo;s box (933 a frame in the credits&#xA;replay, ~17000 batch vertices). The copy goes into GART, which ps3rsx maps cacheable (ordinary RAM,&#xA;IOMMU-coherent).&lt;/p&gt;</description>
			</item>
			<item>
				<title>Yamagi Quake II: OpenAL played white noise (2026-10-16)</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/yquake2/investigations/openal-white-noise/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/yquake2/investigations/openal-white-noise/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Symptom.&lt;/strong&gt; The first runs of our ppc64 build (+ps3.229) drew right, but every sound effect was loud&#xA;white noise (&lt;a href=&#34;../../test-runs/#batch-2026-10-16-yquake2-white-noise&#34;&gt;batch 2026-10-16-yquake2-white-noise&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Cause.&lt;/strong&gt; The game loads its 16-bit WAV samples as they are in the file, little-endian, and hands them&#xA;to OpenAL as &lt;code&gt;AL_FORMAT_*16&lt;/code&gt;, which means native byte order: on a big-endian host every sample had its&#xA;bytes swapped.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Fix.&lt;/strong&gt; Patch 0001 swaps the 16-bit samples to host byte order at load (+ps3.240,&#xA;&lt;a href=&#34;../../test-runs/#batch-2026-10-16-yquake2-byteswap&#34;&gt;batch 2026-10-16-yquake2-byteswap&lt;/a&gt;). The user confirmed the sound by ear. The SDL audio path&#xA;(&lt;code&gt;s_openal 0&lt;/code&gt;, variant &lt;code&gt;sdlsound&lt;/code&gt;) is a second way to the card, kept as a variant.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Yamagi Quake II: technical notes</title>
				<link>https://walnut.nanobyte.dev/gamedb/games/yquake2/technical/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://walnut.nanobyte.dev/gamedb/games/yquake2/technical/</guid>
				<description>&lt;p&gt;Our build of Debian&amp;rsquo;s &lt;code&gt;yquake2&lt;/code&gt; 8.70 on its gl1 renderer, with the Quake II demo data. It plays the demo&#xA;pak&amp;rsquo;s timedemo at 68.7 steady fps with almost no stalls (&lt;a href=&#34;../test-runs/#batch-2026-10-18-mesa-407-lut&#34;&gt;batch 2026-10-18-mesa-407-lut&lt;/a&gt;) since its&#xA;random-number table shrank from 32 MB to 64 KB, and its played session had a 60 fps median, a 1% low of&#xA;33, no dropouts and no crash.&lt;/p&gt;&#xA;&lt;h2 id=&#34;packages-data-and-settings&#34;&gt;Packages, data and settings&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;yamagi-quake2&lt;/code&gt;, &lt;code&gt;yamagi-quake2-core&lt;/code&gt; (&lt;code&gt;/usr/lib/yamagi-quake2/quake2&lt;/code&gt;, renderers &lt;code&gt;ref_gl1&lt;/code&gt; and&#xA;&lt;code&gt;ref_gl3&lt;/code&gt;), &lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/tree/main/gamedb/games/yquake2/packages/yquake2&#34;&gt;packages/yquake2&lt;/a&gt;, &lt;code&gt;COMPONENT=contrib&lt;/code&gt;: debian-ports builds nothing&#xA;arch-specific in contrib, so Debian has no ppc64 binary. The gl1 renderer (GL 1.4 fixed function) is&#xA;the one that runs; gl3 and gles3 need GL 3.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/gamedb/games/yquake2/packages/yquake2/patches/0001-Sound-swap-16-bit-WAV-samples-to-host-byte-order-on-.patch&#34;&gt;0001&lt;/a&gt;&#xA;swaps the 16-bit WAV samples to host byte order at load: uploaded little-endian, they played as white&#xA;noise through OpenAL (&lt;a href=&#34;../investigations/openal-white-noise/&#34;&gt;the investigation&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/gamedb/games/yquake2/packages/yquake2/patches/0002-KISS-PRNG-lag-table-size-from-YQ2_KISS_QSIZE-default.patch&#34;&gt;0002&lt;/a&gt;&#xA;&lt;code&gt;YQ2_KISS_QSIZE&lt;/code&gt;: the KISS PRNG&amp;rsquo;s lag table, allocated at first use with 4096 entries by default&#xA;instead of a static 16 MiB array in both &lt;code&gt;quake2&lt;/code&gt; and &lt;code&gt;game.so&lt;/code&gt;&#xA;(&lt;a href=&#34;../investigations/prng-table/&#34;&gt;the investigation&lt;/a&gt;). Its upstream offer is drafted in&#xA;&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/gamedb/games/yquake2/upstream.md&#34;&gt;upstream.md&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/gamedb/games/yquake2/packages/yquake2/patches/0003-yq2.cfg-W-A-S-D-and-a-game-controller-s-buttons-by-d.patch&#34;&gt;0003&lt;/a&gt;&#xA;the default bindings (&lt;code&gt;yq2.cfg&lt;/code&gt;, run after id&amp;rsquo;s &lt;code&gt;default.cfg&lt;/code&gt; and before the player&amp;rsquo;s &lt;code&gt;config.cfg&lt;/code&gt;):&#xA;W/A/S/D instead of Yamagi&amp;rsquo;s E/S/D/F (the power shield from W to E), and a game controller&amp;rsquo;s buttons,&#xA;which Yamagi left unbound (the sticks moved and looked, nothing fired): R2 fires, L2 walks, Cross&#xA;jumps, Circle crouches, L1/R1 the previous/next weapon, Square uses the item, Triangle the inventory,&#xA;the D-pad left/right selects an item, up the help computer, down drops the item, Select the score;&#xA;Start is the menu already. A saved &lt;code&gt;config.cfg&lt;/code&gt; keeps its own bindings (Yamagi writes them all), so a&#xA;home that has played keeps E/S/D/F until Options, Customize controls, &amp;ldquo;reset to defaults&amp;rdquo;. Checked on&#xA;the PS3 (2026-10-29, a fresh home): the config.cfg the game writes has &lt;code&gt;bind w &amp;quot;+forward&amp;quot;&lt;/code&gt;,&#xA;&lt;code&gt;bind e &amp;quot;use power shield&amp;quot;&lt;/code&gt;, &lt;code&gt;bind BTN_SOUTH &amp;quot;+moveup&amp;quot;&lt;/code&gt;, &lt;code&gt;bind TRIG_RIGHT &amp;quot;+attack&amp;quot;&lt;/code&gt;; the pad by hand is&#xA;for a played session.&lt;/li&gt;&#xA;&lt;li&gt;Two menu entries of ours (&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/tree/main/gamedb/games/yquake2/desktop/launchers&#34;&gt;desktop/launchers&lt;/a&gt;), the gl1 renderer fullscreen at the&#xA;desktop&amp;rsquo;s resolution (&lt;code&gt;r_mode -2&lt;/code&gt;): &amp;ldquo;Quake II (demo)&amp;rdquo;, &lt;code&gt;-datadir /usr/share/games/quake2-demo&lt;/code&gt;, and&#xA;&amp;ldquo;Quake II&amp;rdquo;, the full game, &lt;code&gt;-datadir /usr/share/games/quake2&lt;/code&gt;. Both are packed hidden (&lt;code&gt;NoDisplay=true&lt;/code&gt;)&#xA;with &lt;code&gt;X-Walnut-Requires=&lt;/code&gt; their data&amp;rsquo;s &lt;code&gt;baseq2/pak0.pak&lt;/code&gt; (&lt;code&gt;/usr/share/games/quake2-demo/...&lt;/code&gt;,&#xA;&lt;code&gt;/usr/share/games/quake2/...&lt;/code&gt;): ps3-game-menu shows each only when that file exists. The full game&amp;rsquo;s data is game-data-packager&amp;rsquo;s &lt;code&gt;quake2-full-data&lt;/code&gt; (build.toml &lt;code&gt;[data_setup]&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;The data&lt;/strong&gt; (licensed): &lt;code&gt;quake2-demo-data&lt;/code&gt; (&lt;code&gt;/usr/share/games/quake2-demo/baseq2/&lt;/code&gt;, the demo&amp;rsquo;s&#xA;&lt;code&gt;baseq2&lt;/code&gt; with &lt;code&gt;demos/q2demo1.dm2&lt;/code&gt; in its pak), built once with game-data-packager 89 (&lt;code&gt;make game-data&lt;/code&gt;,&#xA;the demo archive downloaded from id&amp;rsquo;s mirrors and kept in &lt;code&gt;build/downloads/game-data&lt;/code&gt;) as&#xA;&lt;code&gt;quake2-demo-data_89_all.deb&lt;/code&gt;, Section &lt;code&gt;local/games&lt;/code&gt;, and published once to the licensed suite. Quake&#xA;II&amp;rsquo;s demo may not be redistributed at all. game-data-packager&amp;rsquo;s output isn&amp;rsquo;t reproducible: the version&#xA;89 file the LAN repository published is in the retirement backup&amp;rsquo;s &lt;code&gt;ps3-licensed-debs/&lt;/code&gt;, and &lt;code&gt;make publish DEBS=&amp;quot;&amp;lt;that file&amp;gt;&amp;quot;&lt;/code&gt; before the next &lt;code&gt;make game-data&lt;/code&gt; keeps it the same. The full game needs the&#xA;player&amp;rsquo;s own Quake II data (the data guide on the game&amp;rsquo;s page).&lt;/li&gt;&#xA;&lt;li&gt;The config lives in &lt;code&gt;~/.local/share/YamagiQ2/baseq2/config.cfg&lt;/code&gt; (&lt;code&gt;~/.yq2&lt;/code&gt; before the XDG build).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;how-it-performs&#34;&gt;How it performs&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Bench (&lt;a href=&#34;../test-runs/#batch-2026-10-18-mesa-407-lut&#34;&gt;batch 2026-10-18-mesa-407-lut&lt;/a&gt;, same boot, x2): &lt;code&gt;kiss4k&lt;/code&gt; (now the default) against the old&#xA;table: RSS 125 to 56 MB, swap used 80 to 9 MB, gameplay stalls 22.6 to 0.05 s, longest frame 4.5 s to&#xA;91 ms, steady 65.7 to 68.7, 1% low 20.1 to 31.1, 46 MB free at the lowest (12 before), 48 MB of VRAM,&#xA;no underruns.&lt;/li&gt;&#xA;&lt;li&gt;How it got there: first runs on 2026-10-17 gave 56.1 fps with OpenAL, 58.4 with SDL audio; Mesa ps3.246&#xA;51.4, ps3.262 63.9 (+14-24%, &lt;a href=&#34;../test-runs/#batch-2026-10-17-mesa-262&#34;&gt;batch 2026-10-17-mesa-262&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The recipe (&lt;a href=&#34;https://github.com/nanobyte-dev/walnut-linux/blob/main/gamedb/games/yquake2/benchmark/recipe.sh&#34;&gt;benchmark/recipe.sh&lt;/a&gt;) runs the engine directly (Debian&amp;rsquo;s &lt;code&gt;quake2&lt;/code&gt;&#xA;wrapper is contrib, not ours) on the demo pak&amp;rsquo;s only demo, &lt;code&gt;+timedemo 1 +demomap q2demo1.dm2&lt;/code&gt;, vsync&#xA;off. The timedemo repeats in one session: autoexec.cfg&amp;rsquo;s &lt;code&gt;bench&lt;/code&gt; alias sets &lt;code&gt;nextdemo&lt;/code&gt; again,&#xA;disconnects (which prints the pass&amp;rsquo;s line; a chained demomap would reconnect and clear the counters) and&#xA;starts the demo cold. Each pass also prints &amp;ldquo;ERROR: Disconnected from server&amp;rdquo;. Variants: &lt;code&gt;sdlsound&lt;/code&gt;,&#xA;&lt;code&gt;kissbig&lt;/code&gt;, &lt;code&gt;kiss4k&lt;/code&gt;, the OpenAL Soft variants.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
