pub use crate::backend::PhysicalDevice;
use crate::{assert_error, queue::FamilyInfo, OutOfMemory};
#[derive(Clone, Copy, Debug, thiserror::Error, PartialEq, Eq)]
pub enum EnumerateDeviceError {
#[error(transparent)]
OutOfMemory {
#[from]
source: OutOfMemory,
},
}
#[derive(Debug)]
#[cfg_attr(feature = "serde-1", derive(serde::Serialize, serde::Deserialize))]
pub struct DeviceInfo {
pub name: String,
pub kind: Option<DeviceKind>,
pub features: Vec<Feature>,
pub families: Vec<FamilyInfo>,
}
#[derive(Debug, Clone, Copy, PartialOrd, Ord, PartialEq, Eq)]
#[cfg_attr(feature = "serde-1", derive(serde::Serialize, serde::Deserialize))]
pub enum DeviceKind {
Software,
Integrated,
Discrete,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[cfg_attr(feature = "serde-1", derive(serde::Serialize, serde::Deserialize))]
pub enum Feature {
BufferDeviceAddress,
ShaderSampledImageDynamicIndexing,
ShaderStorageImageDynamicIndexing,
ShaderUniformBufferDynamicIndexing,
ShaderStorageBufferDynamicIndexing,
ShaderSampledImageNonUniformIndexing,
ShaderStorageImageNonUniformIndexing,
ShaderUniformBufferNonUniformIndexing,
ShaderStorageBufferNonUniformIndexing,
DescriptorBindingSampledImageUpdateAfterBind,
DescriptorBindingStorageImageUpdateAfterBind,
DescriptorBindingStorageBufferUpdateAfterBind,
DescriptorBindingStorageTexelBufferUpdateAfterBind,
DescriptorBindingUniformBufferUpdateAfterBind,
DescriptorBindingUniformTexelBufferUpdateAfterBind,
DescriptorBindingUpdateUnusedWhilePending,
DescriptorBindingPartiallyBound,
AccelerationStructure,
RayTracingPipeline,
RuntimeDescriptorArray,
ScalarBlockLayout,
SurfacePresentation,
}
#[allow(dead_code)]
fn check() {
assert_error::<EnumerateDeviceError>();
}