diff --git a/src/main.c b/src/main.c index 228d625..de8d904 100644 --- a/src/main.c +++ b/src/main.c @@ -267,21 +267,45 @@ QueueFamilyIndices findQueueFamilies(VkPhysicalDevice device, return indices; } -bool ckeckDeviceExtensionSupport(VkPhysicalDevice device) { - uint32_t extensionCount; - vkEnumerateDeviceExtensionProperties(device, NULL, &extensionCount, NULL); - - VkExtensionProperties availableExtentions[extensionCount]; - vkEnumerateDeviceExtensionProperties(device, NULL, &extensionCount, +bool checkDeviceExtensionSupport(VkPhysicalDevice device, + const char *requiredExtentions[], + size_t requiredExtentionCount) { + uint32_t availableExtensionCount; + vkEnumerateDeviceExtensionProperties(device, NULL, &availableExtensionCount, + NULL); + VkExtensionProperties availableExtentions[availableExtensionCount]; + vkEnumerateDeviceExtensionProperties(device, NULL, &availableExtensionCount, availableExtentions); + for (uint i = 0; i < requiredExtentionCount; i++) { + bool extentionFound = false; + for (uint j = 0; j < availableExtensionCount; j++) { + if (strcmp(availableExtentions[j].extensionName, requiredExtentions[i]) == + 0) { + extentionFound = true; + break; + } + } + if (!extentionFound) { + return false; + } + } return true; } bool isDeviceSuitable(VkPhysicalDevice device, VkSurfaceKHR *surface) { QueueFamilyIndices indices = findQueueFamilies(device, surface); + bool completeIndeces = + indices.graphicsFamilyExists && indices.presentFamilyExists; - return indices.graphicsFamilyExists && indices.presentFamilyExists; + const char *requiredExtensions[] = {VK_KHR_SWAPCHAIN_EXTENSION_NAME}; + size_t requiredExtentionCount = + sizeof(requiredExtensions) / sizeof(const char *); + + bool extensionsSupported = checkDeviceExtensionSupport( + device, requiredExtensions, requiredExtentionCount); + + return completeIndeces && extensionsSupported; } void pickPhysicalDevice(Application *app) {