+ assert_ne!(bind_info_count, 0);
+ let bind_infos = slice::from_raw_parts(bind_infos, bind_info_count as usize);
+ for bind_info in bind_infos {
+ parse_next_chain_const!{
+ bind_info as *const api::VkBindImageMemoryInfo,
+ root = api::VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO,
+ device_group_info: api::VkBindImageMemoryDeviceGroupInfo = api::VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO,
+ swapchain_info: api::VkBindImageMemorySwapchainInfoKHR = api::VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR,
+ plane_info: api::VkBindImagePlaneMemoryInfo = api::VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO,
+ }
+ if !device_group_info.is_null() {
+ let ref device_group_info = *device_group_info;
+ if device_group_info.deviceIndexCount == 0 {
+ } else {
+ assert_eq!(device_group_info.deviceIndexCount, 1);
+ assert_eq!(*device_group_info.pDeviceIndices, 0);
+ }
+ }
+ if !swapchain_info.is_null() {
+ unimplemented!();
+ }
+ if !plane_info.is_null() {
+ unimplemented!();
+ }
+ let ref bind_info = *bind_info;
+ let mut image = MutHandle::from(bind_info.image).unwrap();
+ let device_memory = SharedHandle::from(bind_info.memory).unwrap();
+ let device_memory_size = device_memory.size();
+ let image_memory_layout = image.properties.computed_properties().memory_layout;
+ assert!(bind_info.memoryOffset < device_memory_size as u64);
+ let offset = bind_info.memoryOffset as usize;
+ assert!(image_memory_layout.size.checked_add(offset).unwrap() <= device_memory_size);
+ assert_eq!(offset % image_memory_layout.alignment, 0);
+ image.memory = Some(ImageMemory {
+ device_memory,
+ offset,
+ });
+ }
+ api::VK_SUCCESS