use core::convert::Infallible; use alloc::{string::String, sync::Arc, vec::Vec}; use crate::{ id, resource::{Buffer, QuerySet, Texture}, }; #[derive(Clone, Debug)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] pub enum Command { CopyBufferToBuffer { src: id::BufferId, src_offset: wgt::BufferAddress, dst: id::BufferId, dst_offset: wgt::BufferAddress, size: Option, }, CopyBufferToTexture { src: wgt::TexelCopyBufferInfo, dst: wgt::TexelCopyTextureInfo, size: wgt::Extent3d, }, CopyTextureToBuffer { src: wgt::TexelCopyTextureInfo, dst: wgt::TexelCopyBufferInfo, size: wgt::Extent3d, }, CopyTextureToTexture { src: wgt::TexelCopyTextureInfo, dst: wgt::TexelCopyTextureInfo, size: wgt::Extent3d, }, ClearBuffer { dst: id::BufferId, offset: wgt::BufferAddress, size: Option, }, ClearTexture { dst: id::TextureId, subresource_range: wgt::ImageSubresourceRange, }, WriteTimestamp { query_set_id: id::QuerySetId, query_index: u32, }, ResolveQuerySet { query_set_id: id::QuerySetId, start_query: u32, query_count: u32, destination: id::BufferId, destination_offset: wgt::BufferAddress, }, PushDebugGroup(String), PopDebugGroup, InsertDebugMarker(String), RunComputePass { base: crate::command::BasePass, timestamp_writes: Option, }, RunRenderPass { base: crate::command::BasePass, target_colors: Vec>, target_depth_stencil: Option, timestamp_writes: Option, occlusion_query_set_id: Option, }, BuildAccelerationStructures { blas: Vec, tlas: Vec, }, } #[derive(Clone, Debug)] pub enum ArcCommand { CopyBufferToBuffer { src: Arc, src_offset: wgt::BufferAddress, dst: Arc, dst_offset: wgt::BufferAddress, size: Option, }, CopyBufferToTexture { src: wgt::TexelCopyBufferInfo>, dst: wgt::TexelCopyTextureInfo>, size: wgt::Extent3d, }, CopyTextureToBuffer { src: wgt::TexelCopyTextureInfo>, dst: wgt::TexelCopyBufferInfo>, size: wgt::Extent3d, }, CopyTextureToTexture { src: wgt::TexelCopyTextureInfo>, dst: wgt::TexelCopyTextureInfo>, size: wgt::Extent3d, }, ClearBuffer { dst: Arc, offset: wgt::BufferAddress, size: Option, }, ClearTexture { dst: Arc, subresource_range: wgt::ImageSubresourceRange, }, WriteTimestamp { query_set: Arc, query_index: u32, }, ResolveQuerySet { query_set: Arc, start_query: u32, query_count: u32, destination: Arc, destination_offset: wgt::BufferAddress, }, PushDebugGroup(String), PopDebugGroup, InsertDebugMarker(String), RunComputePass { pass: super::BasePass, timestamp_writes: Option, }, RunRenderPass { pass: super::BasePass, color_attachments: super::ArcRenderPassColorAttachmentArray, depth_stencil_attachment: Option, timestamp_writes: Option, occlusion_query_set: Option>, }, BuildAccelerationStructures { blas: Vec, tlas: Vec, }, TransitionResources { buffer_transitions: Vec>>, texture_transitions: Vec>>, }, }