| use super::physical::{ |
| ConformanceVersion, DriverId, MemoryDecompressionMethods, OpticalFlowGridSizes, |
| PhysicalDeviceType, PipelineRobustnessBufferBehavior, PipelineRobustnessImageBehavior, |
| PointClippingBehavior, RayTracingInvocationReorderMode, ShaderCoreProperties, |
| ShaderFloatControlsIndependence, SubgroupFeatures, |
| }; |
| use crate::{ |
| device::{DeviceExtensions, QueueFlags}, |
| image::{SampleCount, SampleCounts}, |
| instance::InstanceExtensions, |
| memory::DeviceAlignment, |
| render_pass::ResolveModes, |
| shader::ShaderStages, |
| DeviceSize, Version, |
| }; |
| use std::{ffi::CStr, os::raw::c_char}; |
| |
| // Generated by build.rs |
| include!(concat!(env!("OUT_DIR"), "/properties.rs")); |
| |
| // A bit of a hack... |
| // TODO: integrate into autogen? |
| pub(crate) trait FromVulkan<F> |
| where |
| Self: Sized, |
| { |
| fn from_vulkan(val: F) -> Option<Self>; |
| } |
| |
| impl FromVulkan<u8> for u8 { |
| #[inline] |
| fn from_vulkan(val: u8) -> Option<Self> { |
| Some(val) |
| } |
| } |
| |
| impl<const N: usize> FromVulkan<[u8; N]> for [u8; N] { |
| #[inline] |
| fn from_vulkan(val: [u8; N]) -> Option<Self> { |
| Some(val) |
| } |
| } |
| |
| impl FromVulkan<u32> for u32 { |
| #[inline] |
| fn from_vulkan(val: u32) -> Option<Self> { |
| Some(val) |
| } |
| } |
| |
| impl<const N: usize> FromVulkan<[u32; N]> for [u32; N] { |
| #[inline] |
| fn from_vulkan(val: [u32; N]) -> Option<Self> { |
| Some(val) |
| } |
| } |
| |
| impl FromVulkan<u64> for u64 { |
| #[inline] |
| fn from_vulkan(val: u64) -> Option<Self> { |
| Some(val) |
| } |
| } |
| |
| impl FromVulkan<u64> for DeviceAlignment { |
| #[inline] |
| fn from_vulkan(val: u64) -> Option<Self> { |
| DeviceAlignment::new(val) |
| } |
| } |
| |
| impl FromVulkan<usize> for usize { |
| #[inline] |
| fn from_vulkan(val: usize) -> Option<Self> { |
| Some(val) |
| } |
| } |
| |
| impl FromVulkan<i32> for i32 { |
| #[inline] |
| fn from_vulkan(val: i32) -> Option<Self> { |
| Some(val) |
| } |
| } |
| |
| impl FromVulkan<i64> for i64 { |
| #[inline] |
| fn from_vulkan(val: i64) -> Option<Self> { |
| Some(val) |
| } |
| } |
| |
| impl FromVulkan<f32> for f32 { |
| #[inline] |
| fn from_vulkan(val: f32) -> Option<Self> { |
| Some(val) |
| } |
| } |
| |
| impl<const N: usize> FromVulkan<[f32; N]> for [f32; N] { |
| #[inline] |
| fn from_vulkan(val: [f32; N]) -> Option<Self> { |
| Some(val) |
| } |
| } |
| |
| impl<const N: usize> FromVulkan<[c_char; N]> for String { |
| #[inline] |
| fn from_vulkan(val: [c_char; N]) -> Option<Self> { |
| Some(unsafe { CStr::from_ptr(val.as_ptr()).to_string_lossy().into_owned() }) |
| } |
| } |
| |
| impl FromVulkan<u32> for Version { |
| #[inline] |
| fn from_vulkan(val: u32) -> Option<Self> { |
| val.try_into().ok() |
| } |
| } |
| |
| impl FromVulkan<ash::vk::Bool32> for bool { |
| #[inline] |
| fn from_vulkan(val: ash::vk::Bool32) -> Option<Self> { |
| Some(val != 0) |
| } |
| } |
| |
| impl FromVulkan<ash::vk::ConformanceVersion> for ConformanceVersion { |
| #[inline] |
| fn from_vulkan(val: ash::vk::ConformanceVersion) -> Option<Self> { |
| Some(val.into()) |
| } |
| } |
| |
| impl FromVulkan<ash::vk::DriverId> for DriverId { |
| #[inline] |
| fn from_vulkan(val: ash::vk::DriverId) -> Option<Self> { |
| val.try_into().ok() |
| } |
| } |
| |
| impl FromVulkan<ash::vk::Extent2D> for [u32; 2] { |
| #[inline] |
| fn from_vulkan(val: ash::vk::Extent2D) -> Option<Self> { |
| Some([val.width, val.height]) |
| } |
| } |
| |
| impl FromVulkan<ash::vk::MemoryDecompressionMethodFlagsNV> for MemoryDecompressionMethods { |
| #[inline] |
| fn from_vulkan(val: ash::vk::MemoryDecompressionMethodFlagsNV) -> Option<Self> { |
| Some(val.into()) |
| } |
| } |
| |
| impl FromVulkan<ash::vk::OpticalFlowGridSizeFlagsNV> for OpticalFlowGridSizes { |
| #[inline] |
| fn from_vulkan(val: ash::vk::OpticalFlowGridSizeFlagsNV) -> Option<Self> { |
| Some(val.into()) |
| } |
| } |
| |
| impl FromVulkan<ash::vk::PhysicalDeviceType> for PhysicalDeviceType { |
| #[inline] |
| fn from_vulkan(val: ash::vk::PhysicalDeviceType) -> Option<Self> { |
| val.try_into().ok() |
| } |
| } |
| |
| impl FromVulkan<ash::vk::PipelineRobustnessBufferBehaviorEXT> for PipelineRobustnessBufferBehavior { |
| #[inline] |
| fn from_vulkan(val: ash::vk::PipelineRobustnessBufferBehaviorEXT) -> Option<Self> { |
| val.try_into().ok() |
| } |
| } |
| |
| impl FromVulkan<ash::vk::PipelineRobustnessImageBehaviorEXT> for PipelineRobustnessImageBehavior { |
| #[inline] |
| fn from_vulkan(val: ash::vk::PipelineRobustnessImageBehaviorEXT) -> Option<Self> { |
| val.try_into().ok() |
| } |
| } |
| |
| impl FromVulkan<ash::vk::PointClippingBehavior> for PointClippingBehavior { |
| #[inline] |
| fn from_vulkan(val: ash::vk::PointClippingBehavior) -> Option<Self> { |
| val.try_into().ok() |
| } |
| } |
| |
| impl FromVulkan<ash::vk::QueueFlags> for QueueFlags { |
| #[inline] |
| fn from_vulkan(val: ash::vk::QueueFlags) -> Option<Self> { |
| Some(val.into()) |
| } |
| } |
| |
| impl FromVulkan<ash::vk::RayTracingInvocationReorderModeNV> for RayTracingInvocationReorderMode { |
| #[inline] |
| fn from_vulkan(val: ash::vk::RayTracingInvocationReorderModeNV) -> Option<Self> { |
| val.try_into().ok() |
| } |
| } |
| |
| impl FromVulkan<ash::vk::ResolveModeFlags> for ResolveModes { |
| #[inline] |
| fn from_vulkan(val: ash::vk::ResolveModeFlags) -> Option<Self> { |
| Some(val.into()) |
| } |
| } |
| |
| impl FromVulkan<ash::vk::SampleCountFlags> for SampleCounts { |
| #[inline] |
| fn from_vulkan(val: ash::vk::SampleCountFlags) -> Option<Self> { |
| Some(val.into()) |
| } |
| } |
| |
| impl FromVulkan<ash::vk::SampleCountFlags> for SampleCount { |
| #[inline] |
| fn from_vulkan(val: ash::vk::SampleCountFlags) -> Option<Self> { |
| val.try_into().ok() |
| } |
| } |
| |
| impl FromVulkan<ash::vk::ShaderCorePropertiesFlagsAMD> for ShaderCoreProperties { |
| #[inline] |
| fn from_vulkan(val: ash::vk::ShaderCorePropertiesFlagsAMD) -> Option<Self> { |
| Some(val.into()) |
| } |
| } |
| |
| impl FromVulkan<ash::vk::ShaderFloatControlsIndependence> for ShaderFloatControlsIndependence { |
| #[inline] |
| fn from_vulkan(val: ash::vk::ShaderFloatControlsIndependence) -> Option<Self> { |
| val.try_into().ok() |
| } |
| } |
| |
| impl FromVulkan<ash::vk::ShaderStageFlags> for ShaderStages { |
| #[inline] |
| fn from_vulkan(val: ash::vk::ShaderStageFlags) -> Option<Self> { |
| Some(val.into()) |
| } |
| } |
| |
| impl FromVulkan<ash::vk::SubgroupFeatureFlags> for SubgroupFeatures { |
| #[inline] |
| fn from_vulkan(val: ash::vk::SubgroupFeatureFlags) -> Option<Self> { |
| Some(val.into()) |
| } |
| } |