• C++ 81.5%
  • C 14.9%
  • CMake 2.8%
  • GLSL 0.4%
  • HLSL 0.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-05-14 15:30:18 +01:00
.github/workflows once more unto the breach 2025-12-22 19:59:47 +00:00
benchmarks introduce EXTRA; extract Runtime creation from example fw; extract Tracy from example fw, extract imgui integration from example fw 2025-03-02 11:03:36 +00:00
bin pull in binaries into main repo 2026-02-14 17:24:28 +00:00
cmake fix shader bin cmakes 2026-02-14 19:13:29 +00:00
docs tune docs to be more repeatable on RTD 2025-12-23 21:57:06 +00:00
examples fix comment 2026-01-20 22:15:11 +00:00
ext/renderdoc move fmt to FetchContent 2025-02-26 12:28:01 +00:00
include/vuk fix Allocator fwd decl 2026-04-26 17:23:52 +01:00
src Work around empty SPD library 2026-05-14 15:30:18 +01:00
tests attachmentless framebuffers 2026-01-17 17:15:36 +00:00
.clang-format clang-format + reformat 2022-01-09 11:50:35 +00:00
.gitignore add pipeline support for tessellation 2025-12-22 20:47:14 +00:00
.readthedocs.yaml add RTD yaml 2025-12-23 15:44:02 +00:00
CMakeLists.txt fix doctest commit hash 2026-04-26 13:16:01 +01:00
CMakeSettings.json update slang; remove entrypoint name workaround 2025-11-05 21:46:16 +00:00
LICENSE Add license and readme 2020-03-29 15:54:03 +02:00
README.md rename Context to Runtime 2024-04-20 21:13:26 +01:00
vuk_logo.png crop logo 2020-05-13 14:18:55 +02:00

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::Runtime 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