diff options
Diffstat (limited to 'third_party/rust/gfx-hal/src/command/clear.rs')
-rw-r--r-- | third_party/rust/gfx-hal/src/command/clear.rs | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/third_party/rust/gfx-hal/src/command/clear.rs b/third_party/rust/gfx-hal/src/command/clear.rs new file mode 100644 index 0000000000..b620e472de --- /dev/null +++ b/third_party/rust/gfx-hal/src/command/clear.rs @@ -0,0 +1,73 @@ +use crate::pso; +use std::fmt; + +/// A clear color union, which can be either `f32`, `i32`, or `u32`. +#[repr(C)] +#[derive(Clone, Copy)] +pub union ClearColor { + /// `f32` variant + pub float32: [f32; 4], + /// `i32` variant + pub sint32: [i32; 4], + /// `u32` variant + pub uint32: [u32; 4], +} + +impl fmt::Debug for ClearColor { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + writeln![f, "ClearColor"] + } +} + +/// A combination of depth and stencil clear values. +#[repr(C)] +#[derive(Clone, Copy, Debug)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] +pub struct ClearDepthStencil { + /// Depth value + pub depth: f32, + /// Stencil value + pub stencil: u32, +} + +/// A set of clear values for a single attachment. +/// +/// These are passed to a command buffer by +/// [beginning a render pass][crate::command::CommandBuffer::begin_render_pass]. +#[repr(C)] +#[derive(Clone, Copy)] +pub union ClearValue { + /// Clear color + pub color: ClearColor, + /// Clear depth and stencil + pub depth_stencil: ClearDepthStencil, + _align: [u32; 4], +} + +impl fmt::Debug for ClearValue { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.debug_struct("ClearValue") + .field("color", unsafe { &self.color.uint32 }) + .field("depth_stencil", unsafe { &self.depth_stencil }) + .finish() + } +} + +/// Attachment clear description for the current subpass. +#[derive(Clone, Copy, Debug)] +pub enum AttachmentClear { + /// Clear color attachment. + Color { + /// Index inside the `SubpassDesc::colors` array. + index: usize, + /// Value to clear with. + value: ClearColor, + }, + /// Clear depth-stencil attachment. + DepthStencil { + /// Depth value to clear with. + depth: Option<pso::DepthValue>, + /// Stencil value to clear with. + stencil: Option<pso::StencilValue>, + }, +} |