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