This commit is contained in:
Florian RICHER 2024-11-12 13:25:52 +01:00
parent d0c6f31a1a
commit caa79270db
5 changed files with 58 additions and 42 deletions

View file

@ -1,7 +1,7 @@
use std::fmt::{Display, Formatter};
use ash::vk;
use crate::vulkan::utils::formatter::{format_driver_version, format_vulkan_version};
use crate::vulkan::vk_surface::VkSurface;
use ash::vk;
use std::fmt::{Display, Formatter};
pub struct VkPhysicalDevice {
// Vulkan properties
@ -22,14 +22,14 @@ impl VkPhysicalDevice {
handle: physical_device,
properties: device_properties,
features: device_features,
queue_family_properties: device_queue_families
queue_family_properties: device_queue_families,
}
}
pub fn find_queue_family_by(
&self,
queue_flags: Option<vk::QueueFlags>,
surface: Option<&VkSurface>
surface: Option<&VkSurface>,
) -> Option<(u32, &vk::QueueFamilyProperties)> {
self.queue_family_properties
.iter()
@ -47,7 +47,7 @@ impl VkPhysicalDevice {
Some(queue_flags) => {
queue_family_property.queue_flags
.contains(queue_flags)
},
}
None => true
};
@ -59,6 +59,19 @@ impl VkPhysicalDevice {
})
}
pub fn pick_physical_device_and_queue_by<'a>(
physical_devices: &'a Vec<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)))
})
}
pub fn priority(&self) -> usize {
match self.properties.device_type {
vk::PhysicalDeviceType::CPU => 1,