Enum naga::Binding

source ·
pub enum Binding {
    BuiltIn(BuiltIn),
    Location {
        location: u32,
        interpolation: Option<Interpolation>,
        sampling: Option<Sampling>,
    },
}
Expand description

Describes how an input/output variable is to be bound.

Variants§

§

BuiltIn(BuiltIn)

Built-in shader variable.

§

Location

Fields

§location: u32
§interpolation: Option<Interpolation>
§sampling: Option<Sampling>

Indexed location.

Values passed from the Vertex stage to the Fragment stage must have their interpolation defaulted (i.e. not None) by the front end as appropriate for that language.

For other stages, we permit interpolations even though they’re ignored. When a front end is parsing a struct type, it usually doesn’t know what stages will be using it for IO, so it’s easiest if it can apply the defaults to anything with a Location binding, just in case.

For anything other than floating-point scalars and vectors, the interpolation must be Flat.

Implementations§

source§

impl Binding

source

pub fn apply_default_interpolation(&mut self, ty: &TypeInner)

Apply the usual default interpolation for ty to binding.

This function is a utility front ends may use to satisfy the Naga IR’s requirement, meant to ensure that input languages’ policies have been applied appropriately, that all I/O Bindings from the vertex shader to the fragment shader must have non-None interpolation values.

All the shader languages Naga supports have similar rules: perspective-correct, center-sampled interpolation is the default for any binding that can vary, and everything else either defaults to flat, or requires an explicit flat qualifier/attribute/what-have-you.

If binding is not a Location binding, or if its interpolation is already set, then make no changes. Otherwise, set binding’s interpolation and sampling to reasonable defaults depending on ty, the type of the value being interpolated:

  • If ty is a floating-point scalar, vector, or matrix type, then default to Perspective interpolation and Center sampling.

  • If ty is an integral scalar or vector, then default to Flat interpolation, which has no associated sampling.

  • For any other types, make no change. Such types are not permitted as user-defined IO values, and will probably be flagged by the verifier

When structs appear in input or output types, each member ought to have its own Binding, so structs are simply covered by the third case.

source§

impl Binding

source

pub const fn to_built_in(&self) -> Option<BuiltIn>

Trait Implementations§

source§

impl Clone for Binding

source§

fn clone(&self) -> Binding

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 Binding

source§

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

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

impl Hash for Binding

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl PartialEq for Binding

source§

fn eq(&self, other: &Binding) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Eq for Binding

source§

impl StructuralEq for Binding

source§

impl StructuralPartialEq for Binding

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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
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.