VkSurfaceCapabilitiesKHR pSurfaceCapabilities;
res = vkGetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, &pSurfaceCapabilities);
if (res != VK_SUCCESS)
return 1;
VkFormatProperties formatProperties = {};
vkGetPhysicalDeviceFormatProperties(physicalDevice, VK_FORMAT_A8B8G8R8_UINT_PACK32, &formatProperties);
VkSwapchainCreateInfoKHR swapchainInfo = {};
swapchainInfo.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR;
swapchainInfo.surface = surface;
swapchainInfo.imageArrayLayers = 1;
swapchainInfo.imageExtent = pSurfaceCapabilities.currentExtent;
swapchainInfo.imageFormat = VK_FORMAT_A8B8G8R8_UINT_PACK32;
swapchainInfo.imageUsage = pSurfaceCapabilities.supportedUsageFlags;
swapchainInfo.imageColorSpace = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR;
swapchainInfo.minImageCount = pSurfaceCapabilities.minImageCount;
swapchainInfo.presentMode = VK_PRESENT_MODE_IMMEDIATE_KHR;
swapchainInfo.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE;
VkSwapchainKHR swapchain;
// Create Swapchain
res = vkCreateSwapchainKHR(device, &swapchainInfo, 0, &swapchain);
if (res != VK_SUCCESS)
return 1;
VkSemaphore semaphore;
VkSemaphoreCreateInfo semaphoreInfo = {};
// Create a Semaphore
res = vkCreateSemaphore(device, &semaphoreInfo, 0, &semaphore);
if (res != VK_SUCCESS)
return 1;
VkFenceCreateInfo fenceInfo = {};
VkFence fence;
// Create a Fence
res = vkCreateFence(device, &fenceInfo, 0, &fence);
if (res != VK_SUCCESS)
return 1;
uint32_t imageIndex;
res = vkAcquireNextImageKHR(device, swapchain, 0, semaphore, fence, &imageIndex);
if (res != VK_SUCCESS)
return 1;