Merge branch 'main' of warwicknew.co.uk:new-engine

This commit is contained in:
Warwick New 2024-10-12 21:49:38 +01:00
commit 7c5362682a

View file

@ -58,7 +58,7 @@ bool checkValidationLayerSupport() {
return true;
}
bool verifyGlfwExtensionSupport(uint32_t extensionCount,
bool verifyExtensionSupport(uint32_t extensionCount,
VkExtensionProperties *extentions,
uint32_t glfwExtensionCount,
const char **glfwExtensions) {
@ -71,6 +71,7 @@ bool verifyGlfwExtensionSupport(uint32_t extensionCount,
}
}
if (!layerFound) {
fprintf(stderr, "Missing %s vulkan extention\n", glfwExtensions[i]);
return false;
}
}
@ -96,6 +97,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,
@ -103,25 +106,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);
}