We're hiring!

Zink: Summer 2021 update

Erik Faye-Lund avatar

Erik Faye-Lund
June 14, 2021

Share this post:

Reading time:

There's a lot that has happened in the world of Zink since my last update, so let's see if I can bring you up to date on the most important stuff.

Upstream development

Gosh, when I last blogged about Zink, it hadn't even landed upstream in Mesa yet! Well, by now it's been upstream for quite a while, and most development has moved there.

At the time of writing, we have merged 606 merge-requests labeled "zink". The current tip of mesa's main branch is totaling 1717 commits touching the src/gallium/drivers/zink/ sub-folder, written by 42 different contributors. That's pretty awesome in my eyes, Zink has truly become a community project!

Another noteworthy change is that Mike Blumenkrantz has come aboard the project, and has churned out an incredible amount of improvements to Zink! He got hired by Valve to work on Zink (among other things), and is now the most prolific contributor, with more than twice the amount of commits than I have written.

If you want a job in Open Source graphics, Zink has a proven track-record as a job-creator!

In addition to Mike, there's some other awesome people who have been helping out lately.

Half-Life 2 running with Zink.

OpenGL 4.6 support

Thanks to a lot of hard work by Mike assisted by Dave Airlie and Adam Jackson, both of RedHat, Zink is now able to expose the OpenGL 4.6 (Core Profile) feature set, given enough Vulkan features!

Please note that this doesn't mean that Zink is yet a conformant implementation, there's some details left to be ironed out before we can claim that. In particular, we need to pass the conformance tests, and submit a conformance report to Khronos. We're not there yet.

I'm also happy to see that Zink is currently at the top of MesaMatrix (together with LLVMpipe, i965 and RadeonSI), reporting a total of 160 OpenGL extensions at the time of writing!

In theory, that means you can run any OpenGL application you can think of on top of Zink. Mike is hard at work testing the entire Steam game library, and things are working pretty well.

Is this the end of the line for Zink? Are we done now? Not at all!

OpenGL compatibility profile

We're still stuck at OpenGL 3.0 for compatibility contexts, mainly due to lack of testing. There's a lot of features that need to work together in relatively complicated ways for this to work for us.

Note that this only matters for applications that rely on legacy OpenGL features. Modern OpenGL programs gets OpenGL 4.6 support, as mentioned previously.

I don't think this is going to be a big deal to enable, but I haven't spent time on it.

OpenGL ES 3.1 support

Similar to the OpenGL 4.6 support, we're now able to expose the OpenGL ES 3.1 feature set. This is again thanks to a lot of hard work by Mike and the gang.

Why not OpenGL ES 3.2? This comes down to the GL_KHR_blend_equation_advanced feature. Mike blogged about the issue a while ago.

Lavapipe and continuous integration

To prevent regressions, we've started testing Zink on the Mesa CI system for every change. This is made possible thanks to Lavapipe, a Vulkan software implementation in Mesa that reuse the rasterizer from LLVMpipe.

This means we can run tests on virtual cloud machines without having to depend on unreliable hardware.

At the time of writing, we're only exposing OpenGL 4.1 on top of Lavapipe, due to some lacking features. But we have patches in the works to bring this up to OpenGL 4.5, and OpenGL 4.6 probably won't be far off when that lands.

Windows support

Basic support for Zink on Microsoft Windows has landed. This isn't particularly useful at the moment, because we need better window-system integration to get anywhere near reasonable performance. But it's there.

macOS support

Thanks to work by Duncan Hopkins of The Foundry, there's also some support for macOS. This uses MoltenVK as the Vulkan implementation, meaning that we also support the Vulkan Portability Extension to some degree.

This support isn't quite as drop-in as on other platforms, because it's completely lacking window-system integration. But it seems to work for the use-cases they have at The Foundry, so it's worth mentioning as well.

Driver support

Beyond this, Igalia has brought up Zink on the V3DV driver, and I've heard some whispers that there's some people running Zink on top of Turnip, an open-source Vulkan driver for recent Qualcomm Adreno GPUs.

I've heard some people have some success getting things running on NVIDIA, but there's a few obvious problems in the way there due to the lack of proper DRI support... Which brings us to:

Window System Integration

Another awesome new development is that Adam is working on Penny. So, what's Penny?

Penny is another way of bringing up Zink, on systems without DRI support. It works as a dedicated GLX integration that uses the VK_KHR_swapchain extension to integrate properly with the native Vulkan driver's window-system integration instead of Mesa baking its own.

This solves a lot of small, nasty issues in the DRI code-path. I'll say the magic "implicit synchronization" word, and hope that scares away anyone wondering what it's about.


A lot more has happened on the performance front as well, again all thanks to Mike. However, much of this is still out-of-tree, and waiting in Mike's zink-wip branch.

So instead, I suggest you check out Mike's blog for the latest performance information (and much more up-to-date info on Zink). There's been a lot going on, and I'm sure there's even more to come!

Closing words

I think this should cover the most interesting bits of development.

On a personal note, I recently became a dad for the first time, and as a result I'll be away for a while on paternity leave, starting early this fall. Luckily, Zink is in good hands with Mike and the rest of the upstream community taking care of things.

I would like to again plug Mike's blog as a great source of Zink-related news, if you're not already following it. He posts a lot more frequent than I do, and he's also an epic meme master, so it's all great fun!

Comments (0)

Add a Comment

Allowed tags: <b><i><br>Add a new comment:

Search the newsroom

Latest Blog Posts

Automatic regression handling and reporting for the Linux Kernel


In continuation with our series about Kernel Integration we'll go into more detail about how regression detection, processing, and tracking…

Almost a fully open-source boot chain for Rockchip's RK3588!


Now included in our Debian images & available via our GitLab, you can build a complete, working BL31 (Boot Loader stage 3.1), and replace…

What's the latest with WirePlumber?


Back in 2022, after a series of issues were found in its design, I made the call to rework some of WirePlumber's fundamentals in order to…

DRM-CI: A GitLab-CI pipeline for Linux kernel testing


Continuing our Kernel Integration series, we're excited to introduce DRM-CI, a groundbreaking solution that enables developers to test their…

Persian Rug, Part 4 - The limitations of proxies


This is the fourth and final part in a series on persian-rug, a Rust crate for interconnected objects. We've touched on the two big limitations:…

How to share code between Vulkan and Gallium


One of the key high-level challenges of building Mesa drivers these days is figuring out how to best share code between a Vulkan driver…

Open Since 2005 logo

We use cookies on this website to ensure that you get the best experience. By continuing to use this website you are consenting to the use of these cookies. To find out more please follow this link.

Collabora Ltd © 2005-2024. All rights reserved. Privacy Notice. Sitemap.