1use core::convert::Infallible;
2
3use alloc::{string::String, sync::Arc, vec::Vec};
4
5use crate::{
6 id,
7 resource::{Buffer, QuerySet, Texture},
8};
9
10#[derive(Clone, Debug)]
11#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
12pub enum Command {
13 CopyBufferToBuffer {
14 src: id::BufferId,
15 src_offset: wgt::BufferAddress,
16 dst: id::BufferId,
17 dst_offset: wgt::BufferAddress,
18 size: Option<wgt::BufferAddress>,
19 },
20 CopyBufferToTexture {
21 src: wgt::TexelCopyBufferInfo<id::BufferId>,
22 dst: wgt::TexelCopyTextureInfo<id::TextureId>,
23 size: wgt::Extent3d,
24 },
25 CopyTextureToBuffer {
26 src: wgt::TexelCopyTextureInfo<id::TextureId>,
27 dst: wgt::TexelCopyBufferInfo<id::BufferId>,
28 size: wgt::Extent3d,
29 },
30 CopyTextureToTexture {
31 src: wgt::TexelCopyTextureInfo<id::TextureId>,
32 dst: wgt::TexelCopyTextureInfo<id::TextureId>,
33 size: wgt::Extent3d,
34 },
35 ClearBuffer {
36 dst: id::BufferId,
37 offset: wgt::BufferAddress,
38 size: Option<wgt::BufferAddress>,
39 },
40 ClearTexture {
41 dst: id::TextureId,
42 subresource_range: wgt::ImageSubresourceRange,
43 },
44 WriteTimestamp {
45 query_set_id: id::QuerySetId,
46 query_index: u32,
47 },
48 ResolveQuerySet {
49 query_set_id: id::QuerySetId,
50 start_query: u32,
51 query_count: u32,
52 destination: id::BufferId,
53 destination_offset: wgt::BufferAddress,
54 },
55 PushDebugGroup(String),
56 PopDebugGroup,
57 InsertDebugMarker(String),
58 RunComputePass {
59 base: crate::command::BasePass<crate::command::ComputeCommand, Infallible>,
60 timestamp_writes: Option<crate::command::PassTimestampWrites>,
61 },
62 RunRenderPass {
63 base: crate::command::BasePass<crate::command::RenderCommand, Infallible>,
64 target_colors: Vec<Option<crate::command::RenderPassColorAttachment>>,
65 target_depth_stencil: Option<crate::command::RenderPassDepthStencilAttachment>,
66 timestamp_writes: Option<crate::command::PassTimestampWrites>,
67 occlusion_query_set_id: Option<id::QuerySetId>,
68 },
69 BuildAccelerationStructures {
70 blas: Vec<crate::ray_tracing::TraceBlasBuildEntry>,
71 tlas: Vec<crate::ray_tracing::TraceTlasPackage>,
72 },
73}
74
75#[derive(Clone, Debug)]
76pub enum ArcCommand {
77 CopyBufferToBuffer {
78 src: Arc<Buffer>,
79 src_offset: wgt::BufferAddress,
80 dst: Arc<Buffer>,
81 dst_offset: wgt::BufferAddress,
82 size: Option<wgt::BufferAddress>,
83 },
84 CopyBufferToTexture {
85 src: wgt::TexelCopyBufferInfo<Arc<Buffer>>,
86 dst: wgt::TexelCopyTextureInfo<Arc<Texture>>,
87 size: wgt::Extent3d,
88 },
89 CopyTextureToBuffer {
90 src: wgt::TexelCopyTextureInfo<Arc<Texture>>,
91 dst: wgt::TexelCopyBufferInfo<Arc<Buffer>>,
92 size: wgt::Extent3d,
93 },
94 CopyTextureToTexture {
95 src: wgt::TexelCopyTextureInfo<Arc<Texture>>,
96 dst: wgt::TexelCopyTextureInfo<Arc<Texture>>,
97 size: wgt::Extent3d,
98 },
99 ClearBuffer {
100 dst: Arc<Buffer>,
101 offset: wgt::BufferAddress,
102 size: Option<wgt::BufferAddress>,
103 },
104 ClearTexture {
105 dst: Arc<Texture>,
106 subresource_range: wgt::ImageSubresourceRange,
107 },
108 WriteTimestamp {
109 query_set: Arc<QuerySet>,
110 query_index: u32,
111 },
112 ResolveQuerySet {
113 query_set: Arc<QuerySet>,
114 start_query: u32,
115 query_count: u32,
116 destination: Arc<Buffer>,
117 destination_offset: wgt::BufferAddress,
118 },
119 PushDebugGroup(String),
120 PopDebugGroup,
121 InsertDebugMarker(String),
122 RunComputePass {
123 pass: super::BasePass<super::ArcComputeCommand, Infallible>,
124 timestamp_writes: Option<super::ArcPassTimestampWrites>,
125 },
126 RunRenderPass {
127 pass: super::BasePass<super::ArcRenderCommand, Infallible>,
128 color_attachments: super::ArcRenderPassColorAttachmentArray,
129 depth_stencil_attachment: Option<super::ArcRenderPassDepthStencilAttachment>,
130 timestamp_writes: Option<super::ArcPassTimestampWrites>,
131 occlusion_query_set: Option<Arc<QuerySet>>,
132 },
133 BuildAccelerationStructures {
134 blas: Vec<crate::ray_tracing::ArcBlasBuildEntry>,
135 tlas: Vec<crate::ray_tracing::ArcTlasPackage>,
136 },
137 TransitionResources {
138 buffer_transitions: Vec<wgt::BufferTransition<Arc<Buffer>>>,
139 texture_transitions: Vec<wgt::TextureTransition<Arc<Texture>>>,
140 },
141}