This commit is contained in:
parent
bc94b68c0c
commit
e9ce480f96
10 changed files with 175 additions and 136 deletions
|
@ -1,6 +1,6 @@
|
|||
use crate::vulkan::vk_surface::VkSurface;
|
||||
use ash::vk;
|
||||
use crate::vulkan::LOG_TARGET;
|
||||
use ash::vk;
|
||||
|
||||
pub struct VkPhysicalDevice {
|
||||
// Vulkan properties
|
||||
|
@ -34,24 +34,18 @@ impl VkPhysicalDevice {
|
|||
queue_flags: Option<vk::QueueFlags>,
|
||||
surface: Option<&VkSurface>,
|
||||
) -> Option<(u32, &vk::QueueFamilyProperties)> {
|
||||
self.queue_family_properties
|
||||
.iter()
|
||||
.enumerate()
|
||||
.find_map(|(index, queue_family_property)| {
|
||||
self.queue_family_properties.iter().enumerate().find_map(
|
||||
|(index, queue_family_property)| {
|
||||
let surface_check_passed = match surface {
|
||||
Some(surface) => {
|
||||
surface.physical_device_queue_supported(self, index as u32)
|
||||
.unwrap_or(false)
|
||||
}
|
||||
Some(surface) => surface
|
||||
.physical_device_queue_supported(self, index as u32)
|
||||
.unwrap_or(false),
|
||||
None => true,
|
||||
};
|
||||
|
||||
let queue_flags_check_passed = match queue_flags {
|
||||
Some(queue_flags) => {
|
||||
queue_family_property.queue_flags
|
||||
.contains(queue_flags)
|
||||
}
|
||||
None => true
|
||||
Some(queue_flags) => queue_family_property.queue_flags.contains(queue_flags),
|
||||
None => true,
|
||||
};
|
||||
|
||||
if surface_check_passed && queue_flags_check_passed {
|
||||
|
@ -59,7 +53,8 @@ impl VkPhysicalDevice {
|
|||
} else {
|
||||
None
|
||||
}
|
||||
})
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
pub fn pick_physical_device_and_queue_by<'a>(
|
||||
|
@ -67,12 +62,13 @@ impl VkPhysicalDevice {
|
|||
queue_flags: Option<vk::QueueFlags>,
|
||||
surface: Option<&VkSurface>,
|
||||
) -> Option<(&'a VkPhysicalDevice, u32, &'a vk::QueueFamilyProperties)> {
|
||||
physical_devices
|
||||
.iter()
|
||||
.find_map(|physical_device| {
|
||||
physical_device.find_queue_family_by(queue_flags, surface)
|
||||
.and_then(|(queue_index, queue_family_properties)| Some((physical_device, queue_index, queue_family_properties)))
|
||||
})
|
||||
physical_devices.iter().find_map(|physical_device| {
|
||||
physical_device
|
||||
.find_queue_family_by(queue_flags, surface)
|
||||
.and_then(|(queue_index, queue_family_properties)| {
|
||||
Some((physical_device, queue_index, queue_family_properties))
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
pub fn priority(&self) -> usize {
|
||||
|
@ -81,7 +77,7 @@ impl VkPhysicalDevice {
|
|||
vk::PhysicalDeviceType::VIRTUAL_GPU => 2,
|
||||
vk::PhysicalDeviceType::INTEGRATED_GPU => 3,
|
||||
vk::PhysicalDeviceType::DISCRETE_GPU => 4,
|
||||
_ => 0
|
||||
_ => 0,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue