diff --git a/crates/engine_vulkan/src/utils/device.rs b/crates/engine_vulkan/src/utils/device.rs index e44ac52..38bf5fd 100644 --- a/crates/engine_vulkan/src/utils/device.rs +++ b/crates/engine_vulkan/src/utils/device.rs @@ -87,7 +87,7 @@ fn pick_physical_device(world: &World, config: &VulkanConfig) -> Option() .expect("Failed to get VulkanInstance during vulkan plugin initialization"); - let result = instance + instance .0 .enumerate_physical_devices() .expect("Failed to enumerate physical devices") @@ -100,17 +100,15 @@ fn pick_physical_device(world: &World, config: &VulkanConfig) -> Option 4, _ => 5, }) - .take(); - - match result { - Some((p, (device_extensions, picked_queues_info))) => Some(create_device( - config, - &p, - device_extensions, - &picked_queues_info, - )), - None => None, - } + .take() + .and_then(|(p, (device_extensions, picked_queues_info))| { + Some(create_device( + config, + &p, + device_extensions, + &picked_queues_info, + )) + }) } fn check_device_extensions_support( @@ -197,6 +195,14 @@ fn check_queues_support( transfer_queue_family_index = Some(i as u32); } } + + if (!config.with_graphics_queue || graphics_queue_family_index.is_some()) + && (!config.with_compute_queue || compute_queue_family_index.is_some()) + && (!config.with_transfer_queue || transfer_queue_family_index.is_some()) + { + // We found all required queues, no need to continue iterating + break; + } } if !config.with_graphics_queue {