mirror of
https://github.com/charles-lunarg/vk-bootstrap.git
synced 2024-11-10 02:41:47 +00:00
Move debug callback into header and allow adding user pointer
This commit is contained in:
parent
e511dfdbf9
commit
867376d01e
@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
#include "VkBootstrap.h"
|
#include "VkBootstrap.h"
|
||||||
|
|
||||||
#include <cstdio>
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
@ -257,6 +256,7 @@ VkResult create_debug_utils_messenger(VkInstance instance,
|
|||||||
PFN_vkDebugUtilsMessengerCallbackEXT debug_callback,
|
PFN_vkDebugUtilsMessengerCallbackEXT debug_callback,
|
||||||
VkDebugUtilsMessageSeverityFlagsEXT severity,
|
VkDebugUtilsMessageSeverityFlagsEXT severity,
|
||||||
VkDebugUtilsMessageTypeFlagsEXT type,
|
VkDebugUtilsMessageTypeFlagsEXT type,
|
||||||
|
void* user_data_pointer,
|
||||||
VkDebugUtilsMessengerEXT* pDebugMessenger,
|
VkDebugUtilsMessengerEXT* pDebugMessenger,
|
||||||
VkAllocationCallbacks* allocation_callbacks) {
|
VkAllocationCallbacks* allocation_callbacks) {
|
||||||
|
|
||||||
@ -267,6 +267,7 @@ VkResult create_debug_utils_messenger(VkInstance instance,
|
|||||||
messengerCreateInfo.messageSeverity = severity;
|
messengerCreateInfo.messageSeverity = severity;
|
||||||
messengerCreateInfo.messageType = type;
|
messengerCreateInfo.messageType = type;
|
||||||
messengerCreateInfo.pfnUserCallback = debug_callback;
|
messengerCreateInfo.pfnUserCallback = debug_callback;
|
||||||
|
messengerCreateInfo.pUserData = user_data_pointer;
|
||||||
|
|
||||||
PFN_vkCreateDebugUtilsMessengerEXT createMessengerFunc;
|
PFN_vkCreateDebugUtilsMessengerEXT createMessengerFunc;
|
||||||
detail::vulkan_functions().get_inst_proc_addr(createMessengerFunc, "vkCreateDebugUtilsMessengerEXT");
|
detail::vulkan_functions().get_inst_proc_addr(createMessengerFunc, "vkCreateDebugUtilsMessengerEXT");
|
||||||
@ -289,17 +290,6 @@ void destroy_debug_utils_messenger(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VKAPI_ATTR VkBool32 VKAPI_CALL default_debug_callback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
|
|
||||||
VkDebugUtilsMessageTypeFlagsEXT messageType,
|
|
||||||
const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
|
|
||||||
void*) {
|
|
||||||
auto ms = to_string_message_severity(messageSeverity);
|
|
||||||
auto mt = to_string_message_type(messageType);
|
|
||||||
printf("[%s: %s]\n%s\n", ms, mt, pCallbackData->pMessage);
|
|
||||||
|
|
||||||
return VK_FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
bool check_layer_supported(std::vector<VkLayerProperties> const& available_layers, const char* layer_name) {
|
bool check_layer_supported(std::vector<VkLayerProperties> const& available_layers, const char* layer_name) {
|
||||||
if (!layer_name) return false;
|
if (!layer_name) return false;
|
||||||
@ -674,6 +664,7 @@ detail::Result<Instance> InstanceBuilder::build() const {
|
|||||||
messengerCreateInfo.messageSeverity = info.debug_message_severity;
|
messengerCreateInfo.messageSeverity = info.debug_message_severity;
|
||||||
messengerCreateInfo.messageType = info.debug_message_type;
|
messengerCreateInfo.messageType = info.debug_message_type;
|
||||||
messengerCreateInfo.pfnUserCallback = info.debug_callback;
|
messengerCreateInfo.pfnUserCallback = info.debug_callback;
|
||||||
|
messengerCreateInfo.pUserData = info.debug_user_data_pointer;
|
||||||
pNext_chain.push_back(reinterpret_cast<VkBaseOutStructure*>(&messengerCreateInfo));
|
pNext_chain.push_back(reinterpret_cast<VkBaseOutStructure*>(&messengerCreateInfo));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -725,6 +716,7 @@ detail::Result<Instance> InstanceBuilder::build() const {
|
|||||||
info.debug_callback,
|
info.debug_callback,
|
||||||
info.debug_message_severity,
|
info.debug_message_severity,
|
||||||
info.debug_message_type,
|
info.debug_message_type,
|
||||||
|
info.debug_user_data_pointer,
|
||||||
&instance.debug_messenger,
|
&instance.debug_messenger,
|
||||||
info.allocation_callbacks);
|
info.allocation_callbacks);
|
||||||
if (res != VK_SUCCESS) {
|
if (res != VK_SUCCESS) {
|
||||||
@ -795,6 +787,10 @@ InstanceBuilder& InstanceBuilder::set_debug_callback(PFN_vkDebugUtilsMessengerCa
|
|||||||
info.debug_callback = callback;
|
info.debug_callback = callback;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
InstanceBuilder& InstanceBuilder::set_debug_callback_user_data_pointer(void* user_data_pointer) {
|
||||||
|
info.debug_user_data_pointer = user_data_pointer;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
InstanceBuilder& InstanceBuilder::set_headless(bool headless) {
|
InstanceBuilder& InstanceBuilder::set_headless(bool headless) {
|
||||||
info.headless_context = headless;
|
info.headless_context = headless;
|
||||||
return *this;
|
return *this;
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
#include <cstdio>
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <system_error>
|
#include <system_error>
|
||||||
@ -206,6 +207,22 @@ struct SystemInfo {
|
|||||||
bool debug_utils_available = false;
|
bool debug_utils_available = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Forward declared - check VkBoostrap.cpp for implementations
|
||||||
|
const char* to_string_message_severity(VkDebugUtilsMessageSeverityFlagBitsEXT s);
|
||||||
|
const char* to_string_message_type(VkDebugUtilsMessageTypeFlagsEXT s);
|
||||||
|
|
||||||
|
// Default debug messenger
|
||||||
|
// Feel free to copy-paste it into your own code, change it as needed, then call `set_debug_callback()` to use that instead
|
||||||
|
inline VKAPI_ATTR VkBool32 VKAPI_CALL default_debug_callback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
|
||||||
|
VkDebugUtilsMessageTypeFlagsEXT messageType,
|
||||||
|
const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
|
||||||
|
void*) {
|
||||||
|
auto ms = to_string_message_severity(messageSeverity);
|
||||||
|
auto mt = to_string_message_type(messageType);
|
||||||
|
printf("[%s: %s]\n%s\n", ms, mt, pCallbackData->pMessage);
|
||||||
|
|
||||||
|
return VK_FALSE; // Applications must return false here
|
||||||
|
}
|
||||||
|
|
||||||
class InstanceBuilder;
|
class InstanceBuilder;
|
||||||
class PhysicalDeviceSelector;
|
class PhysicalDeviceSelector;
|
||||||
@ -270,6 +287,8 @@ class InstanceBuilder {
|
|||||||
InstanceBuilder& use_default_debug_messenger();
|
InstanceBuilder& use_default_debug_messenger();
|
||||||
// Provide a user defined debug callback.
|
// Provide a user defined debug callback.
|
||||||
InstanceBuilder& set_debug_callback(PFN_vkDebugUtilsMessengerCallbackEXT callback);
|
InstanceBuilder& set_debug_callback(PFN_vkDebugUtilsMessengerCallbackEXT callback);
|
||||||
|
// Sets the void* to use in the debug messenger - only useful with a custom callback
|
||||||
|
InstanceBuilder& set_debug_callback_user_data_pointer(void* user_data_pointer);
|
||||||
// Set what message severity is needed to trigger the callback.
|
// Set what message severity is needed to trigger the callback.
|
||||||
InstanceBuilder& set_debug_messenger_severity(VkDebugUtilsMessageSeverityFlagsEXT severity);
|
InstanceBuilder& set_debug_messenger_severity(VkDebugUtilsMessageSeverityFlagsEXT severity);
|
||||||
// Add a message severity to the list that triggers the callback.
|
// Add a message severity to the list that triggers the callback.
|
||||||
@ -310,13 +329,14 @@ class InstanceBuilder {
|
|||||||
VkInstanceCreateFlags flags = 0;
|
VkInstanceCreateFlags flags = 0;
|
||||||
std::vector<VkBaseOutStructure*> pNext_elements;
|
std::vector<VkBaseOutStructure*> pNext_elements;
|
||||||
|
|
||||||
// debug callback
|
// debug callback - use the default so it is not nullptr
|
||||||
PFN_vkDebugUtilsMessengerCallbackEXT debug_callback = nullptr;
|
PFN_vkDebugUtilsMessengerCallbackEXT debug_callback = default_debug_callback;
|
||||||
VkDebugUtilsMessageSeverityFlagsEXT debug_message_severity =
|
VkDebugUtilsMessageSeverityFlagsEXT debug_message_severity =
|
||||||
VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
|
VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
|
||||||
VkDebugUtilsMessageTypeFlagsEXT debug_message_type =
|
VkDebugUtilsMessageTypeFlagsEXT debug_message_type =
|
||||||
VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT |
|
VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT |
|
||||||
VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
|
VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
|
||||||
|
void* debug_user_data_pointer = nullptr;
|
||||||
|
|
||||||
// validation features
|
// validation features
|
||||||
std::vector<VkValidationCheckEXT> disabled_validation_checks;
|
std::vector<VkValidationCheckEXT> disabled_validation_checks;
|
||||||
|
@ -3,11 +3,8 @@
|
|||||||
#include <catch2/catch.hpp>
|
#include <catch2/catch.hpp>
|
||||||
|
|
||||||
vkb::Instance get_instance(uint32_t minor_version = 0) {
|
vkb::Instance get_instance(uint32_t minor_version = 0) {
|
||||||
auto instance_ret = vkb::InstanceBuilder()
|
auto instance_ret =
|
||||||
.request_validation_layers()
|
vkb::InstanceBuilder().request_validation_layers().require_api_version(1, minor_version).build();
|
||||||
.require_api_version(1, minor_version)
|
|
||||||
.use_default_debug_messenger()
|
|
||||||
.build();
|
|
||||||
REQUIRE(instance_ret.has_value());
|
REQUIRE(instance_ret.has_value());
|
||||||
return instance_ret.value();
|
return instance_ret.value();
|
||||||
}
|
}
|
||||||
@ -16,7 +13,6 @@ vkb::Instance get_headless_instance(uint32_t minor_version = 0) {
|
|||||||
.request_validation_layers()
|
.request_validation_layers()
|
||||||
.require_api_version(1, minor_version)
|
.require_api_version(1, minor_version)
|
||||||
.set_headless()
|
.set_headless()
|
||||||
.use_default_debug_messenger()
|
|
||||||
.build();
|
.build();
|
||||||
REQUIRE(instance_ret.has_value());
|
REQUIRE(instance_ret.has_value());
|
||||||
return instance_ret.value();
|
return instance_ret.value();
|
||||||
|
Loading…
Reference in New Issue
Block a user