Struct encase::ArrayLength

source ·
pub struct ArrayLength;
Expand description

Helper type meant to be used together with the ShaderType derive macro

This type should be interpreted as an u32 in the shader

Problem

There are cases where the use of the WGSL function arrayLength() might be inadequate because of its return value

  • being a minimum of 1 due to how minBindingSize is calculated

  • possibly being higher than expected due to padding at the end of a struct or buffer being interpreted as array elements

  • representing the capacity of the array for usecaseses that require oversized buffers

Solution

Using this type on a field of a struct with the ShaderType derive macro will automatically:

  • on write, write the length of the contained runtime-sized array as an u32 to the buffer

  • on read, read the value as an u32 from the buffer (rep as LEN) and when reading the elements of the contained runtime-sized array a max of LEN elements will be read

Trait Implementations§

source§

impl Clone for ArrayLength

source§

fn clone(&self) -> ArrayLength

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 CreateFrom for ArrayLength

source§

fn create_from<B: BufferRef>(reader: &mut Reader<B>) -> Self

source§

impl Debug for ArrayLength

source§

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

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

impl Default for ArrayLength

source§

fn default() -> ArrayLength

Returns the “default value” for a type. Read more
source§

impl Ord for ArrayLength

source§

fn cmp(&self, other: &ArrayLength) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for ArrayLength

source§

fn eq(&self, other: &ArrayLength) -> 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 PartialOrd for ArrayLength

source§

fn partial_cmp(&self, other: &ArrayLength) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

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

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

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

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

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

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

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

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
source§

impl ReadFrom for ArrayLength

source§

fn read_from<B: BufferRef>(&mut self, reader: &mut Reader<B>)

source§

impl ShaderSize for ArrayLength

source§

const SHADER_SIZE: NonZeroU64 = _

Represents WGSL Size (equivalent to ShaderType::min_size)
source§

impl ShaderType for ArrayLength

source§

fn min_size() -> NonZeroU64

Represents the minimum size of Self (equivalent to GPUBufferBindingLayout.minBindingSize) Read more
source§

fn size(&self) -> NonZeroU64

Returns the size of Self at runtime Read more
source§

fn assert_uniform_compat()

source§

impl WriteInto for ArrayLength

source§

fn write_into<B: BufferMut>(&self, writer: &mut Writer<B>)

source§

impl Copy for ArrayLength

source§

impl Eq for ArrayLength

source§

impl StructuralEq for ArrayLength

source§

impl StructuralPartialEq for ArrayLength

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> Same for T

§

type Output = T

Should always be Self
§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
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> Scalar for T
where T: 'static + Clone + PartialEq + Debug,