Skip to content
/ vuk Public

vuk - A rendergraph-based abstraction for Vulkan

License

Notifications You must be signed in to change notification settings

martty/vuk

Repository files navigation

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

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