Alyssa Rosenzweig

Photo of Alyssa I’m a graphics developer passionate about software freedom, working on the Asahi graphics driver (email). Select English blog posts are available here or as an RSS feed. 🏳️‍⚧️

Je suis une développeuse de pilotes graphiques, passionnée par le logiciel libre (courriel). Je travaille sur Asahi Linux. Ce site est en anglais, mais j’ai un compte francophone de Mastodon. 🏳️‍🌈


AAA gaming on Asahi Linux

Gaming on Linux on M1 is here! We’re thrilled to release our Asahi game playing toolkit, which integrates our Vulkan 1.3 drivers with x86 emulation and Windows compatibility. Plus a bonus: conformant OpenCL 3.0…

Vulkan 1.3 on the M1 in 1 month

Finally, conformant Vulkan for the M1! The new “Honeykrisp” driver is the first conformant Vulkan® for Apple hardware on any operating system, implementing the full 1.3 spec without “portability” waivers…

Conformant OpenGL 4.6 on the M1

For years, the M1 has only supported OpenGL 4.1. That changes today – with our release of full OpenGL® 4.6 and OpenGL® ES 3.2! Install Fedora for the latest M1/M2-series drivers…

The first conformant M1 GPU driver

Conformant OpenGL® ES 3.1 drivers are now available for M1- and M2-family GPUs. That means the drivers are compatible with any OpenGL ES 3.1 application. Interested? Just install Linux!

OpenGL 3.1 on Asahi Linux

Upgrade your Asahi Linux systems, because your graphics drivers are getting a big boost: leapfrogging from OpenGL 2.1 over OpenGL 3.0 up to OpenGL 3.1! Similarly, the OpenGL ES 2.0 support is bumping up to OpenGL ES 3.0. That means more playable games and more functioning applications…

Growing up Alyssa

When I was 10, I came out as transgender. I was a girl and I knew it.

I was one of the lucky ones…

Passing the reins on Panfrost

Today is my last day at Collabora and my last day leading the Panfrost driver.

It’s been a wild ride…

Buffer textures on the Apple GPU

