Struct naga::EntryPoint

source ·
pub struct EntryPoint {
    pub name: String,
    pub stage: ShaderStage,
    pub early_depth_test: Option<EarlyDepthTest>,
    pub workgroup_size: [u32; 3],
    pub function: Function,
}
Expand description

The main function for a pipeline stage.

An EntryPoint is a Function that serves as the main function for a graphics or compute pipeline stage. For example, an EntryPoint whose stage is ShaderStage::Vertex can serve as a graphics pipeline’s vertex shader.

Since an entry point is called directly by the graphics or compute pipeline, not by other WGSL functions, you must specify what the pipeline should pass as the entry point’s arguments, and what values it will return. For example, a vertex shader needs a vertex’s attributes as its arguments, but if it’s used for instanced draw calls, it will also want to know the instance id. The vertex shader’s return value will usually include an output vertex position, and possibly other attributes to be interpolated and passed along to a fragment shader.

To specify this, the arguments and result of an EntryPoint’s function must each have a Binding, or be structs whose members all have Bindings. This associates every value passed to or returned from the entry point with either a BuiltIn or a Location:

  • A BuiltIn has special semantics, usually specific to its pipeline stage. For example, the result of a vertex shader can include a BuiltIn::Position value, which determines the position of a vertex of a rendered primitive. Or, a compute shader might take an argument whose binding is BuiltIn::WorkGroupSize, through which the compute pipeline would pass the number of invocations in your workgroup.

  • A Location indicates user-defined IO to be passed from one pipeline stage to the next. For example, a vertex shader might also produce a uv texture location as a user-defined IO value.

In other words, the pipeline stage’s input and output interface are determined by the bindings of the arguments and result of the EntryPoint’s function.

Fields§

§name: String

Name of this entry point, visible externally.

Entry point names for a given stage must be distinct within a module.

§stage: ShaderStage

Shader stage.

§early_depth_test: Option<EarlyDepthTest>

Early depth test for fragment stages.

§workgroup_size: [u32; 3]

Workgroup size for compute stages

§function: Function

The entrance function.

Trait Implementations§

source§

impl<'arbitrary> Arbitrary<'arbitrary> for EntryPoint

source§

fn arbitrary(u: &mut Unstructured<'arbitrary>) -> Result<Self>

Generate an arbitrary value of Self from the given unstructured data. Read more
source§

fn arbitrary_take_rest(u: Unstructured<'arbitrary>) -> Result<Self>

Generate an arbitrary value of Self from the entirety of the given unstructured data. Read more
source§

fn size_hint(depth: usize) -> (usize, Option<usize>)

Get a size hint for how many bytes out of an Unstructured this type needs to construct itself. Read more
source§

impl Clone for EntryPoint

source§

fn clone(&self) -> EntryPoint

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 Debug for EntryPoint

source§

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

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for EntryPoint

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for EntryPoint

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. 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> 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> 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,

§

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

§

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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,