Skip to content

v1: gpu-first

Latest

Choose a tag to compare

@paveluv paveluv released this 13 Nov 21:20
· 51 commits to main since this release
  • The world draws on the GPU: every window is a list of 32-byte records that one shader draws, and Cairo is gone (8c45564). Vulkan on Linux, with lavapipe on the CPU where no GPU opens, and Metal on a Mac (9a652e7).
  • Shaders written in Scheme: paints that fill a box, compute shaders over buffers, a CPU twin to call one pixel at a time, and a guide with examples to try, docs/SHADERS.md (b837d75). A compute run and its read-back work from a REPL (e037778).
  • Boids 3D: a murmuration of up to 4,096 birds, stepped, binned and drawn by four shaders, in an app's sandbox (f2252ae), over a sunset sea (83ac7e9).
  • A window is drawn again only when it changes; moved or raised, it isn't drawn at all (3995abc). Nothing asked for, no frame (79f3e83).
  • The world runs on a thread of its own, core1, while core0 holds the window and presents frames on the first (cf74bb8). The boot is a chain, main.ss to core0 to core1 to the world, each layer given only what its export list names (1dec885).
  • Frames paced by the screen: locked to core0 taking each frame (439e521), and where the compositor reports its latches (Wayland, the Mac), a tick begins just in time for the next one, learning how much lead it needs (85bf525, b32e4fb).
  • The screen says what became of each frame: Wayland's presentation reports and Metal's presented handlers (dd3edd3, 8e0852f), joined to the input each frame shows, so input-to-screen latency is measured, not guessed (7e3288f).
  • The Pipeline, a new app that shows a frame's way from each window's draw procedure to the screen, live, to find where its time goes (8c45564).
  • GPU buffers, images and lists go once nothing holds them (f6e30fb), and collections wait until the frame is sent (290f48b, 88b2fbf).
  • A trace of each frame in a checkout with .work, written when the window closes, on Ctrl-C, or when the world stops stepping (dd3edd3, c292a2f).
  • The Debug REPL: a socket for a debugger or an agent, open only while its window is (498bc96).
  • The Pacer Lab tries the pacer's settings on Schevana itself as it's used (6ee58a2).
  • Shaders mean the same on every GPU: integer division, rounding and evaluation order defined, every shader checked by spirv-val (f4d61e3, b3a2d59, 7d96bcd, fe0db9b).
  • A programmer's guide in docs/, fourteen pages taught at the REPL, and every example in them run by a test (f9884f7, e54eeaf, 9fe69c3, b5ea3bf, 7e62a5c). README now says what Schevana is in 125 lines (4ccdb23).
  • Apps explain themselves: tooltips say what Monitor's Ticks and Flags mean, what each control in Life and Boids does, every REPL opens with its keys, and menus show their shortcuts (67279cd to 75a6c0d).
  • (repl 'private) and (repl 'pure) replace the Private and Pure REPL apps (1411f0d); a REPL's Tab always completes (96bef17).
  • With NVIDIA's driver on Wayland, one module option fixes frames the compositor showed twice: docs/LINUX_NVIDIA_TUNING.md (0ab6cfd).
  • Runs on Linux and macOS.