use crate::*;
#[derive(Debug)]
pub struct ComputePass<'encoder> {
pub(crate) inner: dispatch::DispatchComputePass,
pub(crate) _encoder_guard: crate::api::PhantomDrop<&'encoder ()>,
}
#[cfg(send_sync)]
static_assertions::assert_impl_all!(ComputePass<'_>: Send, Sync);
crate::cmp::impl_eq_ord_hash_proxy!(ComputePass<'_> => .inner);
impl ComputePass<'_> {
pub fn forget_lifetime(self) -> ComputePass<'static> {
ComputePass {
inner: self.inner,
_encoder_guard: crate::api::PhantomDrop::default(),
}
}
pub fn set_bind_group<'a, BG>(&mut self, index: u32, bind_group: BG, offsets: &[DynamicOffset])
where
Option<&'a BindGroup>: From<BG>,
{
let bg: Option<&BindGroup> = bind_group.into();
let bg = bg.map(|bg| &bg.inner);
self.inner.set_bind_group(index, bg, offsets);
}
pub fn set_pipeline(&mut self, pipeline: &ComputePipeline) {
self.inner.set_pipeline(&pipeline.inner);
}
pub fn insert_debug_marker(&mut self, label: &str) {
self.inner.insert_debug_marker(label);
}
pub fn push_debug_group(&mut self, label: &str) {
self.inner.push_debug_group(label);
}
pub fn pop_debug_group(&mut self) {
self.inner.pop_debug_group();
}
pub fn dispatch_workgroups(&mut self, x: u32, y: u32, z: u32) {
self.inner.dispatch_workgroups(x, y, z);
}
pub fn dispatch_workgroups_indirect(
&mut self,
indirect_buffer: &Buffer,
indirect_offset: BufferAddress,
) {
self.inner
.dispatch_workgroups_indirect(&indirect_buffer.inner, indirect_offset);
}
#[cfg(custom)]
pub fn as_custom<T: custom::ComputePassInterface>(&self) -> Option<&T> {
self.inner.as_custom()
}
}
impl ComputePass<'_> {
pub fn set_push_constants(&mut self, offset: u32, data: &[u8]) {
self.inner.set_push_constants(offset, data);
}
}
impl ComputePass<'_> {
pub fn write_timestamp(&mut self, query_set: &QuerySet, query_index: u32) {
self.inner.write_timestamp(&query_set.inner, query_index);
}
}
impl ComputePass<'_> {
pub fn begin_pipeline_statistics_query(&mut self, query_set: &QuerySet, query_index: u32) {
self.inner
.begin_pipeline_statistics_query(&query_set.inner, query_index);
}
pub fn end_pipeline_statistics_query(&mut self) {
self.inner.end_pipeline_statistics_query();
}
}
#[derive(Clone, Debug)]
pub struct ComputePassTimestampWrites<'a> {
pub query_set: &'a QuerySet,
pub beginning_of_pass_write_index: Option<u32>,
pub end_of_pass_write_index: Option<u32>,
}
#[cfg(send_sync)]
static_assertions::assert_impl_all!(ComputePassTimestampWrites<'_>: Send, Sync);
#[derive(Clone, Default, Debug)]
pub struct ComputePassDescriptor<'a> {
pub label: Label<'a>,
pub timestamp_writes: Option<ComputePassTimestampWrites<'a>>,
}
#[cfg(send_sync)]
static_assertions::assert_impl_all!(ComputePassDescriptor<'_>: Send, Sync);