use crate::WgpuResource;
use crate::schedule::Addresses;
use cubecl_core::server::BufferBinding;
use cubecl_server::memory_management::{ManagedMemoryHandle, PageGuard, SharedMemoryBindings};
use std::sync::Arc;
use wgpu::ComputePipeline;
#[derive(Debug)]
pub struct WgpuGraph {
pub(crate) tasks: Vec<ReplayTask>,
pub(crate) _guards: Vec<PageGuard>,
pub(crate) _uniforms: Vec<ManagedMemoryHandle>,
pub(crate) _shared: SharedMemoryBindings,
pub(crate) written: Vec<BufferBinding>,
}
#[derive(Debug)]
pub(crate) struct ReplayTask {
pub(crate) pipeline: Arc<ComputePipeline>,
pub(crate) bind_group: Option<wgpu::BindGroup>,
pub(crate) immediates: Option<Addresses>,
pub(crate) transitions: Vec<WgpuResource>,
pub(crate) dispatch: ReplayDispatch,
}
#[derive(Debug)]
pub(crate) enum ReplayDispatch {
Static(u32, u32, u32),
Dynamic(WgpuResource),
}
#[derive(Debug, Default)]
pub(crate) struct GraphRecording {
pub(crate) tasks: Vec<ReplayTask>,
pub(crate) shared: SharedMemoryBindings,
pub(crate) uniform_pins: Vec<ManagedMemoryHandle>,
}