Setup the debug messenger after we create the instance.

This commit is contained in:
Warwick New 2024-10-14 13:35:16 +01:00
parent 3deda81b1d
commit 1c32991ee6

View file

@ -89,7 +89,6 @@ void populateDebugMessengerCreateInfo(
VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_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;
createInfo->pfnUserCallback = debugCallback; createInfo->pfnUserCallback = debugCallback;
createInfo->pUserData = NULL; // Optional
} }
void createInstance(Application *app) { void createInstance(Application *app) {
@ -126,10 +125,11 @@ void createInstance(Application *app) {
VkExtensionProperties extensions[extensionCount]; VkExtensionProperties extensions[extensionCount];
vkEnumerateInstanceExtensionProperties(NULL, &extensionCount, extensions); vkEnumerateInstanceExtensionProperties(NULL, &extensionCount, extensions);
VkDebugUtilsMessengerCreateInfoEXT debugCreateInfo = {}; // VkDebugUtilsMessengerCreateInfoEXT debugCreateInfo = {0};
if (enableValidationLayers) { if (enableValidationLayers) {
populateDebugMessengerCreateInfo(&debugCreateInfo); // populateDebugMessengerCreateInfo(&debugCreateInfo);
createInfo.pNext = (VkDebugUtilsMessengerCreateInfoEXT *)&debugCreateInfo; // createInfo.pNext = (VkDebugUtilsMessengerCreateInfoEXT
// *)&debugCreateInfo;
createInfo.enabledLayerCount = validationLayerCount; createInfo.enabledLayerCount = validationLayerCount;
createInfo.ppEnabledLayerNames = validationLayers; createInfo.ppEnabledLayerNames = validationLayers;
@ -190,9 +190,13 @@ VkResult CreateDebugUtilsMessengerEXT(
} }
void setupDebugMessenger(Application *app) { void setupDebugMessenger(Application *app) {
if (enableValidationLayers && !checkValidationLayerSupport()) { if (!enableValidationLayers) {
return;
}
if (!checkValidationLayerSupport()) {
fprintf(stderr, "Validation layers requested, but not available!\n"); fprintf(stderr, "Validation layers requested, but not available!\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
}
VkDebugUtilsMessengerCreateInfoEXT createInfo = {}; VkDebugUtilsMessengerCreateInfoEXT createInfo = {};
populateDebugMessengerCreateInfo(&createInfo); populateDebugMessengerCreateInfo(&createInfo);
@ -201,22 +205,21 @@ void setupDebugMessenger(Application *app) {
fprintf(stderr, "failed to set up debug messenger!\n"); fprintf(stderr, "failed to set up debug messenger!\n");
} }
} }
}
void DestroyDebugUtilsMessengerEXT(VkInstance instance, void DestroyDebugUtilsMessengerEXT(VkInstance instance,
VkDebugUtilsMessengerEXT *debugMessenger, VkDebugUtilsMessengerEXT debugMessenger,
const VkAllocationCallbacks *pAllocator) { const VkAllocationCallbacks *pAllocator) {
PFN_vkDestroyDebugUtilsMessengerEXT func = PFN_vkDestroyDebugUtilsMessengerEXT func =
(PFN_vkDestroyDebugUtilsMessengerEXT)vkGetInstanceProcAddr( (PFN_vkDestroyDebugUtilsMessengerEXT)vkGetInstanceProcAddr(
instance, "vkDestroyDebugUtilsMessengerEXT"); instance, "vkDestroyDebugUtilsMessengerEXT");
if (func != NULL) { if (func != NULL) {
func(instance, *debugMessenger, pAllocator); func(instance, debugMessenger, pAllocator);
} }
} }
void initVulkan(Application *app) { void initVulkan(Application *app) {
setupDebugMessenger(app);
createInstance(app); createInstance(app);
setupDebugMessenger(app);
} }
void mainLoop(Application *app) { void mainLoop(Application *app) {
while (!glfwWindowShouldClose(app->window)) { while (!glfwWindowShouldClose(app->window)) {
@ -225,7 +228,7 @@ void mainLoop(Application *app) {
} }
void cleanup(Application *app) { void cleanup(Application *app) {
if (enableValidationLayers) { if (enableValidationLayers) {
DestroyDebugUtilsMessengerEXT(app->instance, &app->debugMessenger, NULL); DestroyDebugUtilsMessengerEXT(app->instance, app->debugMessenger, NULL);
} }
vkDestroyInstance(app->instance, NULL); vkDestroyInstance(app->instance, NULL);
glfwDestroyWindow(app->window); glfwDestroyWindow(app->window);