시몽

Just a tech.

Status update, May 2020

This month I’ve started working with Valve, the company behind the Steam game platform. I’ll be helping them improving gamescope, their gaming Wayland compositor. Unlike existing compositors, gamescope uses Vulkan and libliftoff. Because these are pretty new technologies, there are a lot of missing pieces in various projects. Working on gamescope involves sending patches to other projects across the graphics stack to get everything working properly, this is pretty cool. For instance, I’ve sent a RADV patch to fix Vulkan DMA-BUF import.

In other Wayland news, I’ve worked a lot on wlroots’ DRM backend. DRM has two interfaces: the legacy interface, which we need to continue to support for older drivers, and the atomic interface, which has all the shiny new features. The atomic interface allows to take better advantage of modern GPUs: libliftoff needs the atomic interface to use hardware planes.

The legacy interface provides a lot of functions to update the GPU state (e.g. drmModeSetCrtc to set the mode, drmModeSetCursor to set the cursor image, drmModeMoveCursor to move it and so on). The atomic interface, on the other hand, allows the compositor to submit the whole GPU state in one commit. Up until now, we were using the atomic interface just like the legacy interface, submitting a lot of small atomic commits, each one changing part of the state. With the help of Scott Anderson I’ve incrementally reworked the DRM backend to stop doing that and to submit a single atomic commit per page-flip instead.

The next step is to add support for test-only atomic commits, allowing compositors to check whether a configuration will work before applying it. This should help compositors avoid some black-screen-on-hotplug situations. This also paves the way for libliftoff support in wlroots. On the long run, all of this work will integrate with output layers and the scene-graph.

The mako notification daemon is getting some interesting improvements. Ongy has been working on multiple surface support, which will allow users to specify the notification position on a per-notification basis. Up until now, this wasn’t possible; all notifications were showing up next to each other. For example, important notifications could show up over fullscreen apps, or volume/brightness notifications could show up in the middle of the screen. This will enable a whole new class of use-cases!

Additionally, the notification icon position can now be customized. I also have a work-in-progress patch to allow commands to be executed when a new notification appears.

I’ve also started working on a static linker, sld. My goal is to keep it small and simple. Right now it can already link exit(42) and “Hello World”! The next step is to link “Hello World” with musl, which is pretty close (mostly blocked by .bss support). I still need to redesign the current code to allow for dead code elimination, so I don’t expect the current architecture to stay as-is for long. Working on a linker has been pretty fun so far! (And omitting dynamic linking sure avoids a lot of complexity and magic.)

Other projects have seen various improvements. Max Mazurov has contributed a lot of patches for my Go libraries, adding client support to go-milter and server OAUTHBEARER support to go-sasl among a lot of other things. sidediff now supports patches in addition to diffs, so you can curl a lists.sr.ht patch directly into it. xdg-desktop-portal-wlr 0.1.0 has been released and is proving pretty stable, allowing Sway users to use their web browser’s screen sharing feature. The webmail project formely known as koushin has been renamed to alps. Drew DeVault and myself have been pushing a lot of small features and bug fixes.

And that’s all for this month!


Questions, comments? Please use my public inbox by sending a plain-text email to ~emersion/public-inbox@lists.sr.ht.

Articles from blogs I follow

Status update, May 2020

Hello, future readers! I am writing to you from one day in the past. I finished my plans for today early and thought I’d get a head start on writing the status updates for tomorrow, or rather, for today. From your reference frame, that is. Let’s start with W…

via Drew DeVault's Blog

From Bifrost to Panfrost - deep dive into the first render

glmark2-es2 -btexture In Panfrost’s infancy, community members Connor Abbott and Lyude Paul largely reverse-engineered Bifrost and built a proof-of-concept shader dis/assembler. Meanwhile, I focused on the Midgard architecture (Mali T600+), building an Ope…

via On Life and Lisp

Moral compass: In praise of openness

via Marek's idea of the day

Generated by openring