use crate::{
    command_encoder::{CommandEncoder, Pass},
    dispatch::Dispatch,
};
pub struct ComputePass<'a> {
    label: Option<String>,
    dispatches: Vec<Dispatch>,
    frame: &'a mut CommandEncoder,
}
impl<'a> ComputePass<'a> {
    pub(crate) fn new(label: Option<&str>, frame: &'a mut CommandEncoder) -> Self {
        Self {
            label: label.map(|s| s.to_string()),
            dispatches: vec![],
            frame,
        }
    }
    pub fn dispatch(&mut self, dispatch: Dispatch) {
        self.dispatches.push(dispatch)
    }
}
impl<'a> Drop for ComputePass<'a> {
    fn drop(&mut self) {
        self.frame.passes.push(Pass::Compute(
            self.label.clone(),
            self.dispatches.drain(..).collect(),
        ));
    }
}