use crate::{buffer, image, queue, Backend};
use std::ops::Range;
bitflags!(
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct Properties: u16 {
const DEVICE_LOCAL = 0x1;
const CPU_VISIBLE = 0x2;
const COHERENT = 0x4;
const CPU_CACHED = 0x8;
const LAZILY_ALLOCATED = 0x10;
}
);
bitflags!(
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct HeapFlags: u16 {
const DEVICE_LOCAL = 0x1;
}
);
bitflags!(
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct Dependencies: u32 {
const BY_REGION = 0x1;
const VIEW_LOCAL = 0x2;
const DEVICE_GROUP = 0x4;
}
);
#[allow(missing_docs)]
#[derive(Clone, Debug)]
pub enum Barrier<'a, B: Backend> {
AllBuffers(Range<buffer::Access>),
AllImages(Range<image::Access>),
Buffer {
states: Range<buffer::State>,
target: &'a B::Buffer,
range: buffer::SubRange,
families: Option<Range<queue::QueueFamilyId>>,
},
Image {
states: Range<image::State>,
target: &'a B::Image,
range: image::SubresourceRange,
families: Option<Range<queue::QueueFamilyId>>,
},
}
impl<'a, B: Backend> Barrier<'a, B> {
pub fn whole_buffer(target: &'a B::Buffer, states: Range<buffer::State>) -> Self {
Barrier::Buffer {
states,
target,
families: None,
range: buffer::SubRange::WHOLE,
}
}
}
#[derive(Clone, Copy, Debug)]
pub struct Requirements {
pub size: u64,
pub alignment: u64,
pub type_mask: u32,
}
#[derive(Clone, Debug, Default, Hash, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct Segment {
pub offset: u64,
pub size: Option<u64>,
}
impl Segment {
pub const ALL: Self = Segment {
offset: 0,
size: None,
};
}
#[derive(Debug)]
pub struct SparseBind<M> {
pub resource_offset: u64,
pub size: u64,
pub memory: Option<(M, u64)>,
}
#[derive(Debug)]
pub struct SparseImageBind<M> {
pub subresource: image::Subresource,
pub offset: image::Offset,
pub extent: image::Extent,
pub memory: Option<(M, u64)>,
}
bitflags!(
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct SparseFlags: u32 {
const SPARSE_BINDING = 0x0000_0001;
const SPARSE_RESIDENCY = 0x0000_0002;
const SPARSE_ALIASED = 0x0000_0004;
}
);