1    type VkDevice
2        def get_images swapchain : List<VkImage> =
3            let mut count = 0
4    
5            vk/get_swapchain_images_khr self swapchain count@mut_ptr null
6            |> assert_success
7    
8            let images = Array<VkImage> count
9    
10           vk/get_swapchain_images_khr self swapchain count@mut_ptr
11                                       images.as_mut_ptr
12           |> assert_success
13   
14           List.from images
15   
16   object VkDevice =
17       def create physical_device
18                  queue_family_index : (VkDevice, VkQueue) =
19           let extension_names = ["VK_KHR_swapchain", "VK_KHR_maintenance2"]
20           let layer_names = ["VK_LAYER_KHRONOS_validation"]
21   
22           let queue_priorities = 1.0
23           let queue_create_info = DeviceQueueCreateInfo
24               type = StructureType/DeviceQueueCreateInfo
25               next = null
26               flags = DeviceQueueCreateFlags@zero
27               =queue_family_index
28               queue_count = 1
29               queue_priorities = queue_priorities@ptr
30   
31           let device_features = PhysicalDeviceFeatures
32               sampler_anisotropy = 1
33               image_cube_array = 1
34               shader_storage_image_multisample = 1
35               fragment_stores_and_atomics = 1
36               sample_rate_shading = 1
37               f@ struct@zero
38   
39           let device_create_info = DeviceCreateInfo
40               type = StructureType/DeviceCreateInfo
41               next = null
42               flags = DeviceCreateFlags@zero
43               queue_create_infos = queue_create_info@ptr
44               queue_create_info_count = 1
45               enabled_features = device_features@ptr
46               enabled_extension_names = extension_names.as_ptr
47               enabled_extension_count = extension_names.size
48               enabled_layer_names = layer_names.as_ptr
49               enabled_layer_count = layer_names.size
50   
51           let mut device = null
52           vk/create_device physical_device device_create_info@ptr null device@mut_ptr
53           |> assert_success
54   
55           let mut queue = null
56           vk/get_device_queue device queue_family_index 0 queue@mut_ptr
57   
58           (device, queue)
59