1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
//! Error types
use thiserror::Error;
/// An error caused by a lock being poisoned.
/// This indicates an issue somewhere else, in another thread.
#[derive(Error, Debug)]
pub enum LockPoisoned {
#[error("Device lock poisoned")]
Device,
#[error("Map lock poisoned")]
Map,
#[error("Queue lock poisoned")]
Queue,
#[error("Other lock poisoned")]
Other,
#[error("Memory pool lock poisoned")]
MemoryPool,
}
/// Indicates the given property has no acceptable values
#[derive(Debug, Error)]
pub enum EnvironmentError {
#[error("No supported color format")]
ColorFormat,
#[error("No supported depth format")]
DepthFormat,
#[error("No supported present mode")]
PresentMode,
#[error("No supported composite alpha mode")]
CompositeAlphaMode,
#[error("No suitable queue families found")]
NoSuitableFamilies,
#[error("No suitable memory types found")]
NoMemoryTypes,
#[error("Couldn't use shaderc")]
NoShaderC,
#[error("No suitable queues")]
NoQueues,
#[error("Memory pool missing")]
MemoryPoolMissing,
}
/// Indicates invalid usage of an API.
#[derive(Debug, Error)]
pub enum UsageError {
#[error("Attempt to create mappable memory block from non-mappable memory")]
NonMappableMemory,
#[error("Called get_queue without properly requesting the queue beforehand.")]
QueueNegotiatorMisuse,
}
/// Displays an error with full backtrace
pub fn full_error_display(err: anyhow::Error) -> String {
let cont = err
.chain()
.skip(1)
.map(|cause| format!(" caused by: {}", cause))
.collect::<Vec<String>>()
.join("\n");
format!("Error: {}\n{}", err, cont)
}
|