Skip to main content

webgpu_traits/
encoders.rs

1/* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
5//! Encoders commands
6
7use serde::{Deserialize, Serialize};
8
9use crate::id;
10
11#[derive(Debug, Serialize, Deserialize)]
12/// Corresponds to [`GPUCommandEncoder`](https://www.w3.org/TR/webgpu/#gpucommandencoder).
13pub 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, // optional, defaults to 0
39        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)]
52/// Corresponds to [`GPURenderPassEncoder`](https://www.w3.org/TR/webgpu/#gpurenderpassencoder).
53pub 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)]
79/// Corresponds to [`GPURenderBundleEncoder`](https://www.w3.org/TR/webgpu/#gpurenderbundleencoder).
80pub enum RenderBundleEncoderCommand {
81    BindingCommand(BindingCommand),
82    RenderCommand(RenderCommand),
83    DebugCommand(DebugCommand),
84}
85
86#[derive(Debug, Serialize, Deserialize)]
87/// Corresponds to [`GPUComputePassEncoder`](https://www.w3.org/TR/webgpu/#gpucomputepassencoder).
88pub enum ComputePassEncoderCommand {
89    BindingCommand(BindingCommand),
90    SetPipeline(id::ComputePipelineId),
91    DispatchWorkgroups {
92        workgroup_count_x: u32,
93        workgroup_count_y: u32, // optional, defaults to 1
94        workgroup_count_z: u32, // optional, defaults to 1
95    },
96    DispatchWorkgroupsIndirect {
97        indirect_buffer: id::BufferId,
98        indirect_offset: u64,
99    },
100    DebugCommand(DebugCommand),
101}
102
103#[derive(Debug, Serialize, Deserialize)]
104/// Corresponds to [`GPUDebugCommandsMixin`](https://www.w3.org/TR/webgpu/#gpudebugcommandsmixin).
105pub enum DebugCommand {
106    PushDebugGroup(String),
107    PopDebugGroup,
108    InsertDebugMarker(String),
109}
110
111#[derive(Debug, Serialize, Deserialize)]
112/// Corresponds to [`GPUBindingCommandsMixin`](https://www.w3.org/TR/webgpu/#gpubindingcommandsmixin).
113pub enum BindingCommand {
114    SetBindGroup {
115        index: u32,
116        bind_group: Option<id::BindGroupId>,
117        dynamic_offsets: Vec<u32>, // optional, defaults to []
118    },
119    SetImmediates {
120        range_offset: u32,
121        data: Vec<u8>,
122    },
123}
124
125#[derive(Debug, Serialize, Deserialize)]
126/// Corresponds to [`GPURenderCommandsMixin`](https://www.w3.org/TR/webgpu/#gpurendercommandsmixin).
127pub enum RenderCommand {
128    SetPipeline(id::RenderPipelineId),
129    SetIndexBuffer {
130        buffer: id::BufferId,
131        index_format: crate::IndexFormat,
132        offset: u64, // optional, defaults to 0
133        size: Option<crate::BufferSize>,
134    },
135    SetVertexBuffer {
136        slot: u32,
137        buffer: Option<id::BufferId>,
138        offset: u64, // optional, defaults to 0
139        size: Option<crate::BufferSize>,
140    },
141    Draw {
142        vertex_count: u32,
143        instance_count: u32, // optional, defaults to 1
144        first_vertex: u32,   // optional, defaults to 0
145        first_instance: u32, // optional, defaults to 0
146    },
147    DrawIndexed {
148        index_count: u32,
149        instance_count: u32, // optional, defaults to 1
150        first_index: u32,    // optional, defaults to 0
151        base_vertex: i32,    // optional, defaults to 0
152        first_instance: u32, // optional, defaults to 0
153    },
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}