Skip to content

Move debug messenger/callback from vkb::core::Instance to VulkanSample; cleanup of vkb::core::Instance#1487

Open
asuessenbach wants to merge 3 commits intoKhronosGroup:mainfrom
asuessenbach:debug_message
Open

Move debug messenger/callback from vkb::core::Instance to VulkanSample; cleanup of vkb::core::Instance#1487
asuessenbach wants to merge 3 commits intoKhronosGroup:mainfrom
asuessenbach:debug_message

Conversation

@asuessenbach
Copy link
Contributor

Description

The debug messenger/callback are not integral parts of vkb::core::Instance, but simple members of a VulkanSample.
After moving them over into the VulkanSample, the vkb::core::Instance could completely be cleaned up.

Note that the exensions sample shader_debugprintf showcases how this approach can be used to register multiple debug messengers.

Build tested on Win11 with VS2022. Run tested on Win11 with NVidia GPU.

General Checklist:

Please ensure the following points are checked:

  • My code follows the coding style
  • I have reviewed file licenses
  • I have commented any added functions (in line with Doxygen)
  • I have commented any code that could be hard to understand
  • My changes do not add any new compiler warnings
  • My changes do not add any new validation layer errors or warnings
  • I have used existing framework/helper functions where possible
  • My changes do not add any regressions
  • I have tested every sample to ensure everything runs correctly
  • This PR describes the scope and expected impact of the changes I am making

Note: The Samples CI runs a number of checks including:

  • I have updated the header Copyright to reflect the current year (CI build will fail if Copyright is out of date)
  • My changes build on Windows, Linux, macOS and Android. Otherwise I have documented any exceptions

If this PR contains framework changes:

  • I did a full batch run using the batch command line argument to make sure all samples still work properly

Sample Checklist

If your PR contains a new or modified sample, these further checks must be carried out in addition to the General Checklist:

  • I have tested the sample on at least one compliant Vulkan implementation
  • If the sample is vendor-specific, I have tagged it appropriately
  • I have stated on what implementation the sample has been tested so that others can test on different implementations and platforms
  • Any dependent assets have been merged and published in downstream modules
  • For new samples, I have added a paragraph with a summary to the appropriate chapter in the readme of the folder that the sample belongs to e.g. api samples readme
  • For new samples, I have added a tutorial README.md file to guide users through what they need to know to implement code using this feature. For example, see conditional_rendering
  • For new samples, I have added a link to the Antora navigation so that the sample will be listed at the Vulkan documentation site

@asuessenbach asuessenbach requested a review from a team February 25, 2026 10:37
@gary-sweet
Copy link
Contributor

hello_triangle and hpp_hello_triangle fail to start with this change in place.

[error] Error Message: Failed to create window surface.
[error] Failed when running application Hello Triangle

@asuessenbach
Copy link
Contributor Author

hello_triangle and hpp_hello_triangle fail to start with this change in place.

What platform, again?
And do hello_triangle_1_3 or hpp_hello_triangle_1_3 fail as well?
Can you try to see, where it's failing?

That is: I can't reproduce that failure on Windows.

@gary-sweet
Copy link
Contributor

hello_triangle and hpp_hello_triangle fail to start with this change in place.

What platform, again? And do hello_triangle_1_3 or hpp_hello_triangle_1_3 fail as well? Can you try to see, where it's failing?

That is: I can't reproduce that failure on Windows.

Sorry, my bad. It's actually hello_triangle and hello_triangle_1_3 that don't work. My brain is obviously translating what I see and what I type and getting it wrong :-)

You've changed the window create to use:
context.surface = options.window->create_surface(context.instance, nullptr);

The second argument is VkPhysicalDevice, and passing nullptr breaks DirectWindow::create_surface() which requires a valid physical device to enumerate display properties.

The old code used the create_surface(vkb::core::InstanceC&) overload, which internally enumerated physical devices and picked the first one.

This only affects platforms using direct-to-display. On windowed platforms (GLFW/X11/Wayland), the VkPhysicalDevice parameter is unused so nullptr works fine there.

@asuessenbach
Copy link
Contributor Author

This only affects platforms using direct-to-display.

Please sorry to have missed that platform again!
The fix was easy, though.

gary-sweet
gary-sweet previously approved these changes Mar 6, 2026
SaschaWillems
SaschaWillems previously approved these changes Mar 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants