jGL
Loading...
Searching...
No Matches
vkDebug.h
Go to the documentation of this file.
1#ifndef VKDEBUG
2#define VKDEBUG
3
4#include <vector>
5#include <iostream>
6#include <string>
7
8#include <vulkan/vulkan.h>
9#include <vulkan/vk_enum_string_helper.h>
10
11#include <jGL/debug.h>
12
13#ifdef VALIDATION
14 const bool enableValidationLayers = true;
15#else
16 const bool enableValidationLayers = false;
17#endif
18
19#ifdef VERBOSE
20 const bool verboseValidationLayers = true;
21#else
22 const bool verboseValidationLayers = false;
23#endif
24
25const std::vector<const char *> validationLayers =
26{
27 "VK_LAYER_KHRONOS_validation"
28};
29
30static VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback
31(
32 VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
33 VkDebugUtilsMessageTypeFlagsEXT messageTypes,
34 const VkDebugUtilsMessengerCallbackDataEXT * pCallbackData,
35 void * pUserData
36)
37{
38 /*
39 messageSeverity can be
40
41 VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT: Diagnostic message
42 VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT: Informational message like the creation of a resource
43 VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT: Message about behavior that is not necessarily an error, but very likely a bug in your application
44 VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT: Message about behavior that is invalid and may cause crashes
45
46 messageType can be
47
48 VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT: Some event has happened that is unrelated to the specification or performance
49 VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT: Something has happened that violates the specification or indicates a possible mistake
50 VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT: Potential non-optimal use of Vulkan
51
52 */
54 {
55 std::cerr << "validation layer: " << pCallbackData->pMessage << std::endl;
56 }
57 else
58 {
59 if (messageSeverity >= VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT)
60 {
61 std::cerr << "validation layer: " << pCallbackData->pMessage << std::endl;
62 #ifdef EXCEPT_ON_VALIDATION
63 throw std::runtime_error("Vulkan validation warning or error encountered");
64 #endif
65 }
66 }
67
68 // abort triggering call
69 return VK_FALSE;
70}
71
72[[maybe_unused]] static void populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT & createInfo) {
73 createInfo = {};
74 createInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
75 createInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
76 createInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
77 createInfo.pfnUserCallback = debugCallback;
78 createInfo.pUserData = nullptr; // Optional
79 createInfo.pNext = nullptr;
80 createInfo.flags = 0;
81}
82
83void vkError(VkResult result, std::string context = "unspecified");
84
85#endif /* VKDEBUG */
const std::vector< const char * > validationLayers
Definition vkDebug.h:25
const bool verboseValidationLayers
Definition vkDebug.h:22
void vkError(VkResult result, std::string context="unspecified")
Definition debug.cpp:3
const bool enableValidationLayers
Definition vkDebug.h:16