29 if (flags & VK_DEBUG_REPORT_INFORMATION_BIT_EXT) {
31 }
else if (flags & VK_DEBUG_REPORT_WARNING_BIT_EXT) {
33 }
else if (flags & VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT) {
34 return "Performance Warning";
35 }
else if (flags & VK_DEBUG_REPORT_ERROR_BIT_EXT) {
37 }
else if (flags & VK_DEBUG_REPORT_DEBUG_BIT_EXT) {
44 VkDebugReportObjectTypeEXT
type) {
46 case VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT:
48 case VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT:
50 case VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT:
51 return "Physical Device";
52 case VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT:
54 case VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT:
56 case VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT:
58 case VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT:
59 return "Command Buffer";
60 case VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT:
62 case VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT:
63 return "Device Memory";
64 case VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT:
66 case VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT:
68 case VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT:
70 case VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT:
72 case VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT:
74 case VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT:
76 case VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT:
77 return "Shader Module";
78 case VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT:
79 return "Pipeline Cache";
80 case VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT:
81 return "Pipeline Layout";
82 case VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT:
84 case VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT:
86 case VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT:
87 return "Descriptor Set Layout";
88 case VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT:
90 case VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT:
91 return "Descriptor Pool";
92 case VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT:
93 return "Descriptor Set";
94 case VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT:
96 case VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT:
97 return "Command Pool";
98 case VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT:
100 case VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT:
102 case VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT:
116 VkDebugReportObjectTypeEXT object_type,
119 int32_t message_code,
120 const char* layer_prefix,
123 std::vector<std::pair<std::string, std::string>> items;
127 items.emplace_back(
"Object Type",
130 items.emplace_back(
"Object Handle", std::to_string(
object));
133 items.emplace_back(
"Location", std::to_string(location));
136 if (message_code != 0) {
137 items.emplace_back(
"Message Code", std::to_string(message_code));
140 if (layer_prefix !=
nullptr) {
141 items.emplace_back(
"Layer", layer_prefix);
145 items.emplace_back(
"Message",
message);
150 for (
const auto& item : items) {
156 std::stringstream stream;
160 stream <<
"--- Vulkan Debug Report ----------------------------------------";
164 for (
const auto& item : items) {
165 stream <<
"| " << std::setw(
static_cast<int>(
padding)) << item.first
166 << std::setw(0) <<
": " << item.second << std::endl;
169 stream <<
"-----------------------------------------------------------------";
175 FML_LOG(ERROR) << stream.str();
189 : vk_(p_vk), application_(application), valid_(false) {
190 if (!vk_.CreateDebugReportCallbackEXT || !vk_.DestroyDebugReportCallbackEXT) {
202 const VkDebugReportCallbackCreateInfoEXT create_info = {
203 .sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT,
207 .pUserData =
nullptr,
210 VkDebugReportCallbackEXT handle = VK_NULL_HANDLE;
212 application_, &create_info,
nullptr, &handle)) != VK_SUCCESS) {
217 handle, [
this](VkDebugReportCallbackEXT handle) {
218 vk_.DestroyDebugReportCallbackEXT(application_, handle,
nullptr);
Vector2 padding
The halo padding in source space.
static VKAPI_ATTR VkBool32 OnVulkanDebugReportCallback(VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT object_type, uint64_t object, size_t location, int32_t message_code, const char *layer_prefix, const char *message, void *user_data)