You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: content/about.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -59,7 +59,7 @@ Asahi Linux is a community, and everyone is invited to contribute. If you are in
59
59
60
60
Current major contributors are:
61
61
62
-
*[Alyssa Rosenzweig](https://rosenzweig.io/), the Asahi GPU lead. Alyssa is a Linux graphics hacker known for her work on reverse-engineering the Arm Mali GPUs to build the free Panfrost driver. She is an upstream Mesa3D developer today maintaining Asahi's OpenGL and Vulkan drivers.
62
+
*[Alyssa Rosenzweig](https://alyssarosenzweig.ca/), the Asahi GPU lead. Alyssa is a Linux graphics hacker known for her work on reverse-engineering the Arm Mali GPUs to build the free Panfrost driver. She is an upstream Mesa3D developer today maintaining Asahi's OpenGL and Vulkan drivers.
63
63
64
64
*[Dougall Johnson (dougallj)](https://github.com/dougallj), instruction set architecture extraordinaire. Dougall reverse-engineered much of the instruction set of the Apple GPU and has analyzed the timing of the Apple M1's CPU cores to infer microarchitectural details.
Copy file name to clipboardExpand all lines: content/blog/2021/03/11-progress-report.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -283,7 +283,7 @@ And then, of course, there is the [GPU](https://en.wikipedia.org/wiki/Graphics_p
283
283
284
284
We could keep talking in depth for another 10000 words, but alas, this post is already too long. However, if you'd like to check out more things that have been going on in the community in these two months, here’s a list of things you shouldn’t miss:
285
285
286
-
*[Alyssa](https://rosenzweig.io/)'s work reverse engineering the M1 GPU ([part 1](https://rosenzweig.io/blog/asahi-gpu-part-1.html), [part 2](https://rosenzweig.io/blog/asahi-gpu-part-2.html))
286
+
*[Alyssa](https://alyssarosenzweig.ca/)'s work reverse engineering the M1 GPU ([part 1](https://alyssarosenzweig.ca/blog/asahi-gpu-part-1.html), [part 2](https://alyssarosenzweig.ca/blog/asahi-gpu-part-2.html))
287
287
*[Dougall](https://twitter.com/dougallj)'s [GPU ISA docs](https://dougallj.github.io/applegpu/docs.html), [CPU microarchitecture docs](https://dougallj.github.io/applecpu/firestorm.html), and [AMX instruction set docs](https://gist.github.com/dougallj/7a75a3be1ec69ca550e7c36dc75e0d6f)
288
288
*[Iris](https://twitter.com/modwizcode)' work [bringing M1 support to QEMU](https://twitter.com/modwizcode/status/1360308258519605254)
289
289
* Mark's work porting [U-Boot](https://github.com/kettenis/u-boot/commits/apple-m1) and [OpenBSD](https://marc.info/?l=openbsd-arm&m=161386122115249&w=2) to the M1. He even has PCIe support already!
Copy file name to clipboardExpand all lines: content/blog/2021/08/14-progress-report.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -42,7 +42,7 @@ On top of the hypervisor, we've built a flexible hardware I/O tracing framework
42
42
43
43
One of the biggest challenges for Asahi Linux is making the M1's GPU work. But what most people think of as a "GPU" is actually two completely distinct pieces of hardware: the GPU proper, which is in charge of rendering frames in memory, and the display controller, which is in charge of sending those rendered frames from memory to the display.
44
44
45
-
While Alyssa has been hard at work [reverse engineering](https://rosenzweig.io/blog/asahi-gpu-part-4.html) the userspace components of the GPU, from draw calls to shaders, we still haven't looked at the lowest levels of the hardware that handle memory management and submission of commands to the GPU. But before we can use the GPU to render anything, we need a way to put it on the screen! Up until now, we've been using the firmware-provided framebuffer, which is just an area of memory where we can write pixels to be shown on the screen, but this won't cut it for a real desktop. We need features such as displaying new frames without tearing, support for hardware sprites such as the mouse cursor, switching resolutions and configuring multiple outputs, and more. This is the job of the display controller.
45
+
While Alyssa has been hard at work [reverse engineering](https://alyssarosenzweig.ca/blog/asahi-gpu-part-4.html) the userspace components of the GPU, from draw calls to shaders, we still haven't looked at the lowest levels of the hardware that handle memory management and submission of commands to the GPU. But before we can use the GPU to render anything, we need a way to put it on the screen! Up until now, we've been using the firmware-provided framebuffer, which is just an area of memory where we can write pixels to be shown on the screen, but this won't cut it for a real desktop. We need features such as displaying new frames without tearing, support for hardware sprites such as the mouse cursor, switching resolutions and configuring multiple outputs, and more. This is the job of the display controller.
46
46
47
47
On most mobile SoCs, the display controller is just a piece of hardware with simple registers. While this is true on the M1 as well, Apple decided to give it a twist. They added a coprocessor to the display engine (called DCP), which runs its own firmware (initialized by the system bootloader), and moved most of the display driver into the coprocessor. But instead of doing it at a natural driver boundary... they took half of their macOS C++ driver, moved it into the DCP, and created a remote procedure call interface so that each half can call methods on C++ objects on the other CPU! Talk about overcomplicating things...
Copy file name to clipboardExpand all lines: content/blog/2022/11/29-gpu-story.md
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -31,11 +31,11 @@ That means that in order to make the M1 GPU work with Asahi Linux, we need two b
31
31
32
32
## Alyssa joins the project
33
33
34
-
All the way back in 2021 when Asahi Linux started, Alyssa Rosenzweig joined the project to start working on reverse engineering the M1 GPU. Together with [Dougall Johnson](https://mastodon.social/@dougall) (who focused on documenting the GPU shader architecture), she started reverse engineering all the user space bits, including the shaders and all the command list structures needed to set up rendering. That's a ton of work, but less than one month in she was [already drawing her first triangle](https://rosenzweig.io/blog/asahi-gpu-part-2.html)! She's amazing! If you haven't checked out her series on dissecting the M1 GPU you should visit her [website](https://rosenzweig.io/) and take a look! ✨✨
34
+
All the way back in 2021 when Asahi Linux started, Alyssa Rosenzweig joined the project to start working on reverse engineering the M1 GPU. Together with [Dougall Johnson](https://mastodon.social/@dougall) (who focused on documenting the GPU shader architecture), she started reverse engineering all the user space bits, including the shaders and all the command list structures needed to set up rendering. That's a ton of work, but less than one month in she was [already drawing her first triangle](https://alyssarosenzweig.ca/blog/asahi-gpu-part-2.html)! She's amazing! If you haven't checked out her series on dissecting the M1 GPU you should visit her [website](https://alyssarosenzweig.ca/) and take a look! ✨✨
35
35
36
-
But wait, how can she work on the user space driver without a kernel driver to go with it? Easy, she did it on macOS! Alyssa reverse engineered the macOS GPU driver UAPI enough to allocate memory and submit her own commands to the GPU, and this way she could work on the user space part without having to worry about the kernel bit. That's super cool! She started writing an M1 GPU OpenGL driver for [Mesa](https://www.mesa3d.org/), the Linux userspace graphics stack, and just a few months later she was already [passing 75% of the OpenGL ES 2 conformance tests](https://rosenzweig.io/blog/asahi-gpu-part-4.html), all on macOS!
36
+
But wait, how can she work on the user space driver without a kernel driver to go with it? Easy, she did it on macOS! Alyssa reverse engineered the macOS GPU driver UAPI enough to allocate memory and submit her own commands to the GPU, and this way she could work on the user space part without having to worry about the kernel bit. That's super cool! She started writing an M1 GPU OpenGL driver for [Mesa](https://www.mesa3d.org/), the Linux userspace graphics stack, and just a few months later she was already [passing 75% of the OpenGL ES 2 conformance tests](https://alyssarosenzweig.ca/blog/asahi-gpu-part-4.html), all on macOS!
37
37
38
-
Earlier this year, her work was so far ahead that she was running [games](https://rosenzweig.io/blog/asahi-gpu-part-6.html) on a fully open source Mesa OpenGL stack, running on top of Apple's kernel driver on macOS! But there was still no Linux kernel driver... time to help out with that part! ✨
38
+
Earlier this year, her work was so far ahead that she was running [games](https://alyssarosenzweig.ca/blog/asahi-gpu-part-6.html) on a fully open source Mesa OpenGL stack, running on top of Apple's kernel driver on macOS! But there was still no Linux kernel driver... time to help out with that part! ✨
39
39
40
40
## The Mysterious GPU Firmware
41
41
@@ -51,7 +51,7 @@ Just like other parts of the M1 chip, the GPU has a coprocessor called an "ASC"
51
51
***Event messages**, which the firmware sends back to the driver when something happens (like a command completing or failing).
52
52
***Statistics**, **firmware logs**, and **tracing messages** used for GPU status information and debugging.
53
53
***Command queues**, which represent a single app's list of pending GPU work
54
-
***Buffer information**, **statistics**, and **page list structures**, used to manage the [Tiled Vertex Buffers](https://rosenzweig.io/blog/asahi-gpu-part-5.html).
54
+
***Buffer information**, **statistics**, and **page list structures**, used to manage the [Tiled Vertex Buffers](https://alyssarosenzweig.ca/blog/asahi-gpu-part-5.html).
55
55
***Context structures** and other bits that let the GPU firmware keep track of what is going on.
56
56
***Vertex rendering commands**, which tell the vertex processing and tiling part of the GPU how to process commands and shaders from userspace to run the vertex part of a whole render pass.
57
57
***Fragment rendering commands**, which tell the rasterization and fragment processing part of the GPU how to render the tiled vertex data from the vertex processing into an actual framebuffer.
Copy file name to clipboardExpand all lines: content/blog/2023/03/20-road-to-vulkan.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,7 +12,7 @@ As you probably know, I've been working together with the rest of the Asahi Linu
12
12
13
13
Today we're releasing a big update to our GPU drivers for Asahi Linux, so I wanted to talk to you about what we've been working on since then, and what's next!
14
14
15
-
If this is your first time reading about our GPU adventures, you might want to check out my [Tales of the M1 GPU](/2022/11/tales-of-the-m1-gpu/) article first, which covers what I worked on last year! Also don't miss Alyssa's amazing series of articles on [her website](https://rosenzweig.io/), which goes all the way back to January 2021! ^^
15
+
If this is your first time reading about our GPU adventures, you might want to check out my [Tales of the M1 GPU](/2022/11/tales-of-the-m1-gpu/) article first, which covers what I worked on last year! Also don't miss Alyssa's amazing series of articles on [her website](https://alyssarosenzweig.ca/), which goes all the way back to January 2021! ^^
16
16
17
17
And if this is too long, feel free to [jump to the end](#conclusions) to learn what this all means for Asahi Linux!
Copy file name to clipboardExpand all lines: content/blog/2024/01/11-fedora-asahi-new.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -28,7 +28,7 @@ The only platform not yet supported is the Mac Pro, although there probably isn'
28
28
29
29
## GPU - Conformant OpenGL ES 3.1 & more...
30
30
31
-
Over the summer of 2023, [Alyssa Rosenzweig](https://rosenzweig.io)'s GPU reverse-engineering work [leapfrogged](https://rosenzweig.io/blog/opengl3-on-asahi-linux.html) us from OpenGL 2.1 over OpenGL 3.0 up to OpenGL 3.1; similarly, the OpenGL ES 2.0 support bumped up to OpenGL ES 3.0. Just two months later, in August 2023, we shipped [conformant](https://rosenzweig.io/blog/first-conformant-m1-gpu-driver.html) OpenGL ES 3.1 drivers, the world’s only conformant OpenGL ES 3.1 implementation for M1- and M2-family graphics hardware.
31
+
Over the summer of 2023, [Alyssa Rosenzweig](https://alyssarosenzweig.ca)'s GPU reverse-engineering work [leapfrogged](https://alyssarosenzweig.ca/blog/opengl3-on-asahi-linux.html) us from OpenGL 2.1 over OpenGL 3.0 up to OpenGL 3.1; similarly, the OpenGL ES 2.0 support bumped up to OpenGL ES 3.0. Just two months later, in August 2023, we shipped [conformant](https://alyssarosenzweig.ca/blog/first-conformant-m1-gpu-driver.html) OpenGL ES 3.1 drivers, the world’s only conformant OpenGL ES 3.1 implementation for M1- and M2-family graphics hardware.
32
32
33
33
What's the next step? Geometry shaders are introduced in OpenGL 3.2 and OpenGL ES 3.2. A [geometry shader](https://learnopengl.com/Advanced-OpenGL/Geometry-Shader) takes as input a set of vertices that form a single primitive e.g. a point or a triangle, which then transform these vertices as it sees fit before sending them to the next shader stage. What makes the geometry shader interesting is that it is able to convert the original primitive (set of vertices) to completely different primitives, possibly generating more vertices than were initially given. In the latest Fedora release, you’ll find a newer version, OpenGL 3.3. 3.2 and 3.3 add big ticket features like geometry shaders. Since Geometry shaders are not natively supported by the Apple GPU, correctly implementing them requires driver gymnastics. This is magnified by the interactions of geometry shaders with other features like transform feedback, primitive restart, indirect draws, and tessellation. We care about correctness, a promise included with conformance. It’s paramount to implement them the correct way -- which is not the easy way.
0 commit comments