Skip to main content

rotex_types/
device.rs

1use raw_window_handle::{RawDisplayHandle, RawWindowHandle};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
4pub enum QueueCategory {
5    Graphics,
6    Compute,
7    Transfer,
8}
9
10#[derive(Debug, Clone, Copy, PartialEq, Eq)]
11pub struct QueueRequest {
12    pub category: QueueCategory,
13    pub count: u32,
14}
15
16#[derive(Debug, Clone, Copy, PartialEq, Eq)]
17pub struct Extent2D {
18    pub width: u32,
19    pub height: u32,
20}
21
22impl Extent2D {
23    pub fn clamped(self) -> Self {
24        Self {
25            width: self.width.max(1),
26            height: self.height.max(1),
27        }
28    }
29}
30
31#[derive(Debug, Clone, Copy)]
32pub struct SurfaceDescriptor {
33    pub display_handle: RawDisplayHandle,
34    pub window_handle: RawWindowHandle,
35    pub extent: Extent2D,
36}
37
38#[derive(Debug, Clone)]
39pub struct InstanceDescriptor {
40    pub enable_validation: bool,
41    pub required_instance_extensions: Vec<String>,
42}
43
44impl Default for InstanceDescriptor {
45    fn default() -> Self {
46        Self {
47            enable_validation: cfg!(debug_assertions),
48            required_instance_extensions: Vec::new(),
49        }
50    }
51}
52
53#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
54pub struct DeviceFeatures {
55    pub sampler_anisotropy: bool,
56    pub fill_mode_non_solid: bool,
57    pub wide_lines: bool,
58}
59
60#[derive(Debug, Clone)]
61pub struct DeviceDescriptor {
62    pub enable_swapchain: bool,
63    pub queues: Vec<QueueRequest>,
64    pub required_features: DeviceFeatures,
65}
66
67impl Default for DeviceDescriptor {
68    fn default() -> Self {
69        Self {
70            enable_swapchain: true,
71            queues: vec![
72                QueueRequest {
73                    category: QueueCategory::Graphics,
74                    count: 1,
75                },
76                QueueRequest {
77                    category: QueueCategory::Transfer,
78                    count: 1,
79                },
80            ],
81            required_features: DeviceFeatures::default(),
82        }
83    }
84}