H
Hans-Kristian Arntzen (Themaister)
themaister.net · Personal blog · on HN since 2013
Hans-Kristian Arntzen is a graphics driver and Vulkan developer who writes technical posts on GPU programming, shader translation, and debugging.
What HN saysHN commenters cite his DXIL to SPIR-V posts to argue shader IRs are flawed, and link his Vulkan and AMD GPU debugging work.
25HN people shared it
9linked it in comments
27stories submitted
959story points
4 months agolast shared
2013people per year2026
Most-shared posts
- 1A case for learning GPU programming with a compute-first mindset3 people · 69 points · first shared 2025 · 11 comments on HN
- 2My personal hell of translating DXIL to SPIR-V – part 33 people · 36 points · first shared 2021 · 7 comments on HN
- 3Hardcore Vulkan Debugging – Digging Deep on Linux and Amdgpu3 people · 5 points · first shared 2023 · discussion on HN
- 4My personal hell of translating dxil to spir v part 53 people · first shared 2022
- 5Graphics Programming like it's 2000: An introduction to Playstation 2 graphics2 people · 7 points · first shared 2025 · discussion on HN
- 6Compressed GPU texture formats – a review and compute shader decoders – part 12 people · 4 points · first shared 2020 · discussion on HN
- 7Conquering FidelityFX FSR42 people · 3 points · first shared 2025 · discussion on HN
- 8My personal hell of translating DXIL to SPIR-V – finale2 people · 3 points · first shared 2022 · discussion on HN
- 9Vulkan video shenanigans with RADV and FFmpeg2 people · 3 points · first shared 2023 · discussion on HN
- 10Measuring Input Latency with VK_EXT_present_timing2 people · 2 points · first shared 2026 · discussion on HN
- 11My personal hell of translating dxil to spir v part 12 people · first shared 2024
- 12I designed my own fast game streaming video codec – PyroWave1 people · 432 points · first shared 2025 · 134 comments on HN
- 13Playstation 2 GS emulation – the final frontier of Vulkan compute emulation1 people · 222 points · first shared 2024 · 65 comments on HN
- 14Pseudo-bandlimited pixel art filtering in 3D: A mathematical derivation1 people · 163 points · first shared 2018 · 15 comments on HN
- 15The State of Window System Integration (WSI) in Vulkan for Retro Emulators1 people · 3 points · first shared 2018 · discussion on HN
What HN people wrote when they linked it
MindSpunk · 2025-07-03
DXIL has other issues beyond being an orphaned fork of LLVM-IR. LLVM is ill-equipped to represents shaders, and there have been real bugs in the wild because of how not-a-shader-language LLVM-IR is. See this [0] post under the 'The classic subgroup breakage – maximal convergence gone awry' section. Read the whole series really if you haven't, it's a fantastic dive into how awful this stuff is.
DXIL is also a useless intermediate representation because parsing it is so bloody difficult nobody could actually do anything with it. DXIL was, and still is, functionally opaque bytes. You can't introspect it, you can't modify it or do anything of use with it. SPIR-V is dead-simple to parse and has an array of tools built around it because it's so easy to work with.
I don't really see how the OpenCL history is relevant to Vulkan either. Khronos losing the OpenCL game to Nvidia, certainly no thanks to Nvidia's sabotage either, doesn't change that SPIR-V is a much more successful format.
[0] https://themaister.net/blog/2022/04/24/my-personal-hell-of-translating…
returnorthrow · 2026-03-20
I was just reading about this topic last night on Maister’s Graphics Adventures: https://themaister.net/blog/2025/06. They created PyroWave, a GPU-accelerated DWT codec in Vulkan compute shaders for performing very low latency game streaming. Very fascinating read, and builds on similar work from their master’s thesis too.
torginus · 2025-10-07
SPIR-V is also a bad format for shaders (according to shader compiler devs):
https://themaister.net/blog/2021/09/05/my-personal-hell-of-translating…
The TLDR is SSA erases the structured control flow (like loops), which need to be recovered to support how branching is done on SIMD architectures (enabling/disabling lanes).
shmerl · 2025-09-12
You can read about DX12 being worse here: https://themaister.net/blog/2021/11/
But that's not even the point. Everyone could collaborate on the common API and make it better. Where were Apple and MS? Chasing their NIHs instead of doing it, so you argument is missing the point. It's not about how good it is (and it is good enough, though improving it is always welcome), it's about it being the only collaborative and shared effort. Everything else is simply irrelevant in result even if it could be better in some ways.
WithinReason · 2024-03-25
The article about UMR debugging seen on the tinygrad live stream:
https://themaister.net/blog/2023/08/20/hardcore-vulkan-debugging-diggi…
drvortex · 2013-12-24
OpenEmu is a game emulator for Mac. Retroarch http://themaister.net/retroarch.html has existed for ages though.
What's different about this?
raphlinus · 2024-09-02
Faith Ekstrand has an impressive track record of compiler work and has written a few blog posts[1], [1a]. Her Mastodon[2] is also worth a follow.
SPIR-V is important in the compute shader space, especially because DXIL and Metal's AIR are similar. I'm going to link three articles critical of SPIR-V: [3], [4], [5].
WebGPU [6] is interesting for a number of reasons, largely because they're trying to actually nail down the semantics, and also make it safe (see the uniformity analysis [7] in particular, which is a very "compiler" approach to a GPU-specific problem). Both Tint and naga projects are open source, with lots of high quality discussion in the issue trackers.
Shader languages suck, and we really need a good one. Promising approaches are Circle [8] (which is C++ based, very advanced but not open source), and Slang [9] (an evolution of HLSL). The Vcc work (also related to [4]) is worth studying.
Best of luck! This is a fascinating, if frustrating, space, and there's lots of room to improve things.
[1]: https://www.gfxstrand.net/faith/blog/
[1a]: https://www.collabora.com/news-and-blog/blog/2024/04/25/re-converging-…
[2]: https://mastodon.gamedev.place/@gfxstrand
[3]: https://kvark.github.io/spirv/2021/05/01/spirv-horrors.html
[4]: https://xol.io/blah/the-trouble-with-spirv/
[5]: https://themaister.net/blog/2022/08/21/my-personal-hell-of-translating…
[6]: https://github.com/gpuweb/gpuweb
[7]:…
g0b · 2022-05-24
This grew out from a much rantier (and worse) version of this article, which talked about the hurdles I faced when considering SPIR-V codegen for our research compiler (Thorin).
For a while I wanted to rewrite it, and ultimately to properly discuss what I wanted to discuss, I had to write something introductory in a much broader sense. So it sort of organically grew from there, and that's why the title is now a bit weird, but I plan for the rest of the series to continue with SPIR-V as some sort of central reference point.
It's fair to say DXIL suffers from this class of troubles too, there's a series themaister where he describes the awfulness of the story over there, but I don't work with DX and I wanted to make as few comments on that as possible to avoid saying something wrong and unverified.
https://themaister.net/blog/2022/04/24/my-personal-hell-of-translating…
jsheard · 2024-09-19
In theory if DirectX games start passing shaders to the driver in SPIR-V, the same format Vulkan uses, then yes it should make Protons job easier. Translating the current DXIL format to SPIR-V is apparently non-trivial to say the least:
https://themaister.net/blog/2021/09/05/my-personal-hell-of-translating…
https://themaister.net/blog/2021/10/03/my-personal-hell-of-translating…
https://themaister.net/blog/2021/11/07/my-personal-hell-of-translating…
https://themaister.net/blog/2022/04/11/my-personal-hell-of-translating…
https://themaister.net/blog/2022/04/24/my-personal-hell-of-translating…