Attempt at more validation layers
This commit is contained in:
parent
7c5362682a
commit
6d5854d5b1
1 changed files with 57 additions and 10 deletions
65
src/main.c
65
src/main.c
|
|
@ -78,6 +78,21 @@ bool verifyExtensionSupport(uint32_t extensionCount,
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void populateDebugMessengerCreateInfo(
|
||||||
|
VkDebugUtilsMessengerCreateInfoEXT *createInfo) {
|
||||||
|
createInfo->sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
|
||||||
|
createInfo->messageSeverity =
|
||||||
|
VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT |
|
||||||
|
VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT |
|
||||||
|
VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
|
||||||
|
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;
|
||||||
|
createInfo->pfnUserCallback = debugCallback;
|
||||||
|
createInfo->pUserData = NULL; // Optional
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void createInstance(Application *app) {
|
void createInstance(Application *app) {
|
||||||
if (enableValidationLayers && !checkValidationLayerSupport()) {
|
if (enableValidationLayers && !checkValidationLayerSupport()) {
|
||||||
fprintf(stderr, "Validation layers requested, but not available!\n");
|
fprintf(stderr, "Validation layers requested, but not available!\n");
|
||||||
|
|
@ -112,7 +127,11 @@ void createInstance(Application *app) {
|
||||||
VkExtensionProperties extensions[extensionCount];
|
VkExtensionProperties extensions[extensionCount];
|
||||||
vkEnumerateInstanceExtensionProperties(NULL, &extensionCount, extensions);
|
vkEnumerateInstanceExtensionProperties(NULL, &extensionCount, extensions);
|
||||||
|
|
||||||
|
VkDebugUtilsMessengerCreateInfoEXT debugCreateInfo = {};
|
||||||
if (enableValidationLayers) {
|
if (enableValidationLayers) {
|
||||||
|
populateDebugMessengerCreateInfo(&debugCreateInfo);
|
||||||
|
createInfo.pNext = (VkDebugUtilsMessengerCreateInfoEXT *)&debugCreateInfo;
|
||||||
|
|
||||||
createInfo.enabledLayerCount = validationLayerCount;
|
createInfo.enabledLayerCount = validationLayerCount;
|
||||||
createInfo.ppEnabledLayerNames = validationLayers;
|
createInfo.ppEnabledLayerNames = validationLayers;
|
||||||
|
|
||||||
|
|
@ -156,21 +175,46 @@ void initWindow(Application *app) {
|
||||||
glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE);
|
glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE);
|
||||||
app->window = glfwCreateWindow(800, 600, "Vulkan", NULL, NULL);
|
app->window = glfwCreateWindow(800, 600, "Vulkan", NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VkResult CreateDebugUtilsMessengerEXT(
|
||||||
|
VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT *pCreateInfo,
|
||||||
|
const VkAllocationCallbacks *pAllocator,
|
||||||
|
VkDebugUtilsMessengerEXT *pDebugMessenger) {
|
||||||
|
PFN_vkCreateDebugUtilsMessengerEXT func =
|
||||||
|
(PFN_vkCreateDebugUtilsMessengerEXT)vkGetInstanceProcAddr(
|
||||||
|
instance, "vkCreateDebugUtilsMessengerEXT");
|
||||||
|
if (func != NULL) {
|
||||||
|
return func(instance, pCreateInfo, pAllocator, pDebugMessenger);
|
||||||
|
} else {
|
||||||
|
return VK_ERROR_EXTENSION_NOT_PRESENT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void setupDebugMessenger(Application *app) {
|
void setupDebugMessenger(Application *app) {
|
||||||
VkDebugUtilsMessengerCreateInfoEXT createInfo = {};
|
VkDebugUtilsMessengerCreateInfoEXT createInfo = {};
|
||||||
createInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
|
populateDebugMessengerCreateInfo(&createInfo);
|
||||||
createInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT |
|
|
||||||
VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT |
|
if (CreateDebugUtilsMessengerEXT(app->instance, &createInfo, NULL,
|
||||||
VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
|
&app->debugMessenger) != VK_SUCCESS) {
|
||||||
createInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT |
|
fprintf(stderr, "failed to set up debug messenger!");
|
||||||
VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT |
|
}
|
||||||
VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
|
}
|
||||||
createInfo.pfnUserCallback = debugCallback;
|
|
||||||
createInfo.pUserData = NULL; // Optional
|
void DestroyDebugUtilsMessengerEXT(VkInstance instance,
|
||||||
|
VkDebugUtilsMessengerEXT debugMessenger,
|
||||||
|
const VkAllocationCallbacks *pAllocator) {
|
||||||
|
PFN_vkDestroyDebugUtilsMessengerEXT func =
|
||||||
|
(PFN_vkDestroyDebugUtilsMessengerEXT)vkGetInstanceProcAddr(
|
||||||
|
instance, "vkDestroyDebugUtilsMessengerEXT");
|
||||||
|
if (func != NULL) {
|
||||||
|
func(instance, debugMessenger, pAllocator);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void initVulkan(Application *app) {
|
void initVulkan(Application *app) {
|
||||||
|
if (enableValidationLayers) {
|
||||||
setupDebugMessenger(app);
|
setupDebugMessenger(app);
|
||||||
|
}
|
||||||
createInstance(app);
|
createInstance(app);
|
||||||
}
|
}
|
||||||
void mainLoop(Application *app) {
|
void mainLoop(Application *app) {
|
||||||
|
|
@ -179,6 +223,9 @@ void mainLoop(Application *app) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void cleanup(Application *app) {
|
void cleanup(Application *app) {
|
||||||
|
if (enableValidationLayers) {
|
||||||
|
DestroyDebugUtilsMessengerEXT(app->instance, app->debugMessenger, NULL);
|
||||||
|
}
|
||||||
vkDestroyInstance(app->instance, NULL);
|
vkDestroyInstance(app->instance, NULL);
|
||||||
glfwDestroyWindow(app->window);
|
glfwDestroyWindow(app->window);
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue