VKDriven

GPU-driven Vulkan 1.3 renderer

C++VulkanSlangImGui
VKDriven

🚧 Work in progress. VKDriven is in early development, so expect things to change.

VKDriven is a Vulkan 1.3 renderer written in modern C++, built up one feature at a time. It’s my third attempt at graphics programming after Lean Engine and Based Engine, and this time the end goal is GPU-driven rendering.

I’m writing about the progress in the VKDriven blog series.

Done so far

  • Vulkan core following How to Vulkan: dynamic rendering and synchronization2
  • PBR lighting: Cook-Torrance BRDF with metallic-roughness materials and normal mapping
  • glTF 2.0 scene loading (Sponza)
  • Shaders read per-frame, material and transform data through buffer device address pointers in push constants, with one bindless texture array, so there are no per-draw descriptor sets
  • Reverse-Z depth buffer for better depth precision at a distance
  • HDR rendering with a tonemapping pass (AgX, ACES, Reinhard, Khronos PBR Neutral) and adjustable exposure
  • Cascaded shadow maps: four stable cascades (bounding-sphere fit and texel snapping to stop shimmering), practical split scheme, normal-offset bias and PCF
  • Slang shaders compiled to SPIR-V at runtime, with hot-reload
  • ImGui debug UI and a fly camera

Planned features

  • Two-pass Hi-Z occlusion culling
  • GPU-driven rendering: compute frustum culling and the whole scene in one indirect draw call
  • Profiling: per-pass GPU timings and case studies with Nsight / Radeon GPU Profiler
VKDriven rendering Sponza