emacs-gpu 0.4.2
Stability release for the GNU/Linux OpenGL backend: the buffer-switch
flicker is gone and all continuous animation now runs off a single,
bounded pump.
Fixed
- One-frame flashes of old content when switching buffers. The
flashed frame turned out not to come from the GL swapchain at all:
it was the frame's XDBE back buffer, which keeps the last core-X
render (the half-painted startup frame) forever once the GPU path
takes over, and which an Expose event could swap on screen for one
vblank. The backend now drops the back buffer when it owns the frame.
Verified against the actual monitor scanout (kmsgrab at 60fps, 152
buffer switches with cross-fades): zero anomalous frames, where the
same soak previously detected dozens.
Changed
- Single animation pump. Cursor effects, buffer cross-fades and
inline video used to run on separate timers, each presenting on its
own; together they could push presents well above the refresh rate,
starving the Lisp timers and provoking driver-level stale-buffer
glitches. One pump now advances everything and presents at most once
per tick (60Hz while a fade runs, 30Hz otherwise, idle when nothing
animates). Inline video plays at its native frame rate again (tick
median 33.0ms; it used to slip to ~49ms under load). - The old per-subsystem primitives (
gpu-anim-tick,
gpu-transition-tick,gpu-video-tick) keep working;gpu-video-tick
now only presents when there is a fresh frame or the rectangle moved.
The Metal (macOS) driver shares the pump consolidation; the XDBE fix is
X11-specific.
Downloads
emacs-gpu-0.4.2-macos-arm64.zip: macOS 13+ (Apple Silicon), signed
and notarized, with native compilation (AOT) and tree-sitter. Unzip
and drag to Applications, orbrew install --cask tanrax/tap/emacs-gpu.emacs-gpu_0.4.2_amd64.ubuntu24.04.deb: Ubuntu 24.04+ / Mint 22+.emacs-gpu_0.4.2_amd64.debian12.deb: Debian 12 (bookworm).
Both include tree-sitter, native compilation (AOT) and the GStreamer
video path; they install as /usr/bin/emacs and conflict with the
distro emacs packages. EMACS_GPU_DISABLE=1 starts with the stock CPU
renderer.
Compared to the v0.4.0 macOS app, this build also picks up the image
texture-cache validation fix (cached textures are revalidated by image
spec, not pointer identity).