Struct wgpu::RenderPass [−][src]
pub struct RenderPass<'a> { /* fields omitted */ }
Expand description
In-progress recording of a render pass.
Implementations
pub fn set_bind_group(
&mut self,
index: u32,
bind_group: &'a BindGroup,
offsets: &[DynamicOffset]
)
pub fn set_bind_group(
&mut self,
index: u32,
bind_group: &'a BindGroup,
offsets: &[DynamicOffset]
)
Sets the active bind group for a given bind group index. The bind group layout
in the active pipeline when any draw()
function is called must match the layout of this bind group.
If the bind group have dynamic offsets, provide them in order of their declaration.
These offsets have to be aligned to BIND_BUFFER_ALIGNMENT
.
Sets the active render pipeline.
Subsequent draw calls will exhibit the behavior defined by pipeline
.
Sets the blend color as used by some of the blending modes.
Subsequent blending tests will test against this value.
Sets the active index buffer.
Subsequent calls to draw_indexed
on this RenderPass
will
use buffer
as the source index buffer.
Assign a vertex buffer to a slot.
Subsequent calls to draw
and draw_indexed
on this
RenderPass
will use buffer
as one of the source vertex buffers.
The slot
refers to the index of the matching descriptor in
VertexState::buffers
.
Sets the scissor region.
Subsequent draw calls will discard any fragments that fall outside this region.
Sets the viewport region.
Subsequent draw calls will draw any fragments in this region.
Sets the stencil reference.
Subsequent stencil tests will test against this value.
Draws primitives from the active vertex buffer(s).
The active vertex buffers can be set with RenderPass::set_vertex_buffer
.
Inserts debug marker.
Start record commands and group it into debug marker group.
Stops command recording and creates debug group.
Draws indexed primitives using the active index buffer and the active vertex buffers.
The active index buffer can be set with RenderPass::set_index_buffer
, while the active
vertex buffers can be set with RenderPass::set_vertex_buffer
.
Draws primitives from the active vertex buffer(s) based on the contents of the indirect_buffer
.
The active vertex buffers can be set with RenderPass::set_vertex_buffer
.
The structure expected in indirect_buffer
is the following:
#[repr(C)]
struct DrawIndirect {
vertex_count: u32, // The number of vertices to draw.
instance_count: u32, // The number of instances to draw.
base_vertex: u32, // The Index of the first vertex to draw.
base_instance: u32, // The instance ID of the first instance to draw.
}
pub fn draw_indexed_indirect(
&mut self,
indirect_buffer: &'a Buffer,
indirect_offset: BufferAddress
)
pub fn draw_indexed_indirect(
&mut self,
indirect_buffer: &'a Buffer,
indirect_offset: BufferAddress
)
Draws indexed primitives using the active index buffer and the active vertex buffers,
based on the contents of the indirect_buffer
.
The active index buffer can be set with RenderPass::set_index_buffer
, while the active
vertex buffers can be set with RenderPass::set_vertex_buffer
.
The structure expected in indirect_buffer
is the following:
#[repr(C)]
struct DrawIndexedIndirect {
vertex_count: u32, // The number of vertices to draw.
instance_count: u32, // The number of instances to draw.
base_index: u32, // The base index within the index buffer.
vertex_offset: i32, // The value added to the vertex index before indexing into the vertex buffer.
base_instance: u32, // The instance ID of the first instance to draw.
}
Execute a render bundle, which is a set of pre-recorded commands that can be run together.
Features::MULTI_DRAW_INDIRECT
must be enabled on the device in order to call these functions.
pub fn multi_draw_indirect(
&mut self,
indirect_buffer: &'a Buffer,
indirect_offset: BufferAddress,
count: u32
)
pub fn multi_draw_indirect(
&mut self,
indirect_buffer: &'a Buffer,
indirect_offset: BufferAddress,
count: u32
)
Dispatches multiple draw calls from the active vertex buffer(s) based on the contents of the indirect_buffer
.
count
draw calls are issued.
The active vertex buffers can be set with RenderPass::set_vertex_buffer
.
The structure expected in indirect_buffer
is the following:
#[repr(C)]
struct DrawIndirect {
vertex_count: u32, // The number of vertices to draw.
instance_count: u32, // The number of instances to draw.
base_vertex: u32, // The Index of the first vertex to draw.
base_instance: u32, // The instance ID of the first instance to draw.
}
These draw structures are expected to be tightly packed.
pub fn multi_draw_indexed_indirect(
&mut self,
indirect_buffer: &'a Buffer,
indirect_offset: BufferAddress,
count: u32
)
pub fn multi_draw_indexed_indirect(
&mut self,
indirect_buffer: &'a Buffer,
indirect_offset: BufferAddress,
count: u32
)
Dispatches multiple draw calls from the active index buffer and the active vertex buffers,
based on the contents of the indirect_buffer
. count
draw calls are issued.
The active index buffer can be set with RenderPass::set_index_buffer
, while the active
vertex buffers can be set with RenderPass::set_vertex_buffer
.
The structure expected in indirect_buffer
is the following:
#[repr(C)]
struct DrawIndexedIndirect {
vertex_count: u32, // The number of vertices to draw.
instance_count: u32, // The number of instances to draw.
base_index: u32, // The base index within the index buffer.
vertex_offset: i32, // The value added to the vertex index before indexing into the vertex buffer.
base_instance: u32, // The instance ID of the first instance to draw.
}
These draw structures are expected to be tightly packed.
Features::MULTI_DRAW_INDIRECT_COUNT
must be enabled on the device in order to call these functions.
pub fn multi_draw_indirect_count(
&mut self,
indirect_buffer: &'a Buffer,
indirect_offset: BufferAddress,
count_buffer: &'a Buffer,
count_offset: BufferAddress,
max_count: u32
)
pub fn multi_draw_indirect_count(
&mut self,
indirect_buffer: &'a Buffer,
indirect_offset: BufferAddress,
count_buffer: &'a Buffer,
count_offset: BufferAddress,
max_count: u32
)
Disptaches multiple draw calls from the active vertex buffer(s) based on the contents of the indirect_buffer
.
The count buffer is read to determine how many draws to issue.
The indirect buffer must be long enough to account for max_count
draws, however only count
will
draws will be read. If count
is greater than max_count
, max_count
will be used.
The active vertex buffers can be set with RenderPass::set_vertex_buffer
.
The structure expected in indirect_buffer
is the following:
#[repr(C)]
struct DrawIndirect {
vertex_count: u32, // The number of vertices to draw.
instance_count: u32, // The number of instances to draw.
base_vertex: u32, // The Index of the first vertex to draw.
base_instance: u32, // The instance ID of the first instance to draw.
}
These draw structures are expected to be tightly packed.
The structure expected in count_buffer
is the following:
#[repr(C)]
struct DrawIndirectCount {
count: u32, // Number of draw calls to issue.
}
pub fn multi_draw_indexed_indirect_count(
&mut self,
indirect_buffer: &'a Buffer,
indirect_offset: BufferAddress,
count_buffer: &'a Buffer,
count_offset: BufferAddress,
max_count: u32
)
pub fn multi_draw_indexed_indirect_count(
&mut self,
indirect_buffer: &'a Buffer,
indirect_offset: BufferAddress,
count_buffer: &'a Buffer,
count_offset: BufferAddress,
max_count: u32
)
Dispatches multiple draw calls from the active index buffer and the active vertex buffers,
based on the contents of the indirect_buffer
. The count buffer is read to determine how many draws to issue.
The indirect buffer must be long enough to account for max_count
draws, however only count
will
draws will be read. If count
is greater than max_count
, max_count
will be used.
The active index buffer can be set with RenderPass::set_index_buffer
, while the active
vertex buffers can be set with RenderPass::set_vertex_buffer
.
The structure expected in indirect_buffer
is the following:
#[repr(C)]
struct DrawIndexedIndirect {
vertex_count: u32, // The number of vertices to draw.
instance_count: u32, // The number of instances to draw.
base_index: u32, // The base index within the index buffer.
vertex_offset: i32, // The value added to the vertex index before indexing into the vertex buffer.
base_instance: u32, // The instance ID of the first instance to draw.
}
These draw structures are expected to be tightly packed.
The structure expected in count_buffer
is the following:
#[repr(C)]
struct DrawIndexedIndirectCount {
count: u32, // Number of draw calls to issue.
}
Features::PUSH_CONSTANTS
must be enabled on the device in order to call these functions.
Set push constant data.
Offset is measured in bytes, but must be a multiple of PUSH_CONSTANT_ALIGNMENT
.
Data size must be a multiple of 4 and must be aligned to the 4s, so we take an array of u32.
For example, with an offset of 4 and an array of [u32; 3]
, that will write to the range
of 4..16.
For each byte in the range of push constant data written, the union of the stages of all push constant
ranges that covers that byte must be exactly stages
. There’s no good way of explaining this simply,
so here are some examples:
For the given ranges:
- 0..4 Vertex
- 4..8 Fragment
You would need to upload this in two set_push_constants calls. First for the Vertex
range, second for the Fragment
range.
For the given ranges:
- 0..8 Vertex
- 4..12 Fragment
You would need to upload this in three set_push_constants calls. First for the Vertex
only range 0..4, second
for the Vertex | Fragment
range 4..8, third for the Fragment
range 8..12.
Features::TIMESTAMP_QUERY
must be enabled on the device in order to call these functions.
Issue a timestamp command at this point in the queue. The timestamp will be written to the specified query set, at the specified index.
Must be multiplied by Queue::get_timestamp_period
to get
the value in nanoseconds. Absolute values have no meaning,
but timestamps can be subtracted to get the time it takes
for a string of operations to complete.
Features::PIPELINE_STATISTICS_QUERY
must be enabled on the device in order to call these functions.
Start a pipeline statistics query on this render pass. It can be ended with
end_pipeline_statistics_query
. Pipeline statistics queries may not be nested.
End the pipeline statistics query on this render pass. It can be started with
begin_pipeline_statistics_query
. Pipeline statistics queries may not be nested.
Trait Implementations
fn set_bind_group(
&mut self,
index: u32,
bind_group: &'a BindGroup,
offsets: &[DynamicOffset]
)
fn set_bind_group(
&mut self,
index: u32,
bind_group: &'a BindGroup,
offsets: &[DynamicOffset]
)
Sets the active bind group for a given bind group index. The bind group layout
in the active pipeline when any draw()
function is called must match the layout of this bind group. Read more
Sets the active render pipeline. Read more
Sets the active index buffer. Read more
Assign a vertex buffer to a slot. Read more
Draws primitives from the active vertex buffer(s). Read more
Draws indexed primitives using the active index buffer and the active vertex buffers. Read more
Draws primitives from the active vertex buffer(s) based on the contents of the indirect_buffer
. Read more
fn draw_indexed_indirect(
&mut self,
indirect_buffer: &'a Buffer,
indirect_offset: BufferAddress
)
fn draw_indexed_indirect(
&mut self,
indirect_buffer: &'a Buffer,
indirect_offset: BufferAddress
)
Draws indexed primitives using the active index buffer and the active vertex buffers,
based on the contents of the indirect_buffer
. Read more
wgt::Features::PUSH_CONSTANTS
must be enabled on the device in order to call this function. Read more