Struct iced::widget::shader::wgpu::RenderPass

pub struct RenderPass<'a> { /* private fields */ }
Available on crate feature wgpu only.
Expand description

In-progress recording of a render pass: a list of render commands in a CommandEncoder.

It can be created with CommandEncoder::begin_render_pass(), whose RenderPassDescriptor specifies the attachments (textures) that will be rendered to.

Most of the methods on RenderPass serve one of two purposes, identifiable by their names:

  • draw_*(): Drawing (that is, encoding a render command, which, when executed by the GPU, will rasterize something and execute shaders).
  • set_*(): Setting part of the render state for future drawing commands.

A render pass may contain any number of drawing commands, and before/between each command the render state may be updated however you wish; each drawing command will be executed using the render state that has been set when the draw_*() function is called.

Corresponds to WebGPU GPURenderPassEncoder.

Implementations§

§

impl<'a> RenderPass<'a>

pub fn set_bind_group( &mut self, index: u32, bind_group: &'a BindGroup, offsets: &[u32] )

Sets the active bind group for a given bind group index. The bind group layout in the active pipeline when any draw_*() method is called must match the layout of this bind group.

If the bind group have dynamic offsets, provide them in binding order. These offsets have to be aligned to Limits::min_uniform_buffer_offset_alignment or Limits::min_storage_buffer_offset_alignment appropriately.

Subsequent draw calls’ shader executions will be able to access data in these bind groups.

pub fn set_pipeline(&mut self, pipeline: &'a RenderPipeline)

Sets the active render pipeline.

Subsequent draw calls will exhibit the behavior defined by pipeline.

pub fn set_blend_constant(&mut self, color: Color)

Sets the blend color as used by some of the blending modes.

Subsequent blending tests will test against this value. If this method has not been called, the blend constant defaults to Color::TRANSPARENT (all components zero).

pub fn set_index_buffer( &mut self, buffer_slice: BufferSlice<'a>, index_format: IndexFormat )

Sets the active index buffer.

Subsequent calls to draw_indexed on this RenderPass will use buffer as the source index buffer.

pub fn set_vertex_buffer(&mut self, slot: u32, buffer_slice: BufferSlice<'a>)

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.

pub fn set_scissor_rect(&mut self, x: u32, y: u32, width: u32, height: u32)

Sets the scissor rectangle used during the rasterization stage. After transformation into viewport coordinates.

Subsequent draw calls will discard any fragments which fall outside the scissor rectangle. If this method has not been called, the scissor rectangle defaults to the entire bounds of the render targets.

The function of the scissor rectangle resembles set_viewport(), but it does not affect the coordinate system, only which fragments are discarded.

pub fn set_viewport( &mut self, x: f32, y: f32, w: f32, h: f32, min_depth: f32, max_depth: f32 )

Sets the viewport used during the rasterization stage to linearly map from normalized device coordinates to viewport coordinates.

Subsequent draw calls will only draw within this region. If this method has not been called, the viewport defaults to the entire bounds of the render targets.

pub fn set_stencil_reference(&mut self, reference: u32)

Sets the stencil reference.

Subsequent stencil tests will test against this value. If this method has not been called, the stencil reference value defaults to 0.

pub fn insert_debug_marker(&mut self, label: &str)

Inserts debug marker.

pub fn push_debug_group(&mut self, label: &str)

Start record commands and group it into debug marker group.

pub fn pop_debug_group(&mut self)

Stops command recording and creates debug group.

pub fn draw(&mut self, vertices: Range<u32>, instances: Range<u32>)

Draws primitives from the active vertex buffer(s).

The active vertex buffer(s) can be set with RenderPass::set_vertex_buffer. Does not use an Index Buffer. If you need this see RenderPass::draw_indexed

Panics if vertices Range is outside of the range of the vertices range of any set vertex buffer.

vertices: The range of vertices to draw. instances: Range of Instances to draw. Use 0..1 if instance buffers are not used. E.g.of how its used internally

for instance_id in instance_range {
    for vertex_id in vertex_range {
        let vertex = vertex[vertex_id];
        vertex_shader(vertex, vertex_id, instance_id);
    }
}

This drawing command uses the current render state, as set by preceding set_*() methods. It is not affected by changes to the state that are performed after it is called.

pub fn draw_indexed( &mut self, indices: Range<u32>, base_vertex: i32, instances: Range<u32> )

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 The active vertex buffers can be set with RenderPass::set_vertex_buffer.

Panics if indices Range is outside of the range of the indices range of any set index buffer.

indices: The range of indices to draw. base_vertex: value added to each index value before indexing into the vertex buffers. instances: Range of Instances to draw. Use 0..1 if instance buffers are not used. E.g.of how its used internally

for instance_id in instance_range {
    for index_index in index_range {
        let vertex_id = index_buffer[index_index];
        let adjusted_vertex_id = vertex_id + base_vertex;
        let vertex = vertex[adjusted_vertex_id];
        vertex_shader(vertex, adjusted_vertex_id, instance_id);
    }
}

This drawing command uses the current render state, as set by preceding set_*() methods. It is not affected by changes to the state that are performed after it is called.

pub fn draw_indirect( &mut self, indirect_buffer: &'a Buffer, indirect_offset: u64 )

Draws primitives from the active vertex buffer(s) based on the contents of the indirect_buffer.

This is like calling RenderPass::draw but the contents of the call are specified in the indirect_buffer. The structure expected in indirect_buffer must conform to DrawIndirectArgs.

Indirect drawing has some caveats depending on the features available. We are not currently able to validate these and issue an error.

See details on the individual flags for more information.

pub fn draw_indexed_indirect( &mut self, indirect_buffer: &'a Buffer, indirect_offset: u64 )

Draws indexed primitives using the active index buffer and the active vertex buffers, based on the contents of the indirect_buffer.

This is like calling RenderPass::draw_indexed but the contents of the call are specified in the indirect_buffer. The structure expected in indirect_buffer must conform to DrawIndexedIndirectArgs.

Indirect drawing has some caveats depending on the features available. We are not currently able to validate these and issue an error.

See details on the individual flags for more information.

pub fn execute_bundles<I>(&mut self, render_bundles: I)
where I: IntoIterator<Item = &'a RenderBundle>,

Execute a render bundle, which is a set of pre-recorded commands that can be run together.

Commands in the bundle do not inherit this render pass’s current render state, and after the bundle has executed, the state is cleared (reset to defaults, not the previous state).

§

impl<'a> RenderPass<'a>

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: u64, 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 must conform to DrawIndirectArgs. These draw structures are expected to be tightly packed.

This drawing command uses the current render state, as set by preceding set_*() methods. It is not affected by changes to the state that are performed after it is called.

pub fn multi_draw_indexed_indirect( &mut self, indirect_buffer: &'a Buffer, indirect_offset: u64, 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 must conform to DrawIndexedIndirectArgs. These draw structures are expected to be tightly packed.

This drawing command uses the current render state, as set by preceding set_*() methods. It is not affected by changes to the state that are performed after it is called.

§

impl<'a> RenderPass<'a>

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: u64, count_buffer: &'a Buffer, count_offset: u64, max_count: u32 )

Dispatches 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 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 must conform to DrawIndirectArgs. 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.
}

This drawing command uses the current render state, as set by preceding set_*() methods. It is not affected by changes to the state that are performed after it is called.

pub fn multi_draw_indexed_indirect_count( &mut self, indirect_buffer: &'a Buffer, indirect_offset: u64, count_buffer: &'a Buffer, count_offset: u64, 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 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 must conform to DrawIndexedIndirectArgs.

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.
}

This drawing command uses the current render state, as set by preceding set_*() methods. It is not affected by changes to the state that are performed after it is called.

§

impl<'a> RenderPass<'a>

Features::PUSH_CONSTANTS must be enabled on the device in order to call these functions.

pub fn set_push_constants( &mut self, stages: ShaderStages, offset: u32, data: &[u8] )

Set push constant data for subsequent draw calls.

Write the bytes in data at offset offset within push constant storage, all of which are accessible by all the pipeline stages in stages, and no others. Both offset and the length of data must be multiples of PUSH_CONSTANT_ALIGNMENT, which is always 4.

For example, if offset is 4 and data is eight bytes long, this call will write data to bytes 4..12 of push constant storage.

Stage matching

Every byte in the affected range of push constant storage must be accessible to exactly the same set of pipeline stages, which must match stages. If there are two bytes of storage that are accessible by different sets of pipeline stages - say, one is accessible by fragment shaders, and the other is accessible by both fragment shaders and vertex shaders - then no single set_push_constants call may affect both of them; to write both, you must make multiple calls, each with the appropriate stages value.

Which pipeline stages may access a given byte is determined by the pipeline’s PushConstant global variable and (if it is a struct) its members’ offsets.

For example, suppose you have twelve bytes of push constant storage, where bytes 0..8 are accessed by the vertex shader, and bytes 4..12 are accessed by the fragment shader. This means there are three byte ranges each accessed by a different set of stages:

  • Bytes 0..4 are accessed only by the fragment shader.

  • Bytes 4..8 are accessed by both the fragment shader and the vertex shader.

  • Bytes 8..12 are accessed only by the vertex shader.

To write all twelve bytes requires three set_push_constants calls, one for each range, each passing the matching stages mask.

§

impl<'a> RenderPass<'a>

Features::TIMESTAMP_QUERY_INSIDE_PASSES must be enabled on the device in order to call these functions.

pub fn write_timestamp(&mut self, query_set: &QuerySet, query_index: u32)

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.

§

impl<'a> RenderPass<'a>

pub fn begin_occlusion_query(&mut self, query_index: u32)

Start a occlusion query on this render pass. It can be ended with end_occlusion_query. Occlusion queries may not be nested.

pub fn end_occlusion_query(&mut self)

End the occlusion query on this render pass. It can be started with begin_occlusion_query. Occlusion queries may not be nested.

§

impl<'a> RenderPass<'a>

Features::PIPELINE_STATISTICS_QUERY must be enabled on the device in order to call these functions.

pub fn begin_pipeline_statistics_query( &mut self, query_set: &QuerySet, query_index: u32 )

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.

pub fn end_pipeline_statistics_query(&mut self)

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§

§

impl<'a> Debug for RenderPass<'a>

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
§

impl<'a> Drop for RenderPass<'a>

§

fn drop(&mut self)

Executes the destructor for this type. Read more
§

impl<'a> RenderEncoder<'a> for RenderPass<'a>

§

fn set_bind_group( &mut self, index: u32, bind_group: &'a BindGroup, offsets: &[u32] )

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
§

fn set_pipeline(&mut self, pipeline: &'a RenderPipeline)

Sets the active render pipeline. Read more
§

fn set_index_buffer( &mut self, buffer_slice: BufferSlice<'a>, index_format: IndexFormat )

Sets the active index buffer. Read more
§

fn set_vertex_buffer(&mut self, slot: u32, buffer_slice: BufferSlice<'a>)

Assign a vertex buffer to a slot. Read more
§

fn draw(&mut self, vertices: Range<u32>, instances: Range<u32>)

Draws primitives from the active vertex buffer(s). Read more
§

fn draw_indexed( &mut self, indices: Range<u32>, base_vertex: i32, instances: Range<u32> )

Draws indexed primitives using the active index buffer and the active vertex buffers. Read more
§

fn draw_indirect(&mut self, indirect_buffer: &'a Buffer, indirect_offset: u64)

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: u64 )

Draws indexed primitives using the active index buffer and the active vertex buffers, based on the contents of the indirect_buffer. Read more
§

fn set_push_constants(&mut self, stages: ShaderStages, offset: u32, data: &[u8])

wgt::Features::PUSH_CONSTANTS must be enabled on the device in order to call this function. Read more

Auto Trait Implementations§

§

impl<'a> !RefUnwindSafe for RenderPass<'a>

§

impl<'a> Send for RenderPass<'a>

§

impl<'a> Sync for RenderPass<'a>

§

impl<'a> Unpin for RenderPass<'a>

§

impl<'a> !UnwindSafe for RenderPass<'a>

Blanket Implementations§

source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where T: Real + Zero + Arithmetics + Clone, Swp: WhitePoint<T>, Dwp: WhitePoint<T>, D: AdaptFrom<S, Swp, Dwp, T>,

source§

fn adapt_into_using<M>(self, method: M) -> D
where M: TransformMatrix<T>,

Convert the source color to the destination color using the specified method.
source§

fn adapt_into(self) -> D

Convert the source color to the destination color using the bradford method by default.
source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T, C> ArraysFrom<C> for T
where C: IntoArrays<T>,

source§

fn arrays_from(colors: C) -> T

Cast a collection of colors into a collection of arrays.
source§

impl<T, C> ArraysInto<C> for T
where C: FromArrays<T>,

source§

fn arrays_into(self) -> C

Cast this collection of arrays into a collection of colors.
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for U
where T: FromCam16Unclamped<WpParam, U>,

§

type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
source§

fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar> ) -> T

Converts self into C, using the provided parameters.
source§

impl<T, C> ComponentsFrom<C> for T
where C: IntoComponents<T>,

source§

fn components_from(colors: C) -> T

Cast a collection of colors into a collection of color components.
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> FromAngle<T> for T

source§

fn from_angle(angle: T) -> T

Performs a conversion from angle.
source§

impl<T, U> FromStimulus<U> for T
where U: IntoStimulus<T>,

source§

fn from_stimulus(other: U) -> T

Converts other into Self, while performing the appropriate scaling, rounding and clamping.
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> IntoAngle<U> for T
where U: FromAngle<T>,

source§

fn into_angle(self) -> U

Performs a conversion into T.
source§

impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for U
where T: Cam16FromUnclamped<WpParam, U>,

§

type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
source§

fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar> ) -> T

Converts self into C, using the provided parameters.
source§

impl<T, U> IntoColor<U> for T
where U: FromColor<T>,

source§

fn into_color(self) -> U

Convert into T with values clamped to the color defined bounds Read more
source§

impl<T, U> IntoColorUnclamped<U> for T
where U: FromColorUnclamped<T>,

source§

fn into_color_unclamped(self) -> U

Convert into T. The resulting color might be invalid in its color space Read more
source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

impl<T> IntoStimulus<T> for T

source§

fn into_stimulus(self) -> T

Converts self into T, while performing the appropriate scaling, rounding and clamping.
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, C> TryComponentsInto<C> for T
where C: TryFromComponents<T>,

§

type Error = <C as TryFromComponents<T>>::Error

The error for when try_into_colors fails to cast.
source§

fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>

Try to cast this collection of color components into a collection of colors. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T, U> TryIntoColor<U> for T
where U: TryFromColor<T>,

source§

fn try_into_color(self) -> Result<U, OutOfBounds<U>>

Convert into T, returning ok if the color is inside of its defined range, otherwise an OutOfBounds error is returned which contains the unclamped color. Read more
source§

impl<C, U> UintsFrom<C> for U
where C: IntoUints<U>,

source§

fn uints_from(colors: C) -> U

Cast a collection of colors into a collection of unsigned integers.
source§

impl<C, U> UintsInto<C> for U
where C: FromUints<U>,

source§

fn uints_into(self) -> C

Cast this collection of unsigned integers into a collection of colors.
§

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
source§

impl<T> MaybeSend for T
where T: Send,

source§

impl<T> MaybeSync for T
where T: Sync,

§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T

§

impl<T> WasmNotSync for T
where T: Sync,