rotex-types 0.1.1

Types used by rotexengine tools
Documentation
use raw_window_handle::{RawDisplayHandle, RawWindowHandle};

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum QueueCategory {
    Graphics,
    Compute,
    Transfer,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct QueueRequest {
    pub category: QueueCategory,
    pub count: u32,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Extent2D {
    pub width: u32,
    pub height: u32,
}

impl Extent2D {
    pub fn clamped(self) -> Self {
        Self {
            width: self.width.max(1),
            height: self.height.max(1),
        }
    }
}

#[derive(Debug, Clone, Copy)]
pub struct SurfaceDescriptor {
    pub display_handle: RawDisplayHandle,
    pub window_handle: RawWindowHandle,
    pub extent: Extent2D,
}

#[derive(Debug, Clone)]
pub struct InstanceDescriptor {
    pub enable_validation: bool,
    pub required_instance_extensions: Vec<String>,
}

impl Default for InstanceDescriptor {
    fn default() -> Self {
        Self {
            enable_validation: cfg!(debug_assertions),
            required_instance_extensions: Vec::new(),
        }
    }
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct DeviceFeatures {
    pub sampler_anisotropy: bool,
    pub fill_mode_non_solid: bool,
    pub wide_lines: bool,
}

#[derive(Debug, Clone)]
pub struct DeviceDescriptor {
    pub enable_swapchain: bool,
    pub queues: Vec<QueueRequest>,
    pub required_features: DeviceFeatures,
}

impl Default for DeviceDescriptor {
    fn default() -> Self {
        Self {
            enable_swapchain: true,
            queues: vec![
                QueueRequest {
                    category: QueueCategory::Graphics,
                    count: 1,
                },
                QueueRequest {
                    category: QueueCategory::Transfer,
                    count: 1,
                },
            ],
            required_features: DeviceFeatures::default(),
        }
    }
}