Struct MeshPipelineDescriptor

Source
pub struct MeshPipelineDescriptor<'a> {
    pub label: Label<'a>,
    pub layout: Option<&'a PipelineLayout>,
    pub task: Option<TaskState<'a>>,
    pub mesh: MeshState<'a>,
    pub primitive: PrimitiveState,
    pub depth_stencil: Option<DepthStencilState>,
    pub multisample: MultisampleState,
    pub fragment: Option<FragmentState<'a>>,
    pub multiview: Option<NonZeroU32>,
    pub cache: Option<&'a PipelineCache>,
}
Expand description

Describes a mesh shader (graphics) pipeline.

For use with Device::create_mesh_pipeline. A mesh pipeline is very much like a render pipeline, except that instead of RenderPass::draw it is invoked with RenderPass::draw_mesh_tasks, and instead of a vertex shader and a fragment shader:

  • task specifies an optional task shader entry point, which determines how many groups of mesh shaders to dispatch.

  • mesh specifies a mesh shader entry point, which generates groups of primitives to draw

  • fragment specifies as fragment shader for drawing those primitives, just like in an ordinary render pipeline.

The key difference is that, whereas a vertex shader is invoked on the elements of vertex buffers, the task shader gets to decide how many mesh shader workgroups to make, and then each mesh shader workgroup gets to decide which primitives it wants to generate, and what their vertex attributes are. Task and mesh shaders can use whatever they please as inputs, like a compute shader. However, they cannot use specialized vertex or index buffers.

A mesh pipeline is invoked by RenderPass::draw_mesh_tasks, which looks like a compute shader dispatch with ComputePass::dispatch_workgroups: you pass x, y, and z values indicating the number of task shaders to invoke in parallel. The output value of the first thread in a task shader workgroup determines how many mesh workgroups should be dispatched from there. Those mesh workgroups also get a special payload passed from the task shader.

If the task shader is omitted, then the (x, y, z) parameters to draw_mesh_tasks are used to decide how many invocations of the mesh shader to invoke directly, without a task payload.

Fields§

§label: Label<'a>

Debug label of the pipeline. This will show up in graphics debuggers for easy identification.

§layout: Option<&'a PipelineLayout>

The layout of bind groups for this pipeline.

If this is set, then Device::create_render_pipeline will raise a validation error if the layout doesn’t match what the shader module(s) expect.

Using the same PipelineLayout for many RenderPipeline or ComputePipeline pipelines guarantees that you don’t have to rebind any resources when switching between those pipelines.

§Default pipeline layout

If layout is None, then the pipeline has a default layout created and used instead. The default layout is deduced from the shader modules.

You can use RenderPipeline::get_bind_group_layout to create bind groups for use with the default layout. However, these bind groups cannot be used with any other pipelines. This is convenient for simple pipelines, but using an explicit layout is recommended in most cases.

§task: Option<TaskState<'a>>

The mesh pipeline’s task shader.

If this is None, the mesh pipeline has no task shader. Executing a mesh drawing command simply dispatches a grid of mesh shaders directly.

§mesh: MeshState<'a>

The compiled mesh stage and its entry point

§primitive: PrimitiveState

The properties of the pipeline at the primitive assembly and rasterization level.

§depth_stencil: Option<DepthStencilState>

The effect of draw calls on the depth and stencil aspects of the output target, if any.

§multisample: MultisampleState

The multi-sampling properties of the pipeline.

§fragment: Option<FragmentState<'a>>

The compiled fragment stage, its entry point, and the color targets.

§multiview: Option<NonZeroU32>

If the pipeline will be used with a multiview render pass, this indicates how many array layers the attachments will have.

§cache: Option<&'a PipelineCache>

The pipeline cache to use when creating this pipeline.

Trait Implementations§

Source§

impl<'a> Clone for MeshPipelineDescriptor<'a>

Source§

fn clone(&self) -> MeshPipelineDescriptor<'a>

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'a> Debug for MeshPipelineDescriptor<'a>

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

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> AsAny for T
where T: 'static,

Source§

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

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<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

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>,

Source§

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

impl<T> Upcast<T> for T

§

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

Source§

impl<T> CommonTraits for T
where T: AsAny + Any + Debug + WasmNotSendSync,

Source§

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

Source§

impl<T> WasmNotSendSync for T

Source§

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