v1.2 — Round v8 wrap (lightmap+multitex hygiene + icon fix + G3 demo3 recovery)
·
73 commits
to master
since this release
One fat universal binary, six retro Macs spanning 23 years (1999 G3 → 2019 i5 iMac).
Drop-in install
- Download
quakespasm-fat-app-v0.97.0.zip - Unzip; you get
Quakespasm.app+id1/(per-machine autoexec configs) - Drop
id1/PAK0.PAK+id1/PAK1.PAKfrom your registered Quake install in next to the app - Double-click
Quakespasm.app
The fat binary holds three slices (ppc_750 G3, ppc_7400 G4 + AltiVec, x86_64 Lion+). dyld picks the right one at launch. host.c reads sysctl hw.model and chains the right per-machine autoexec on top of the per-arch baseline, so the same bundle delivers a hand-tuned visual stack on each machine without a per-target build.
Bench fleet (full grid this round, 84d3597)
| Machine | OS | GPU | demo1 1024 | demo3 1024 (lava-heavy) |
|---|---|---|---|---|
| yosemite (PowerMac1,1, 1999, G3 449 MHz) | Panther 10.3.9 | Rage 128 16 MB | 17.35 | 20.70 |
| sawtooth (PowerMac3,1, 1999, G4 500 MHz) | Tiger 10.4.11 | GeForce2 MX 32 MB | 40.30 | 35.75 |
| quicksilver (PowerMac3,5, 2001, G4 733 MHz) | Tiger 10.4.11 | Radeon 9000 Pro 64 MB | 64.60 | 61.05 |
| mini-g4 (PowerMac10,1, 2005, G4 1.25 GHz) | Tiger 10.4.11 | Radeon 9200 32 MB | 50.30 | 45.30 |
| mini-intel (Macmini2,1, 2007, C2D 2.33 GHz) | Lion 10.7.5 | GMA 950 64 MB | 75.95 | 36.85 |
| imac-2019 (iMac19,1, 2019, i5-9600K) | Sequoia 15.7.5 | Radeon Pro 580X 8 GB | 1619.05 | 1314.90 |
What's new vs v1.1
v8 lightmap + multitex hygiene cluster (already in master):
gl_lightmap_subrect 1— honor the existing dirty-rect'sl/wfields instead of uploading full 256-wide rows. ~16× upload-bandwidth saved per dirty lightmap on R128.- multitex enable/disable hoisted out of per-texture loop in
R_DrawTextureChains_Multitexture. - Per-frame dirty-lightmap list in
R_RenderDynamicLightmapsinstead of walking every lightmap. - 2-texel scalar unroll of
R_BuildLightMap's compose loop (G3 path).
v8.1 G4 AltiVec defaults flipped on (sawtooth/quicksilver/mini-g4):
- Lightmap-compose AltiVec path enabled by default (was opt-in).
- Per-texel dlight attenuation AltiVec enabled by default.
v8 followup — G3 demo3 lava-heavy regression fix:
- Round v5 wrap polish enabled
r_lavaalpha/r_telealpha/r_slimealpha0.6 across yosemite + the G4 trio. Bisect on yosemite demo3 1024 (e1m6 "The Door To Chthon", lava-heavy) showedr_lavaalpha 0.6alone drops fps from 19.65 → 14.40 (-26 %), pushing G3 below the 20-fps floor. Tele + slime alpha together also regressed. - Decision: drop those three on G3 (
autoexec-yosemite.cfg); keepr_wateralpha 0.6(water see-through is the most-common transparent-liquid effect in regular play). Yosemite demo3 1024 recovered to 20.60 fps. - G4 trio + Lion + iMac keep all four liquid alphas at 0.6 (different fillrate envelope).
Tiger/Panther icon display fix:
- The bundled
.icnsnow contains ONLY classic legacy chunks (ICN#,ics#,is32,s8mk,il32,l8mk,ih32,h8mk,it32,t8mk). Apple'siconutiladds modernTOC+ic07-ic14PNG chunks unconditionally, and Panther / Tiger Finder bail on those — verified by progressive-A/B against Apple's stockCalculator.icns. - Trade-off: max chunk size 128×128, so Lion+ Finder upscales for Retina display sizes. Acceptable; the alternative (per-OS
.icnsswap inside the bundle) was a bigger code surface. - New tooling:
scripts/rebuild-icon.shis now pure Python (Pillow + hand-rolled RLE), runs in ~1 second instead of the previous iconutil-on-Lion round-trip.
deploy.sh hardening:
rsync --checksum(not just size+mtime) prevents stale files surviving deploy. We hit a sawtooth case where--partialleft a 298 KB stale ICNS while local was 2.6 MB and--size+mtimeskipped the update.- Post-deploy md5 verification of binary + icon, with portable
md5/md5sumprobe (Lion BSD, Tiger/Panther, Linux all covered).
Hardware reach
| Era | First model | Last model | Span |
|---|---|---|---|
| PowerPC | PowerMac1,1 (1999) | PowerMac10,1 (2005) | 6 years |
| Intel | Macmini2,1 (2007) | iMac19,1 (2019) | 12 years |
Six bench machines, 23 years of Apple silicon, one fat universal binary, one source tree.
Known constraints
- G3 yosemite ships at 800×600 default since round v9; 1024×768 is also playable on demo3 (20.7 fps) but interactive play feels sharper at 800×600. Override with
vid_width N; vid_height M; vid_restartin console. - Sawtooth GeForce2 MX is the only G4 without a fragment-shader water path; uses the classic-warp
r_oldwater 1fallback like the G3.
Source
- Master: https://github.com/matthewdeaves/old-mac-quakespasm
- Per-round PPC plan + bench history in
PPC_PLAN.md,MISTAKES.md,benchmarks/ - Forked from sezero/quakespasm; full attribution chain in
LICENSE.txt
🤖 Built with Claude Code