1use serde::{Deserialize, Serialize};
8
9use crate::id;
10
11#[derive(Debug, Serialize, Deserialize)]
12pub enum CommandEncoderCommand {
14 CopyBufferToBuffer {
15 source: id::BufferId,
16 source_offset: u64,
17 destination: id::BufferId,
18 destination_offset: u64,
19 size: Option<u64>,
20 },
21 CopyBufferToTexture {
22 source: crate::TexelCopyBufferInfo,
23 destination: crate::TexelCopyTextureInfo,
24 copy_size: crate::Extent3d,
25 },
26 CopyTextureToBuffer {
27 source: crate::TexelCopyTextureInfo,
28 destination: crate::TexelCopyBufferInfo,
29 copy_size: crate::Extent3d,
30 },
31 CopyTextureToTexture {
32 source: crate::TexelCopyTextureInfo,
33 destination: crate::TexelCopyTextureInfo,
34 copy_size: crate::Extent3d,
35 },
36 ClearBuffer {
37 buffer: id::BufferId,
38 offset: u64, size: Option<u64>,
40 },
41 ResolveQuerySet {
42 query_set: id::QuerySetId,
43 first_query: u32,
44 query_count: u32,
45 destination: id::BufferId,
46 destination_offset: u64,
47 },
48 DebugCommand(DebugCommand),
49}
50
51#[derive(Debug, Serialize, Deserialize)]
52pub enum RenderPassEncoderCommand {
54 SetViewport {
55 x: f32,
56 y: f32,
57 width: f32,
58 height: f32,
59 min_depth: f32,
60 max_depth: f32,
61 },
62 SetScissorRect {
63 x: u32,
64 y: u32,
65 width: u32,
66 height: u32,
67 },
68 SetBlendConstant(crate::Color),
69 SetStencilReference(u32),
70 BeginOcclusionQuery(u32),
71 EndOcclusionQuery,
72 ExecuteBundles(Vec<id::RenderBundleId>),
73 BindingCommand(BindingCommand),
74 RenderCommand(RenderCommand),
75 DebugCommand(DebugCommand),
76}
77
78#[derive(Debug, Serialize, Deserialize)]
79pub enum RenderBundleEncoderCommand {
81 BindingCommand(BindingCommand),
82 RenderCommand(RenderCommand),
83 DebugCommand(DebugCommand),
84}
85
86#[derive(Debug, Serialize, Deserialize)]
87pub enum ComputePassEncoderCommand {
89 BindingCommand(BindingCommand),
90 SetPipeline(id::ComputePipelineId),
91 DispatchWorkgroups {
92 workgroup_count_x: u32,
93 workgroup_count_y: u32, workgroup_count_z: u32, },
96 DispatchWorkgroupsIndirect {
97 indirect_buffer: id::BufferId,
98 indirect_offset: u64,
99 },
100 DebugCommand(DebugCommand),
101}
102
103#[derive(Debug, Serialize, Deserialize)]
104pub enum DebugCommand {
106 PushDebugGroup(String),
107 PopDebugGroup,
108 InsertDebugMarker(String),
109}
110
111#[derive(Debug, Serialize, Deserialize)]
112pub enum BindingCommand {
114 SetBindGroup {
115 index: u32,
116 bind_group: Option<id::BindGroupId>,
117 dynamic_offsets: Vec<u32>, },
119 SetImmediates {
120 range_offset: u32,
121 data: Vec<u8>,
122 },
123}
124
125#[derive(Debug, Serialize, Deserialize)]
126pub enum RenderCommand {
128 SetPipeline(id::RenderPipelineId),
129 SetIndexBuffer {
130 buffer: id::BufferId,
131 index_format: crate::IndexFormat,
132 offset: u64, size: Option<crate::BufferSize>,
134 },
135 SetVertexBuffer {
136 slot: u32,
137 buffer: Option<id::BufferId>,
138 offset: u64, size: Option<crate::BufferSize>,
140 },
141 Draw {
142 vertex_count: u32,
143 instance_count: u32, first_vertex: u32, first_instance: u32, },
147 DrawIndexed {
148 index_count: u32,
149 instance_count: u32, first_index: u32, base_vertex: i32, first_instance: u32, },
154 DrawIndirect {
155 indirect_buffer: id::BufferId,
156 indirect_offset: u64,
157 },
158 DrawIndexedIndirect {
159 indirect_buffer: id::BufferId,
160 indirect_offset: u64,
161 },
162}