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
/// Stages in the rendering pipeline.
#[repr(u16)]
pub enum PipelineStage {
/// Stage at which indirect draw commands are read from buffer.
DrawIndirect,
/// Stage at which vertex data is read from buffer.
VertexInput,
/// Stage at which vertex shader is executed.
VertexShader,
/// Stage at which early fragment tests are performed.
EarlyFragmentTest,
/// Stage at which fragment shader is executed.
FragmentShader,
/// Stage at which late fragment tests are performed.
LateFragmentTest,
/// Stage at which color data is written to buffer.
ColorOutput,
/// Stage at which compute shader is executed.
ComputeShader,
/// Stage at which transfer operations are performed.
Transfer,
}
bitflags::bitflags! {
/// Pipeline stages flags.
///
/// Each flag corresponds to one [`PipelineStage`].
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct PipelineStages: u32 {
/// Bit for [`DrawIndirect`](PipelineStage::DrawIndirect) stage.
const DRAW_INDIRECT = 1 << PipelineStage::DrawIndirect as u32;
/// Bit for [`VertexInput`](PipelineStage::VertexInput) stage.
const VERTEX_INPUT = 1 << PipelineStage::VertexInput as u32;
/// Bit for [`VertexShader`](PipelineStage::VertexShader) stage.
const VERTEX_SHADER = 1 << PipelineStage::VertexShader as u32;
/// Bit for [`EarlyFragmentTest`](PipelineStage::EarlyFragmentTest) stage.
const EARLY_FRAGMENT_TEST = 1 << PipelineStage::EarlyFragmentTest as u32;
/// Bit for [`FragmentShader`](PipelineStage::FragmentShader) stage.
const FRAGMENT_SHADER = 1 << PipelineStage::FragmentShader as u32;
/// Bit for [`LateFragmentTest`](PipelineStage::LateFragmentTest) stage.
const LATE_FRAGMENT_TEST = 1 << PipelineStage::LateFragmentTest as u32;
/// Bit for [`ColorOutput`](PipelineStage::ColorOutput) stage.
const COLOR_OUTPUT = 1 << PipelineStage::ColorOutput as u32;
/// Bit for [`ComputeShader`](PipelineStage::ComputeShader) stage.
const COMPUTE_SHADER = 1 << PipelineStage::ComputeShader as u32;
/// Bit for [`Transfer`](PipelineStage::Transfer) stage.
const TRANSFER = 1 << PipelineStage::Transfer as u32;
}
}