Un backend gráfico por GPU para Emacs: del prototipo con Metal al debate en emacs-devel

Fuentes: How I built a GPU backend for Emacs

El programador Andros Fenollosa relata en primera persona cómo construyó un backend gráfico por GPU para Emacs, capaz de delegar en la tarjeta gráfica el dibujado de texto, imágenes, vídeo, transiciones y efectos de cursor animados sin tocar el motor de redisplay xdisp.c. El proyecto nace de una pregunta aparentemente trivial: por qué Emacs sigue pintando con CPU en un portátil con GPU perfectamente capaz.

La pieza clave es una capa de abstracción neutral, definida en gfxdrv.h, que aísla la lógica de dibujado de la plataforma y expone un contrato de unas 25 operaciones primitivas (subir texturas, dibujar quads, presentar el frame). Sobre esa capa se implementa un primer driver con Metal para macOS y, después, otro con OpenGL para GNU/Linux. El criterio de éxito fue la paridad de píxeles: el mismo binario, con la GPU activada y desactivada, debía producir capturas casi idénticas, con un umbral del 0,055 % de píxeles divergentes.

El artículo describe con detalle los retos técnicos encontrados: diferencias de antialiasing entre CoreText y los shaders, colores de relieve, un error off-by-one en la posición vertical de los glifos, y el congelamiento del cursor animado al detener la escritura, resuelto sustituyendo CADisplayLink por un temporizador en Emacs Lisp con auto-pacing (60 Hz con fundido, 30 Hz en reposo). También cubre la reproducción de vídeo dentro de un búfer (incluido un mini frontend de YouTube), los cross-fade entre búferes, y el laborioso proceso de firma y notarización en macOS, agravado por los 1.564 archivos .eln de native-comp.

Fenollosa envió el 8 de junio de 2026 un parche RFC a emacs-devel y abrió un debate de más de cien mensajes que abarcó desde el rendimiento de cairo hasta la ética del uso de un LLM como copiloto, asunto que el autor declara abiertamente al inicio del texto.