I built a GPU back end for Emacs

(en.andros.dev)

83 points | by andros 2 days ago

12 comments

  • internet_points 1 minute ago
    could've guessed staying away from xdisp.c was a good idea, cf. the "Buttery Smooth Emacs"[0] post:

    > Keep in mind that Emacs xdisp.c tries to support five different toolkits (including two different major versions of GTK) with #ifdefs. There is no runtime abstraction. We define three or four different versions of each damn function. It’s a nightmare.

    [0] https://gist.github.com/ghosty141/c93f21d6cd476417d4a9814eb7...

  • arikrahman 3 minutes ago
    Aside from the wonderful contribution to Emacs, I have the utmost respect for how straight-forward you were with the 100% LLM generated code. The enlightening conversation on GPU freedom that ensued was also informative.
    • andros 1 minute ago
      I completely agree with you. For me, it was the best reward.
  • abstractbg 8 minutes ago
    Interesting improvement. My biggest issue with Emacs and the reason that I left it was because it was not multi-threaded. I wonder if is/can be multi-threaded now.
  • sph 35 minutes ago
    https://github.com/tanrax/emacs-gpu/blob/main/.github/assets...

    This massive speed-up on 4K screens makes me want to try it. The wayland pgtk version has such terrible latency I have to use the X11 build to avoid gnashing teeth during my working hours. And I think it's the X11 version that uses cairo, so the actual speedup in my case might be even larger.

    I reported the issue years ago, the pgtk maintainer confirmed, say they can't do much as they're using GTK3 which isn't hardware accelerated, so I have to wait until they migrate to GTK4 (in a decade or so). A bit disappointing, but that's open source.

    Looks like I'm not the only one suffering with a 4K screen: https://old.reddit.com/r/emacs/comments/ucv0at/awful_perform...

    • andros 17 minutes ago
      Good news on the Wayland front: there is already a working branch (wayland-pgtk-backend) that adds a PGTK binding on top of the same EGL/GLES driver, pending merge to main. If you want to try it before that, the branch is available on the repo.
    • arikrahman 10 minutes ago
      I didn't notice to much performance issue switching to PGTK on an ultrawide on Niri. Are you using the daemon to render Emacs as a client?
  • drob518 34 minutes ago
    Well done. Here’s hoping that a hand-written GPU backend gets developed based on this wonderful proof of concept. There’s no reason to not take advantage of the state of the art hardware when it’s available. And screens are only moving toward 4k and higher (6k or 8k).
    • andros 21 minutes ago
      Me too. In the meantime, I'll stick with this version :)
  • bingemaker 28 minutes ago
    Great work! Possible to have a patch that I can apply on 32.0.5 and try this out?
    • andros 21 minutes ago
      Yes, of course, I worked with the develop version until at a certain point I decided to downgrade to the stable versions. I'll be releasing more versions later; I'm still focused on fixing minor issues in Linux.
  • reinitctxoffset 18 minutes ago
    This is outstanding, if I have time I'll be switching over today.

    This is the kind of thing that could drive a truly free fork of emacs forward, it's enough better on realistic desktop displays to rally around and as the parent discovered "Free Software" at this point has very little to do with the freedom to do what I want on my computer in a low friction way: an ideological position on "GPUs" as a category is bizarre even by Late Soviet FSF standards. By all means cite a vendor and a policy, but even NVIDIA is in tree now, it's got the same software freedom as ext4 and I don't hear anyone talking about chains on that.

    In the age of machine assist emacs could get a modern fast/cachable build, clean under all the sanitizers, io_uring on Linux, deterministic clang formatting, compat break with zero-use junk from the 80s, WASM compilation for polyglot extension (I like lisp but I understand why some people don't), modern networking, modern chrome, 100% vscode compatible LSP, modern theming that defaults to something that doesn't drive users away. I would love to have a ten line init.el instead of 4k of workarounds.

    Maybe this can be the nvim moment.

    I love emacs but the nvim people have so many nice things and FSF emacs has a shelf life. If someone out of their own time and resources did a cross platform, mechanically verified, dramatically accelerated at HiDPI patch to basically anything else they'd be greeted like a hero.

    Keep up the good work legend.

  • juancn 36 minutes ago
    Doesn't just emacs render to a tty?

    Or is this for some Emacs build with its own renderer?

    • andros 33 minutes ago
      This is for the GUI build of Emacs, not the terminal (tty) version. Emacs has had a native GUI renderer since the 90s, on macOS it uses Cocoa/NS, on Linux it uses GTK or raw X11. This project replaces that CPU-based drawing pipeline with a GPU backend: Metal on macOS and OpenGL/EGL on Linux. The tty build is unaffected.
  • _doctor_love 26 minutes ago
    This is the way! Very nice work. I want it!
    • andros 21 minutes ago
      Thank you!
  • bjourne 18 minutes ago
    Cool! Regardless of whether your code gets merged, it shows that xdisp.c can be tamed. Like Roger Bannister who ran the miracle mile, you showed that it can be done. Hopefully more will chip in and slay the Emacs redisplay code beast.
    • andros 13 minutes ago
      Thank you, this means a lot!
  • skydhash 47 minutes ago
    This was almost a good read (a very good goal and a sensible approach), But the pacing of the article smells of LLM. I would suggest to do another pass at editing it out as it diminishes the story.
    • andros 37 minutes ago
      If you've reached that conclusion, I'm truly proud of my writing technique. I'm sorry to say, though, that your instincts are failing you this time. I write my articles by hand over several days, although it's true that I do consult AI to improve my style, expressions, find synonyms, create tables, and correct spelling mistakes. Thank you for your comment!
      • skydhash 6 minutes ago
        I don’t think it failed. I was reading it and it did not seem written by a LLM (which I was happy for). But a few sentences did have LLM style and they disrupted my reading flow.

        This is my heuristics: Usually when writing a story, authors adopt a fluid flow as they know they have your attention. Same as when telling a story. But LLM tooling usually adopt a highly emphatic tone similar to speeches: Short propositions, emotional crescendo, lots of contrast.

        The difference in style is like abruptly going from a conversation to having your interlocutors doing a marketing speech in front of a crowd of one. It’s really jarring.

        It’s not the whole piece. Just a few places here and there. If you’ve adjusted a few sentences, maybe try leaving them as is after fixing spelling mistakes.

      • reinitctxoffset 13 minutes ago
        FWIW no one can tell anymore. Claude stopped doing all the LLM ticks like 6 months ago. There's a whole industry of people trying to detect LLM writing and they're getting stomped, this can be and is extremely well studied in the literature.

        The criticism is that you did something wildly ambitious and pulled it off. The blog is just well written.

    • ghosty141 35 minutes ago
      Very much this. I really dislike the somewhat corporate and characterless sounding tone of AI.

      I really liked the part where he tried to get it into upstream emacs, most of these type of projects never even get there. But yeah things like "bring honest numbers" sounds just weird.

      • andros 29 minutes ago
        Please, have some mercy, English is not my first language! Thanks for the advice, I'll keep it in mind.
  • semessier 53 minutes ago
    cudos
    • qrios 36 minutes ago
      A new CUDA API? For DOS?
    • andros 49 minutes ago
      Why?