1    module buffer
2    
3    def create (physical_device : VkPhysicalDevice
4                device : VkDevice
5                size : u64
6                usage : BufferUsageFlags
7                memory_property_flags : MemoryPropertyFlags) : (VkBuffer, VkMemory) =
8        let buffer_info = BufferCreateInfo
9            type = StructureType/BufferCreateInfo
10           next = null
11           flags = BufferCreateFlags@zero
12           =size =usage
13           sharing_mode = SharingMode/Exclusive
14           queue_family_index_count = 0
15           queue_family_indices = null
16   
17       let mut buffer = null
18       vk/create_buffer device buffer_info@ptr null buffer@mut_ptr
19       |> assert_success
20   
21       let mut memory_requirements = struct@zero
22       vk/get_buffer_memory_requirements device buffer memory_requirements@mut_ptr
23   
24       let memory_type_index =
25           physical_device.get_memory_type_index memory_requirements.memory_type_bits
26                                                 memory_property_flags
27       let allocate_info = MemoryAllocateInfo
28           type = StructureType/MemoryAllocateInfo
29           next = null
30           allocation_size = memory_requirements.size
31           =memory_type_index
32   
33       let mut buffer_memory = null
34       vk/allocate_memory device allocate_info@ptr null buffer_memory@mut_ptr
35       |> assert_success
36   
37       vk/bind_buffer_memory device buffer buffer_memory 0
38   
39       (buffer, buffer_memory)
40