@@ -66,31 +66,47 @@ fn get_device_info(device: PhysicalDevice) -> Vec<String> {
6666}
6767
6868pub fn iterate_devices ( ) {
69- let entry = unsafe { Entry :: load ( ) . unwrap ( ) } ;
70- let appinfo = vk:: ApplicationInfo {
71- api_version : vk:: API_VERSION_1_3 ,
72- ..Default :: default ( )
69+ let entry = match unsafe { Entry :: load ( ) } {
70+ Ok ( entry) => entry,
71+ Err ( e) => {
72+ eprintln ! ( "Failed to load entry: {:?}" , e) ;
73+ return ;
74+ }
7375 } ;
7476
75- let create_info = vk:: InstanceCreateInfo :: default ( ) . application_info ( & appinfo) ;
76- let instance = unsafe { entry. create_instance ( & create_info, None ) . unwrap ( ) } ;
77-
78- let devices = unsafe { instance. enumerate_physical_devices ( ) . unwrap ( ) } ;
79- for device in devices {
80- // let x = unsafe {
81- // instance
82- // .enumerate_device_extension_properties(device)
83- // .unwrap()
84- // };
85- // for x in x {
86- // println!(
87- // "{:?}",
88- // x.extension_name_as_c_str()
89- // .unwrap()
90- // .to_string_lossy()
91- // .to_string()
92- // );
93- // }
94- fetch_device ( & instance, device) ;
77+ let versions = [
78+ vk:: API_VERSION_1_3 ,
79+ vk:: API_VERSION_1_2 ,
80+ vk:: API_VERSION_1_1 ,
81+ vk:: API_VERSION_1_0 ,
82+ ] ;
83+
84+ for api_version in versions {
85+ let app_info = vk:: ApplicationInfo {
86+ api_version,
87+ ..Default :: default ( )
88+ } ;
89+ let create_info = vk:: InstanceCreateInfo :: default ( ) . application_info ( & app_info) ;
90+ let instance_result = unsafe { entry. create_instance ( & create_info, None ) } ;
91+ match instance_result {
92+ Ok ( instance) => {
93+ let devices_result = unsafe { instance. enumerate_physical_devices ( ) } ;
94+ match devices_result {
95+ Ok ( devices) => {
96+ devices. into_iter ( ) . for_each ( |device| {
97+ fetch_device ( & instance, device) ;
98+ } ) ;
99+ }
100+ Err ( e) => {
101+ eprintln ! ( "Failed to enumerate physical devices: {:?}" , e) ;
102+ }
103+ }
104+ }
105+ Err ( e) => {
106+ eprintln ! ( "Failed to create instance: {:?}" , e) ;
107+ continue ;
108+ }
109+ }
110+ break ;
95111 }
96112}
0 commit comments