Abstract:
This presentation introduces vkDuck, a visual development environment designed to mitigate the high boilerplate requirements of the Vulkan API. Developed as a master’s thesis project at the University of Vienna, the tool utilizes a node-based interface to build render graphs, allowing developers to focus on shader logic rather than low-level API management. A critical technical component of the tool is its integration with the Slang shading language; vkDuck uses Slang’s reflection capabilities to automatically generate node input/output pins and resource bindings from shader metadata. The system features a live GPU-accelerated preview within the editor and can export functional, standalone C++ projects utilizing the Meson build system. The tool currently supports GLTF geometry, multiple camera models, and automated shader hot-reloading.
Technical Summary and Key Takeaways:
0:03 – Project Motivation: The tool addresses the "triangle problem"—the excessive lines of setup code (instance, device selection, swapchain, etc.) required for basic rendering in Vulkan, which serves as a barrier for students and rapid prototyping.
2:06 – Visual Render Graph Concept: vkDuck separates API setup from creative workflow. Each node represents a Vulkan concept or resource, connected to define data flow.
6:11 – Integration of Slang Reflection: The editor uses the Slang shading language to parse shaders and extract metadata (structs, bindings, sets, and types). This enables the automatic generation of the "Graphics Pipeline" node interface, matching the shader’s specific requirements without manual UI coding.
8:03 – Core Workflow: The developer writes Slang shaders, builds a visual graph in the editor, monitors a live GPU preview, and finally exports the configuration into a C++ project.
8:37 – "Primitive" Architecture: Every concept in vkDuck is a "Primitive" abstraction. Primitives implement four primary methods: Create (resource allocation), Destroy (cleanup), Record Command Buffers (rendering logic), and Generate Create (C++ code serialization).
9:16 – Live Preview Mechanism: The editor executes the render graph on the GPU in real-time, displaying the output as an ImGui texture. This provides immediate feedback for debugging and iterative development.
11:33 – Model Node and Asset Handling: Currently supports GLTF files. The node handles buffer creation, GPU uploads, and extraction of vertex attributes (position, normal, UVs) to generate vertex input descriptions for the pipeline.
13:53 – Pipeline Configuration: The Pipeline node exposes Vulkan state configurations—such as rasterization settings, blending modes, and depth testing—via UI elements (checkboxes and sliders) instead of manual struct population. It also supports auto-reloading upon shader file changes.
16:02 – Present Node: Acts as the graph sink. In the editor, it renders to a UI texture; upon export, it is automatically replaced with swapchain logic for standalone execution.
18:37 – Code Generation Output: The exported C++ code is designed to be readable and structured, using the Meson build system. It produces standard Vulkan API calls (e.g., descriptor set layouts, allocations) intended for educational use or as a project foundation.
24:34 – Future Development Roadmap: Planned features include code refactoring, compute shader support, enhanced model formats (OBJ), and integration with new macOS Vulkan implementations like Cosmic Crisp.
27:25 – Current Limitations (Q&A): As a prototype, specific rendering orders for multiple discrete geometry objects currently require merging into a single GLTF or using separate pipeline nodes, with more granular geometry control planned for future versions.
Review Group Recommendation
To review this topic effectively, a group consisting of Vulkan API contributors, Graphics Software Engineers (Engine/Tools), and University-level Computer Science Educators would be most appropriate. This panel would provide the necessary feedback on API compliance, toolchain integration, and pedagogical utility.