1use crate::*;
2
3use ash::vk;
4use ash::vk::TaggedStructure;
5
6use core::ptr::NonNull;
7
8pub unsafe fn get_instance_chain_info(
9 create_info: &vk::InstanceCreateInfo,
10 function: LayerFunction,
11) -> Option<NonNull<LayerInstanceCreateInfo>> {
12 let mut chain_info_ptr = create_info.p_next.cast::<LayerInstanceCreateInfo>();
13 while !chain_info_ptr.is_null() {
14 let chain_info = chain_info_ptr.read();
15 if chain_info.s_type == LayerInstanceCreateInfo::STRUCTURE_TYPE
16 && chain_info.function == function
17 {
18 return Some(NonNull::new_unchecked(chain_info_ptr as _));
19 }
20 chain_info_ptr = chain_info.p_next.cast()
21 }
22 None
23}
24
25pub unsafe fn get_device_chain_info(
26 create_info: &vk::DeviceCreateInfo,
27 function: LayerFunction,
28) -> Option<NonNull<LayerDeviceCreateInfo>> {
29 let mut chain_info_ptr = create_info.p_next.cast::<LayerDeviceCreateInfo>();
30 while !chain_info_ptr.is_null() {
31 let chain_info = chain_info_ptr.read();
32 if chain_info.s_type == LayerDeviceCreateInfo::STRUCTURE_TYPE
33 && chain_info.function == function
34 {
35 return Some(NonNull::new_unchecked(chain_info_ptr as _));
36 }
37 chain_info_ptr = chain_info.p_next.cast()
38 }
39 None
40}