Another Week

Another week, more blog posts is what I meant to say when I started writing this post last Friday. But now it’s Monday, and everything is different.

In particular, zink is different. There’s a branchpoint coming up, and I’ll do a separate post about that and all the new features people can expect, but today’s topic is something else. Something more exciting.

Obviously it’s EXT_shader_object.

Literally The Only Person In The World…

who is excited about this extension is me.

That’s right, I said it.

For years now, Tomb Raider (2013) has plagued zink users with separate shader objects that could not be precompiled even with EXT_graphics_pipeline_library. Why? Because the game uses tessellation. And when I suggested we’d probably want that in EXT_graphics_pipeline_library, someone said “oh we can just add that later, it’ll be easy”, and then since it’s Vulkan it wasn’t easy and it didn’t get added.

But then Nintendo came along and solved this problem for me in a much, much better way with EXT_shader_object.

The thing about OpenGL is that ARB_separate_shader_objects is a thing, and it’s a thing for every shader stage. Even if 99% of apps/games only use VS+FS, there’s still that 1% that wants to use it with those other geometry stages.

Like Tomb Raider (2013). And yes, the (2013) is necessary so nobody imagines I’m talking about a more recent, more relevant game.

Some months ago, I implemented basic separate shaders (VS+FS only) using EXT_graphics_pipeline_library. It’s gross. Really just not an ideal way of doing things when mapping to GL. Effectively each stage gets its own mini GPL pipeline which then gets combined on-the-fly for a couple frames of use to avoid stuttering until the real pipeline is done with its background compile.

But this is stupid. The GL architecture is for separate shaders, not for just-in-time linking; we leave the linking under the hood to screw us over when it doesn’t work right so we can complain. It’s a solved problem in that regard. Making this explicit and mapping from one to the other needs all kinds of refcounting, and hash tables, and complexity, and the fact that it works at all is a miracle that science can’t explain.

Now, however, there is a direct 1:1 mapping to separate shaders with EXT_shader_object. If the app compiles a shader, zink compiles that shader (object). If the app binds a shader, zink binds that shader (object). It’s that simple. And then in the background I can still do all the optimized monolithic pipeline compiling like usual to guarantee huge FPS the next time that group of shaders is used together.

Finally this one problem game will run without any frame hitching or other issues.

As soon as drivers besides NVIDIA implement it, of course. Thanks NVIDIA for your great Day 1 support of this great extension that solves…


Of this great extension…




Oh for fuck’s sake.


This game will never run without issues on zink. I’m over it. But you know what I’m not over yet?

This totally unexpected news that Panfrost is now without firm leadership and Alyssa is now without gainful employment. How could such a thing happen?

As everyone who’s anyone in the graphics community knows, SGC is the first place to receive any hiring-related rumors. It was here that the news first broke about Valve hiring some nutjob to work on zink. It was also here that everyone learned Broadcom, Bose, the entire multiverse, and Collabora were all vying to hire the five-time winner of Mesa’s Most Loudest Keyboard On Conference Call award (And yes, I can hear her clacking away towards a sixth win right now).

That’s right. It’s been a while, but I’ve got another scoop. And this one’s big. I couldn’t even believe it when I stumbled upon this, and I’m sure many of you won’t either. That’s why I’m gonna tell you, and then I’m gonna spell it out for you.

Alyssa has been hired by Boston Dynamics to work on driver-level computer vision integration in their robotics systems.

It just makes sense if you stop and think about it. Or if you re-read her last blog post in which she basically spells it out for us:

  • The initial goal was to run
    • Like BD’s Atlas robot?
  • my focus has been ensuring the project can stand on its own four legs
  • maybe you can read between the lines!
    • I’ll admit this one took me some time until I stepped back to look at the whole picture. Then it came together like one of those magic eye puzzles I could never do as a kid and still can’t now leading to thousands of USD being spent on therapy any time I see certain types of static imagery: this was a reference to lines of code. I’ll spare you the cumbersome details of the process, but long story short, if you take all of Alyssa’s commits authored over the past year, ignore the ones that weren’t authored on Mondays (as today is Monday), and then make a word cloud of the result, the largest and most commonly-used words are “My Little Pony”, which everyone who follows robotics knows has already been announced as the new design schema for an upcoming product launch.

So yeah, nice try, but you’ll need to put a lot more effort into covering your tracks if you want to conceal your job hops from SGC.

Stay tuned for the crucial details everyone craves on the new Panfrost project leader: do they put toothpaste on their toothbrush before or after wetting the bristles?

Written on April 7, 2023