simple_wgpu/
compute_pass.rs

1use crate::{
2    command_encoder::{CommandEncoder, Pass},
3    dispatch::Dispatch,
4};
5
6/// Record a compute pass
7///
8/// Create via [`CommandEncoder::compute_pass`].
9///
10/// The equivalent to [wgpu::ComputePass].
11pub struct ComputePass<'a> {
12    label: Option<String>,
13    dispatches: Vec<Dispatch>,
14    frame: &'a mut CommandEncoder,
15}
16
17impl<'a> ComputePass<'a> {
18    pub(crate) fn new(label: Option<&str>, frame: &'a mut CommandEncoder) -> Self {
19        Self {
20            label: label.map(|s| s.to_string()),
21            dispatches: vec![],
22            frame,
23        }
24    }
25
26    /// Dispatch a compute operation
27    pub fn dispatch(&mut self, dispatch: Dispatch) {
28        self.dispatches.push(dispatch)
29    }
30}
31
32impl<'a> Drop for ComputePass<'a> {
33    fn drop(&mut self) {
34        self.frame.passes.push(Pass::Compute(
35            self.label.clone(),
36            self.dispatches.drain(..).collect(),
37        ));
38    }
39}