Status update, May 2021
Hi!
This month, a lot has happened in the Wayland world as usual. The most exciting
news is the introduction of the new Pixman renderer in wlroots, allowing more
Wayland compositors to be used on setups lacking a proper GPU or GPU driver.
The use-cases include old hardware, hardware where an open-source driver isn’t
available, continuous integration, VMs, and more. The Pixman renderer should be
significantly faster than our previous llvmpipe-based fallback. That said,
there are still a lot of opportunities for optimizations (if you’re interested,
have a look at the various TODOs in render/pixman/renderer.c
).
In addition to the Pixman renderer, the backend + renderer + allocator initialization has been revamped to better accommodate for many types of backends and renderers (including third-party implementations). The initialization is a little tricky because each of these components is only compatible with a subset of the others. A DRM dumb buffer allocator has been introduced to allow the Pixman renderer to work with the DRM backend, and the GLES2 renderer has been made optional. The GLES2 renderer is now able to re-use DMA-BUF textures, improving performance on multi-GPU setups among other things. Much of this wlroots work has been done by bl4ckb0ne, thanks a lot!
In other Wayland news, I’ve started working on a new protocol:
linux-explicit-synchronization-v2. The first version relies on the kernel’s
sync_file
mechanism, but a new abstraction has been introduced since then:
drm_syncobj
timelines. The timelines remove many limitations from the
previous API and are easier to use, see the
Vulkan blog post. The goal of the new Wayland
protocol is to allow compositors which haven’t implemented v1 yet to
fast-forward to the new API without having to care too much about the legacy
API. The triggers for all of this work are the repeated calls to action
by Jason Ekstrand, and the recent (and lengthy) thread about upcoming AMD hardware
on dri-devel. I’ve also submitted another core protocol patch
to allow clients to better track buffer releases, a service that was provided
by linux-explicit-synchronization-v1.
I’ve continued contributing to Mesa: as part of my Valve-sponsored work, all of my libva patches have been merged and radv can now import tiled multi-planar buffers. Additionally, I’ve started working on a new EGL extension to allow rendering to main memory. This would allow the GLES2 renderer in wlroots 0.13+ to be used with llvmpipe, something that has been lost during the renderer v6 upgrade. The main motivation is to allow compositors that hard-depend on OpenGL (e.g. Wayfire) to work on setups without a GPU.
This month marks the very first release of my soju IRC bouncer. Thanks a lot to all contributors, especially delthas and Hubert Hirtz for their significant involvement! I’ve been using soju for a while, and I hope we’ll be able to offer an upgrade for the traditional IRC experience (while remaining in line with the spirit of IRC). There are many in-progress workstreams, including offering a better API to register an account and improving chat history fetching.
Speaking of releases, I’ve also tagged the long overdue mako 1.5. The notification daemon has gained a whole lot of new features: more customization options, an history buffer, regex matching, better support for non-systemd distributions, among other things. In the master branch, support for synchronous hints has been merged, making it easier to replace previous notifications from scripts.
That’s about it for this month! As a spoiler for the next status update, I’ve started go-emailthreads, a new project to replace python-emailthreads. This should help lists.sr.ht get better at presenting email discussions and allow a full migration to GraphQL. Stay tuned for more!