use crate::runtime::{Storage, shader::KernelId};
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub(crate) enum BufferAccess {
Read,
Write,
ReadWrite,
}
#[derive(Clone, Copy)]
pub(crate) struct BufferBinding<'a> {
pub(crate) storage: &'a Storage,
pub(crate) access: BufferAccess,
}
impl<'a> BufferBinding<'a> {
pub(crate) const fn read(storage: &'a Storage) -> Self {
Self {
storage,
access: BufferAccess::Read,
}
}
pub(crate) const fn write(storage: &'a Storage) -> Self {
Self {
storage,
access: BufferAccess::Write,
}
}
pub(crate) const fn read_write(storage: &'a Storage) -> Self {
Self {
storage,
access: BufferAccess::ReadWrite,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq)]
pub(crate) enum PushConstant {
U32(u32),
F32(f32),
}
pub(crate) struct ComputeDispatch<'a> {
pub(crate) kernel: KernelId,
pub(crate) buffers: &'a [BufferBinding<'a>],
pub(crate) push_constants: &'a [PushConstant],
pub(crate) workgroups: [u32; 3],
}