diff --git a/src/main.c b/src/main.c index abdcf63..26e1a18 100644 --- a/src/main.c +++ b/src/main.c @@ -125,11 +125,10 @@ void createInstance(Application *app) { VkExtensionProperties extensions[extensionCount]; vkEnumerateInstanceExtensionProperties(NULL, &extensionCount, extensions); - // VkDebugUtilsMessengerCreateInfoEXT debugCreateInfo = {0}; + VkDebugUtilsMessengerCreateInfoEXT debugCreateInfo = {0}; if (enableValidationLayers) { - // populateDebugMessengerCreateInfo(&debugCreateInfo); - // createInfo.pNext = (VkDebugUtilsMessengerCreateInfoEXT - // *)&debugCreateInfo; + populateDebugMessengerCreateInfo(&debugCreateInfo); + createInfo.pNext = (VkDebugUtilsMessengerCreateInfoEXT *)&debugCreateInfo; createInfo.enabledLayerCount = validationLayerCount; createInfo.ppEnabledLayerNames = validationLayers; @@ -217,9 +216,37 @@ void DestroyDebugUtilsMessengerEXT(VkInstance instance, } } +bool isDeviceSuitable(VkPhysicalDevice device) { return true; } + +void pickPhysicalDevice(Application *app) { + VkPhysicalDevice physicalDevice = VK_NULL_HANDLE; + + uint32_t physicalDeviceCount; + vkEnumeratePhysicalDevices(app->instance, &physicalDeviceCount, NULL); + if (physicalDeviceCount == 0) { + fprintf(stderr, "Failed to find GPU with vulkan support!\n"); + exit(EXIT_FAILURE); + } + VkPhysicalDevice physicalDevices[physicalDeviceCount]; + vkEnumeratePhysicalDevices(app->instance, &physicalDeviceCount, + physicalDevices); + + for (int i = 0; i < physicalDeviceCount; i++) { + if (isDeviceSuitable(physicalDevices[i])) { + physicalDevice = physicalDevices[i]; + } + } + + if (physicalDevice == VK_NULL_HANDLE){ + fprintf(stderr, "Failed to find suitable GPU\n"); + exit(EXIT_FAILURE); + } +} + void initVulkan(Application *app) { createInstance(app); setupDebugMessenger(app); + pickPhysicalDevice(app); } void mainLoop(Application *app) { while (!glfwWindowShouldClose(app->window)) {