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}