This weekend’s project: implementing buffer textures on the Apple GPU, including support for RGB32 textures. That’s needed for GL 4.0, and the hardware doesn’t support it. But why should that stop us from having a little fun? (-…

Apple GPU drivers now in Asahi Linux

We’re excited to announce our first Apple GPU driver release!

We’ve been working hard over the past two years to bring this new driver to everyone, and we’re really proud to finally be here. This is still an alpha driver, but it’s already good enough to run a smooth desktop experience and some games…

Clip control on the Apple GPU

After a year in development, the open source “Asahi” driver for the Apple GPU is running real games. There’s more to do, but Neverball is already playable (and a lot of fun!)…

The Apple GPU and the Impossible Bug

In late 2020, Apple debuted the M1 with Apple’s GPU architecture, AGX, rumoured to be derived from Imagination’s PowerVR series. Since then, we’ve been reverse-engineering AGX and building open source graphics drivers. Last January, I rendered a triangle with my own code, but there has since been a heinous bug lurking…

Dissecting the Apple M1 GPU, part IV

After beginning a compiler for the Apple M1 GPU, the next step is to develop a graphics driver exercising the compiler. Since the last post two weeks ago, I’ve begun a Gallium driver for the M1, implementing much of the OpenGL 2.1 and ES 2.0 specifications. With the compiler and driver together, we’re now able to run OpenGL workloads like glxgears and scenes from glmark2 on the M1 with an open source stack. We are passing about 75% of the OpenGL ES 2.0 tests in the drawElements Quality Program used to establish Khronos conformance. To top it off, the compiler and driver are now upstreamed in Mesa

Dissecting the Apple M1 GPU, part III

After a few weeks of investigating the Apple M1 GPU in January, I was able to draw a triangle with my own open source code. Although I began dissecting the instruction set, the shaders there were specified as machine code. A real graphics driver needs a compiler from high-level shading languages (GLSL or Metal) to a native binary. Our understanding of the M1 GPU’s instruction set has advanced over the past few months. Last week, I began writing a free and open source shader compiler targeting the Apple GPU. Progress has been rapid: at the end of its first week, it can compile both basic vertex and fragment shaders, sufficient to render 3D scenes. The spinning cube pictured above has its shaders written in idiomatic GLSL, compiled with the nascent free software compiler, and rendered with native code like the first triangle in January. No proprietary blobs here…

Software freedom isn’t about licenses – it’s about power.

A restrictive end-user license agreement is one way a company can exert power over the user. When the free software movement was founded thirty years ago, these restrictive licenses were the primary user-hostile power dynamic, so permissive and copyleft licenses emerged as synonyms to software freedom. Licensing does matter; user autonomy is lost with subscription models, revocable licenses, binary-only software, and onerous legal clauses. Yet these issues pertinent to desktop software do not scratch the surface of today’s digital power dynamics…

Dissecting the Apple M1 GPU, part II

Less than a month ago, I began investigating the Apple M1 GPU in hopes of developing a free and open-source driver. This week, I’ve reached a second milestone: drawing a triangle with my own open-source code. The vertex and fragment shaders are handwritten in machine code, and I interface with the hardware via the IOKit kernel driver in an identical fashion to the system’s Metal userspace driver…

Dissecting the Apple M1 GPU, part I

Apple’s latest line of Macs includes their in-house “M1” system-on-chip, featuring a custom GPU. This poses a problem for those of us in the Asahi Linux project who wish to run Linux on our devices, as this custom Apple GPU has neither public documentation nor open source drivers. Some speculate it might descend from PowerVR GPUs, as used in older iPhones, while others believe the GPU to be completely custom. But rumours and speculations are no fun when we can peek under the hood ourselves…

Fun and Games with Exposure Notifications

Exposure Notifications is a protocol developed by Apple and Google for facilitating COVID-19 contact tracing on mobile phones by exchanging codes with nearby phones over Bluetooth, implemented within the Android and iOS operating systems, now available here in Toronto…

America’s Rough Draft

I’m an 18-year-old pacifist girl living in Canada, mandated to register for “Selective Service”, the military database of all American males.

Unfortunately, that wasn’t a typo…

Kodi and SuperTuxKart on Panfrost

Back in October, Panfrost ran some simple benchmarks, like glmark. Five months later, Panfrost has grown from running benchmarks to real-world apps, like Kodi, and 3D games like SuperTuxKart and Neverball

The Federation Fallacy

Throughout the free software community, an unbridled aura of justified mistrust fills the air: mistrust of large corporations, mistrust of governments, and of course, mistrust of proprietary software. Each mistrust is connected by a critical thread: centralisation…

Monochromatic Portraits with GLSL

In my Computer Graphics Art class, we were assigned a monochromatic portrait project. Given a photograph of a subject, we were to split the image into a small number of discrete sections of varying brightnesses, all of the same colour. Typically, this process would be completed by hand in a tool like Krita or Photoshop…

A Panfrostian October

In the past month-and-a-half since the previous update on the free (open source) Panfrost driver for Mali GPUs, progress has been fervent! During the interim, Lyude Paul and I presented about the driver at the X.Org Developer’s Conference. Check out the talk (slides). Benchmarks included…

Panfrost on the RK3399 (Meow!)

In January 2018, I began using my C201 full-time. In June 2018, its charging port broke, apparently due to physical damage, and I was forced to discontinue my school laptop and Mali T760 development machine…

University Days

In June, I announced in #panfrost that I would be taking a break from Panfrost over the summer in order to focus on my summer classes, particularly during the hectic month of July. Luckily for my little graphics drivers, the summer has now elapsed, and my 3D voodoo has resumed. No command stream shall be left untouched…

Ooo, Shiny Textured Cube!

The libre Midgard driver, Panfrost has reached a number of new milestones, culminating in the above screenshot, demonstrating…

A Moving Mesa Midgard Cube

In the last Panfrost status update, a transitory “half-way” driver was presented, with the purpose of easing the transition from a standalone library abstracting the hardware to a full-fledged OpenGL ES driver using the Mesa and Gallium3D infrastructure…

Living On A Rockchip

I joke that I run the slowest machine in the free software community.

Amusing as it is to hold the title, it isn’t particularly an exaggeration…

The Half Way Driver

In the last update of the free software Panfrost driver, I unveiled the Midgard shader compiler. In the two weeks since then, I’ve shifted my attention from shaders back to the command stream, the fixed-function part of the pipeline. A shader compiler is only useful if there’s a way to run the shaders, after all…

Midgard Shaders with the Free NIR Compiler

In my last update on the Panfrost project, I showed an assembler and disassembler pair for Midgard, the shader architecture for Mali Txxx GPUs. Unfortunately, Midgard assembly is an arcane, unwieldly language, understood by Connor Abbott, myself, and that’s about it besides engineers bound by nondisclosure agreements. You can read the low-level details of the ISA if you’re interested…

The Word of the Week Is…. Shaders!

About two weeks ago, I published a screenshot of a smoothed triangle rendered with a free software driver on a Mali T760 with binary shaders

Pegasus Power

In Physics class, when considering power, the minds of the clever brony might be graced by the question, “How much power did Rainbow Dash produce when performing her famous Sonic Rainboom?”

Hilariously Fast Volume Computation with the Divergence Theorem

(No, there won’t be jokes.)

The following presents a fast algorithm for volume computation of a simple, closed, triangulated 3D mesh. This assumption is a consequence of the divergence theorem. Further extensions may generalise to other meshes as well, although that is presently out of scope…

My Name is Cafe Beverage

I have a secret, so secret that it cannot be whispered without multiple layers of encryption. So secret that it could only be told to the world under a pseudonym – an alter ego – except to the closest of friends on a “need to know” basis. So secret that this pseudonym only connected to the Internet through Tor, using the Tor Browser Bundle and Tor Messenger to maintain resilience against even the most subtle of identity leaks…

D.M.C.A

Young man, keep that file to yourself.
I said, young man, glue those books to the shelf.
I said, young man, you’re in piracy hell.
The police will seize that flash drive…

Made in Krita

I enrolled in “Computer Graphics Art”, a Photoshop class at my secondary school. The course description available online was sufficiently vague that I did not know beyond a reasonable doubt that it was focused on proprietary software. Once this became apparent on the first day of school, I sent an email to the teacher explaining my dilemma:

Metaprogramming NES emulator with tosh

Over the summer, I wrote an NES emulator in Scratch. Well, really, it was only from Scratch; the code itself was written in tosh by Tim Radvan. tosh is a text-based front-end to Scratch, which lets me manage large projects with vim, git, and – wait for it – metaprogramming! Metaprogramming, in its essence, means generating tosh code from other bits of tosh code to construct large programs with minimum effort. In ScratchNES, I used metaprogramming to generate the CPU emulator for the NES. It’s not magic…

Solving BIT Magic

Static code recompilation is a fascinating problem, and largely an unsolved one, because in general it’s impossible – that’s about as hard as you can get! Nevertheless, it’s possible in many cases, if you ignore certain features like self-modifying code…