use ash::vk::LayerProperties; pub fn format_vulkan_version(version: u32) -> String { format!( "{}.{}.{}", ash::vk::api_version_major(version), ash::vk::api_version_minor(version), ash::vk::api_version_patch(version) ) } pub fn format_driver_version(vendor_id: u32, driver_version_raw: u32) -> String { if vendor_id == 0x10de { // NVIDIA format!( "{}.{}.{}.{}", (driver_version_raw >> 22) & 0x3ff, (driver_version_raw >> 14) & 0x0ff, (driver_version_raw >> 6) & 0x0ff, (driver_version_raw) & 0x003f ) } else if vendor_id == 0x8086 { // Intel format!( "{}.{}", driver_version_raw >> 14, driver_version_raw & 0x3fff ) } else { format_vulkan_version(driver_version_raw) } } pub fn format_instance_layer(instance_layer: &LayerProperties) -> String { let layer_name = instance_layer .layer_name_as_c_str() .and_then(|s| Ok(s.to_string_lossy())) .and_then(|s| Ok(s.to_string())) .unwrap_or(String::from("No layer name")); let description = instance_layer .description_as_c_str() .and_then(|s| Ok(s.to_string_lossy())) .and_then(|s| Ok(s.to_string())) .unwrap_or(String::from("No layer name")); format!( "Name: {layer_name} Vulkan Version: {} Revision: {} Description: {description}", format_vulkan_version(instance_layer.spec_version), instance_layer.implementation_version, ) }