The Curious Engineer

All blogs / Graphics

Maister's Graphics Adventures

themaister.net/blog

Low-level graphics programming

GraphicsEmulationPerformance / optimization

Posts
46 from 15 Aug 2017 to 29 Oct 2026
Posting
now and then (5 in the last year)
Kind
personal blog
Feed
https://themaister.net/blog/feed/

2026 5

  1. Killing what can’t be handled – putting a spaghetti demon to eternal rest
  2. My side quest measuring input latency with VK_EXT_present_timing
  3. A cute little trick to running classic IIR filters on the GPU
  4. Emulating old junk from yesteryear – or my obsession making native resolution PS2 emulation look good
  5. Walking backwards into the future – A look at descriptor heap in Granite

2025 4

  1. A case for learning GPU programming with a compute-first mindset
  2. I designed my own ridiculously fast game streaming video codec – PyroWave
  3. Conquering FidelityFX FSR4 – Enabling the pretty pixels on Linux through maniacal persistence
  4. Graphics programming like it’s 2000 – An esoteric introduction to PlayStation 2 graphics – Part 1

2024 3

  1. PlayStation 2 GS emulation – the final frontier of Vulkan compute emulation
  2. Real-time video streaming experiments with forward error correction
  3. Modernizing Granite’s mesh rendering

2023 3

  1. My scuffed game streaming adventure – PyroFling
  2. Hardcore Vulkan debugging – Digging deep on Linux + AMDGPU
  3. Vulkan video shenanigans – FFmpeg + RADV integration experiments

2022 3

  1. My personal hell of translating DXIL to SPIR-V – finale
  2. My personal hell of translating DXIL to SPIR-V – part 5
  3. My personal hell of translating DXIL to SPIR-V – part 4

2021 4

  1. My personal hell of translating DXIL to SPIR-V – part 3
  2. My personal hell of translating DXIL to SPIR-V – part 2
  3. My personal hell of translating DXIL to SPIR-V – part 1
  4. Compressed GPU texture formats – a review and compute shader decoders – part 3/3

2020 3

  1. Compressed GPU texture formats – a review and compute shader decoders – part 2
  2. Compressed GPU texture formats – a review and compute shader decoders – part 1
  3. Clustered shading evolution in Granite

2019 15

  1. YUV sampling in Vulkan – a niche and complicated feature – VK_KHR_sampler_ycbcr_conversion
  2. Emulating a fake retro GPU in Vulkan compute
  3. The weird world of shader divergence and LOD
  4. Yet another blog explaining Vulkan synchronization
  5. A tour of Granite’s Vulkan backend – Part 6
  6. A tour of Granite’s Vulkan backend – Part 5
  7. A tour of Granite’s Vulkan backend – Part 4
  8. A tour of Granite’s Vulkan backend – Part 3
  9. A tour of Granite’s Vulkan backend – Part 2
  10. A tour of Granite’s Vulkan backend – Part 1
  11. Recreating the tone filter from NieR:Automata
  12. An unusual recompiler experiment – MIPS to LLVM IR – Part 4
  13. An unusual recompiler experiment – MIPS to LLVM IR – Part 3
  14. An unusual recompiler experiment – MIPS to LLVM IR – Part 2
  15. An unusual recompiler experiment – MIPS to LLVM IR – Part 1

2018 5

  1. Experimenting with VK_GOOGLE_display_timing, taking control over the swap chain
  2. The state of Window System Integration (WSI) in Vulkan for retro emulators
  3. Why coverage based pixel art filtering is terrible
  4. Pseudo-bandlimited pixel art filtering in 3D – a mathematical derivation
  5. Improving VK_KHR_display in Mesa – or, let’s make DRM better!

2017 1

  1. Render graphs and Vulkan — a deep dive