tessera_ui_basic_components/pipelines/mean/
command.rs

1use tessera_ui::{
2    BarrierRequirement,
3    compute::{ComputeResourceRef, resource::ComputeResourceManager},
4    renderer::compute::command::ComputeCommand,
5    wgpu,
6};
7
8/// Command to calculate the mean luminance of the input texture.
9///
10/// # Example
11/// ```rust,ignore
12/// use tessera_ui_basic_components::pipelines::mean::MeanCommand;
13/// let command = MeanCommand::new(gpu, resource_manager);
14/// ```
15#[derive(Debug, Clone, Copy, PartialEq)]
16pub struct MeanCommand {
17    result_buffer_ref: ComputeResourceRef,
18}
19
20impl MeanCommand {
21    /// Creates a new `MeanCommand` and allocates a result buffer.
22    ///
23    /// # Parameters
24    /// - `gpu`: The wgpu device.
25    /// - `compute_resource_manager`: Resource manager for compute buffers.
26    pub fn new(gpu: &wgpu::Device, compute_resource_manager: &mut ComputeResourceManager) -> Self {
27        let result_buffer = gpu.create_buffer(&wgpu::BufferDescriptor {
28            label: Some("Mean Result Buffer"),
29            size: 8,
30            usage: wgpu::BufferUsages::STORAGE
31                | wgpu::BufferUsages::COPY_SRC
32                | wgpu::BufferUsages::COPY_DST,
33            mapped_at_creation: false,
34        });
35
36        let result_buffer_ref = compute_resource_manager.push(result_buffer);
37        Self { result_buffer_ref }
38    }
39
40    /// Returns the reference to the result buffer.
41    pub fn result_buffer_ref(&self) -> ComputeResourceRef {
42        self.result_buffer_ref
43    }
44}
45
46impl ComputeCommand for MeanCommand {
47    fn barrier(&self) -> BarrierRequirement {
48        BarrierRequirement::ZERO_PADDING_LOCAL
49    }
50}