Problem building source from Vulkan-Tutorial: SIGGRAPH 2026: How to write a Vulkan application in 2026

In the Vulkan-Tutorial: How to write a Vulkan application in 2026, I am having trouble building the source code. I am building on debian/trixie with the latest vulkan sdk, 1.4.357.0. Trixie has clang-19 as the default so I installed clang-21 and generaged in cmake with:

cmake --preset clang-debug -DCMAKE_CXX_COMPILER=clang+±21 -DCMAKE_C_COMPILER=clang-21

Otherwise, it only finds clang-19 through clang and clang++.

that looks like it worked but then when I try to build the source I get the following:

cmake --build --preset clang-debug
[1/2] Building CXX object CMakeFiles/vulkan_siggraph.dir/src/main.cpp.o
FAILED: CMakeFiles/vulkan_siggraph.dir/src/main.cpp.o
/usr/bin/clang+±21 -DGLFW_INCLUDE_NONE -DSIGGRAPH_DATA_DIR=“/vulkan/siggraph2026_vk_tutorial/data” -DSIGGRAPH_SHADER_DIR=“/vulkan/siggraph2026_vk_tutorial/build/clang/shaders” -DVULKAN_HPP_DISPATCH_LOADER_DYNAMIC=1 -DVULKAN_HPP_NO_STRUCT_CONSTRUCTORS -I/vulkan/siggraph2026_vk_tutorial/src -I/vulkan/siggraph2026_vk_tutorial/external/glfw/include -I/vulkan/siggraph2026_vk_tutorial/external/glm -I/vulkan/siggraph2026_vk_tutorial/external/vk-bootstrap/src -isystem /vulkan/1.4.357.0/x86_64/include -isystem /vulkan/siggraph2026_vk_tutorial/external/nlohmann/include -isystem /vulkan/siggraph2026_vk_tutorial/external/stb -isystem /vulkan/siggraph2026_vk_tutorial/external/tinygltf -std=gnu++23 -Wall -Wextra -Wpedantic -Wno-missing-designated-field-initializers -MD -MT CMakeFiles/vulkan_siggraph.dir/src/main.cpp.o -MF CMakeFiles/vulkan_siggraph.dir/src/main.cpp.o.d -o CMakeFiles/vulkan_siggraph.dir/src/main.cpp.o -c /vulkan/siggraph2026_vk_tutorial/src/main.cpp
/vulkan/siggraph2026_vk_tutorial/src/main.cpp:476:43: error: no matching member function for call to ‘init’
476 | VULKAN_HPP_DEFAULT_DISPATCHER.init(m_vkbData.m_instance.instance, vkGetInstanceProcAddr,
| ^~
/vulkan/1.4.357.0/x86_64/include/vulkan/vulkan.hpp:27612:12: note: candidate function template not viable: no known conversion from ‘PFN_vkVoidFunction (VkInstance, const char )’ (aka 'void ((VkInstance_T *, const char *))()’) to ‘const Device’ for 2nd argument
27612 | void init( Instance const & instance, Device const & device, DynamicLoader const & dl ) VULKAN_HPP_NOEXCEPT
| ^ ~~~~~~~~~~~~~~~~~~~~~
/vulkan/1.4.357.0/x86_64/include/vulkan/vulkan.hpp:24567:12: note: candidate function not viable: requires 2 arguments, but 3 were provided
24567 | void init( VkInstance instance, PFN_vkGetInstanceProcAddr getInstanceProcAddr ) VULKAN_HPP_NOEXCEPT
| ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/vulkan/1.4.357.0/x86_64/include/vulkan/vulkan.hpp:27624:12: note: candidate function template not viable: requires 2 arguments, but 3 were provided
27624 | void init( Instance const & instance, Device const & device ) VULKAN_HPP_NOEXCEPT
| ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/vulkan/1.4.357.0/x86_64/include/vulkan/vulkan.hpp:24575:12: note: candidate function not viable: requires 4 arguments, but 3 were provided
24575 | void init( VkInstance instance, PFN_vkGetInstanceProcAddr getInstanceProcAddr, VkDevice device, PFN_vkGetDeviceProcAddr getDeviceProcAddr )
| ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/vulkan/1.4.357.0/x86_64/include/vulkan/vulkan.hpp:24550:12: note: candidate function not viable: requires single argument ‘getInstanceProcAddr’, but 3 arguments were provided
24550 | void init( PFN_vkGetInstanceProcAddr getInstanceProcAddr ) VULKAN_HPP_NOEXCEPT
| ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/vulkan/1.4.357.0/x86_64/include/vulkan/vulkan.hpp:24584:12: note: candidate function not viable: requires single argument ‘instanceCpp’, but 3 arguments were provided
24584 | void init( Instance instanceCpp ) VULKAN_HPP_NOEXCEPT
| ^ ~~~~~~~~~~~~~~~~~~~~
/vulkan/1.4.357.0/x86_64/include/vulkan/vulkan.hpp:26272:12: note: candidate function not viable: requires single argument ‘deviceCpp’, but 3 arguments were provided
26272 | void init( Device deviceCpp ) VULKAN_HPP_NOEXCEPT
| ^ ~~~~~~~~~~~~~~~~
/vulkan/1.4.357.0/x86_64/include/vulkan/vulkan.hpp:24544:12: note: candidate function template not viable: requires single argument ‘dl’, but 3 arguments were provided
24544 | void init( DynamicLoader const & dl ) VULKAN_HPP_NOEXCEPT
| ^ ~~~~~~~~~~~~~~~~~~~~~~~~
/vulkan/1.4.357.0/x86_64/include/vulkan/vulkan.hpp:24537:12: note: candidate function template not viable: requires 0 arguments, but 3 were provided
24537 | void init()
| ^
/vulkan/siggraph2026_vk_tutorial/src/main.cpp:541:44: error: non-constant-expression cannot be narrowed from type ‘VkFormat’ to ‘vk::Format’ in initializer list [-Wc++11-narrowing]
541 | m_swapchainFormat = vk::Format{m_vkbData.m_swapchain.image_format};
| ^~~~~~
2 errors generated.
ninja: build stopped: subcommand failed.

Any help would be appreciated!

I can reproduce this with Visual Studio 2026. Looks like this was a (recent) breaking change with the Vulkan C++ headers. We’ll try to get this fixed.

Thanks! Fyi, I emailed a link of this thread to Iago Calvo Lista, one of the presenters in the slides and the submitter to github.

We have a fix in this PR: Fix compilation error for SIGGRAPH 2026 tutorial by SaschaWillems · Pull Request #516 · KhronosGroup/Vulkan-Tutorial · GitHub

Should be merged soon

Thank you, davey815, for using the tutorial and sharing your feedback and the problem you encountered.

Sorry for the delayed response. I’ve been a bit busy this week and only just saw your email and became aware of the problem. Please feel free to share any new feedback or problems you find.

Thanks, Sascha_Willems, for the fix and the CI.

Please feel free to tag me in any issues related to the SIGGRAPH Vulkan tutorial.

Thank you very much.

Thanks Sascha and Iago for addressing this. If I find anything else I will open an issue in github.

It looks like the tutorial code and the newer Vulkan-Hpp headers are out of sync. The signature and conversion errors both point in that direction, so I’d first check that the tutorial revision matches SDK 1.4.357 before changing the Clang setup.