vuk icon indicating copy to clipboard operation
vuk copied to clipboard

vuk - A rendergraph-based abstraction for Vulkan

vuk logo

vuk - A rendergraph-based abstraction for Vulkan

Discord Server Documentation CI

Quick Start

  1. Grab the vuk repository
  2. Compile the examples
  3. Run the example browser and get a feel for the library
git clone http://github.com/martty/vuk
cd vuk
git submodule init
git submodule update --recursive
mkdir build
cd build
mkdir debug
cd debug
cmake ../.. -G Ninja -DVUK_BUILD_EXAMPLES=ON -DVUK_USE_DXC=OFF
cmake --build .
./vuk_all_examples

(if building with a multi-config generator, do not make the debug folder)

Overview of using vuk

  1. Initialize your window(s) and Vulkan device
  2. Create a vuk::Context object
  3. Each frame:
  4. Each frame, prepare high level description of your rendering, in the form of vuk::Pass
  5. Bind concrete resources as inputs and outputs
  6. Bind managed resources (temporary resources used by the rendergraph)
  7. Record the execution your rendergraph into a command buffer
  8. Submit and present

What does vuk do

  • [x] Automatically deduces renderpasses, subpasses and framebuffers
    • [x] with all the synchronization handled for you
    • [x] including buffers
    • [x] images
    • [x] and rendertargets.
    • [x] for multiple queues
    • [ ] using fine grained synchronization when possible (events)
  • [x] Automatically transitions images into proper layouts
    • [x] for renderpasses
    • [x] and commands outside of renderpasses (eg. blitting).
  • [x] Automates pipeline creation with
    • [x] optionally compiling your shaders at runtime using shaderc
    • [x] pipeline layouts and
    • [x] descriptor set layouts
    • [x] by reflecting your shaders
    • [x] and deducing parameters based on renderpass and framebuffer.
  • [x] Automates resource binding with hashmaps, reducing descriptor set allocations and updates.
  • [x] Handles temporary allocations for a frame
  • [x] Handles long-term allocations with RAII handles
  • [x] Comes with lots of sugar to simplify common operations, but still exposing the full Vulkan interface:
    • [x] Matching viewport/scissor dimensions to attachment sizes
    • [x] Simplified vertex format specification
    • [x] Blend presets
    • [x] Directly writable mapped UBOs
    • [x] Automatic management of multisampling
  • [x] Helps debugging by naming the internal resources
  • [x] dear imgui integration code