From d6ae5a79d6b37311259e43a95bb167bcd82c78fa Mon Sep 17 00:00:00 2001 From: Warwick Date: Thu, 10 Oct 2024 18:40:57 +0100 Subject: [PATCH] Finally got thevalidation extension to seemingly work --- src/main.c | 53 ++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/src/main.c b/src/main.c index 6901559..2dbe35c 100644 --- a/src/main.c +++ b/src/main.c @@ -44,10 +44,10 @@ bool checkValidationLayerSupport() { return true; } -bool verifyGlfwExtensionSupport(uint32_t extensionCount, - VkExtensionProperties *extentions, - uint32_t glfwExtensionCount, - const char **glfwExtensions) { +bool verifyExtensionSupport(uint32_t extensionCount, + VkExtensionProperties *extentions, + uint32_t glfwExtensionCount, + const char **glfwExtensions) { for (uint32_t i = 0; i < glfwExtensionCount; i++) { bool layerFound = false; for (uint32_t j = 0; j < extensionCount; j++) { @@ -57,6 +57,7 @@ bool verifyGlfwExtensionSupport(uint32_t extensionCount, } } if (!layerFound) { + fprintf(stderr, "Missing %s vulkan extention\n", glfwExtensions[i]); return false; } } @@ -82,6 +83,8 @@ void createInstance(Application *app) { const char **glfwExtensions; glfwExtensions = glfwGetRequiredInstanceExtensions(&glfwExtensionCount); + const char *glfwExtensionsDebug[glfwExtensionCount + 1]; + VkInstanceCreateInfo createInfo = { .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, .pApplicationInfo = &appInfo, @@ -89,25 +92,41 @@ void createInstance(Application *app) { .ppEnabledExtensionNames = glfwExtensions, .enabledLayerCount = 0, }; - if (enableValidationLayers) { - createInfo.enabledLayerCount = validationLayerCount; - createInfo.ppEnabledLayerNames = validationLayers; - } - - VkResult result = vkCreateInstance(&createInfo, NULL, &app->instance); - if (result != VK_SUCCESS) { - fprintf(stderr, "Failed to create vulkan instance\n"); - exit(EXIT_FAILURE); - } uint32_t extensionCount = 0; vkEnumerateInstanceExtensionProperties(NULL, &extensionCount, NULL); VkExtensionProperties extensions[extensionCount]; vkEnumerateInstanceExtensionProperties(NULL, &extensionCount, extensions); - if (!verifyGlfwExtensionSupport(extensionCount, extensions, - glfwExtensionCount, glfwExtensions)) { - fprintf(stderr, "Failed to find all required vulkan extentions for glfw\n"); + if (enableValidationLayers) { + createInfo.enabledLayerCount = validationLayerCount; + createInfo.ppEnabledLayerNames = validationLayers; + + for (size_t i = 0; i < glfwExtensionCount; i++) { + glfwExtensionsDebug[i] = glfwExtensions[i]; + } + glfwExtensionsDebug[glfwExtensionCount] = VK_EXT_DEBUG_UTILS_EXTENSION_NAME; + createInfo.enabledExtensionCount = glfwExtensionCount + 1; + createInfo.ppEnabledExtensionNames = glfwExtensionsDebug; + if (!verifyExtensionSupport(extensionCount, extensions, + glfwExtensionCount + 1, glfwExtensionsDebug)) { + fprintf( + stderr, + "Failed to find all required vulkan extentions for glfw and debug\n"); + exit(EXIT_FAILURE); + } + } else { + if (!verifyExtensionSupport(extensionCount, extensions, glfwExtensionCount, + glfwExtensions)) { + fprintf(stderr, + "Failed to find all required vulkan extentions for glfw\n"); + exit(EXIT_FAILURE); + } + } + + VkResult result = vkCreateInstance(&createInfo, NULL, &app->instance); + if (result != VK_SUCCESS) { + fprintf(stderr, "Failed to create vulkan instance\n"); exit(EXIT_FAILURE); }