1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
	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 = {};
	semaphoreInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;

	// Create a Semaphore
	res = vkCreateSemaphore(device, &semaphoreInfo, 0, &semaphore);

	if (res != VK_SUCCESS)
		return 1;

	VkFenceCreateInfo fenceInfo = {};
	fenceInfo.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO;
	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;