diff --git a/src/main.c b/src/main.c index 3badb19..95ca16d 100644 --- a/src/main.c +++ b/src/main.c @@ -47,6 +47,14 @@ typedef struct Application { VkQueue presentQueue; } Application; +typedef struct SwapChainSupportDetails { + VkSurfaceCapabilitiesKHR capabilities; + uint32_t numFormats; + VkSurfaceFormatKHR *formats; + uint32_t numPresentModes; + VkPresentModeKHR *presentModes; +} SwapChainSupportDetails; + bool checkValidationLayerSupport() { uint32_t layerCount; vkEnumerateInstanceLayerProperties(&layerCount, NULL); @@ -296,6 +304,20 @@ bool checkDeviceExtensionSupport(VkPhysicalDevice device) { return true; } +SwapChainSupportDetails querySwapchainSupport(VkPhysicalDevice device, + VkSurfaceKHR *surface) { + SwapChainSupportDetails details = {0}; + + vkGetPhysicalDeviceSurfaceCapabilitiesKHR(device, *surface, + &details.capabilities); + vkGetPhysicalDeviceSurfaceFormatsKHR(device, *surface, &details.numFormats, + details.formats); + vkGetPhysicalDeviceSurfacePresentModesKHR( + device, *surface, &details.numPresentModes, details.presentModes); + + return details; +} + bool isDeviceSuitable(VkPhysicalDevice device, VkSurfaceKHR *surface) { QueueFamilyIndices indices = findQueueFamilies(device, surface); bool completeIndeces = @@ -303,6 +325,9 @@ bool isDeviceSuitable(VkPhysicalDevice device, VkSurfaceKHR *surface) { bool extensionsSupported = checkDeviceExtensionSupport(device); + SwapChainSupportDetails swapChaindetails = + querySwapchainSupport(device, surface); + return completeIndeces && extensionsSupported; }