use crate::graph::context::PassContext;
use molgfx_gpu::{Device, TextureFormat, TextureUsage};
use smallvec::SmallVec;
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)]
pub(crate) struct ResourceId(pub u32);
impl ResourceId {
pub(crate) const SWAPCHAIN: Self = Self(u32::MAX);
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)]
pub(crate) enum SizeClass {
Full,
Tiles16,
Shadow,
Quarter,
}
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
pub(crate) struct ResourceDesc {
pub label: &'static str,
pub format: TextureFormat,
pub size: SizeClass,
pub usage: TextureUsage,
pub persistent: bool,
}
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
pub(crate) enum PassKind {
Graphics,
Compute,
}
pub(crate) struct PassNode<D: Device> {
pub name: &'static str,
pub reads: SmallVec<[ResourceId; 4]>,
pub writes: SmallVec<[ResourceId; 4]>,
pub kind: PassKind,
pub record: fn(&mut PassContext<'_, D>),
}
impl<D: Device> std::fmt::Debug for PassNode<D> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("PassNode")
.field("name", &self.name)
.field("reads", &self.reads)
.field("writes", &self.writes)
.field("kind", &self.kind)
.finish_non_exhaustive()
}
}