pub trait ShaderType {
    // Provided methods
    fn min_size() -> NonZero<u64> { ... }
    fn size(&self) -> NonZero<u64> { ... }
    fn assert_uniform_compat() { ... }
}
Expand description

Base trait for all WGSL host-shareable types

Provided Methods§

source

fn min_size() -> NonZero<u64>

Represents the minimum size of Self (equivalent to GPUBufferBindingLayout.minBindingSize)

For WGSL fixed-footprint types it represents WGSL Size (equivalent to ShaderSize::SHADER_SIZE)

For WGSL runtime-sized arrays and WGSL structs containing runtime-sized arrays (non fixed-footprint types) this will be calculated by assuming the array has one element

source

fn size(&self) -> NonZero<u64>

Returns the size of Self at runtime

For WGSL fixed-footprint types it’s equivalent to Self::min_size and ShaderSize::SHADER_SIZE

source

fn assert_uniform_compat()

Asserts that Self meets the requirements of the uniform address space restrictions on stored values and the uniform address space layout constraints

§Examples
§Array

Will panic since runtime-sized arrays are not compatible with the uniform address space restrictions on stored values

<Vec<mint::Vector4<f32>>>::assert_uniform_compat();

Will panic since the stride is 4 bytes

<[f32; 2]>::assert_uniform_compat();

Will not panic since the stride is 16 bytes

<[mint::Vector4<f32>; 2]>::assert_uniform_compat();
§Struct

Will panic since runtime-sized arrays are not compatible with the uniform address space restrictions on stored values

#[derive(ShaderType)]
struct Invalid {
    #[size(runtime)]
    vec: Vec<mint::Vector4<f32>>
}
Invalid::assert_uniform_compat();

Will panic since the inner struct’s size must be a multiple of 16

#[derive(ShaderType)]
struct S {
    x: f32,
}

#[derive(ShaderType)]
struct Invalid {
    a: f32,
    b: S, // offset between fields 'a' and 'b' must be at least 16 (currently: 4)
}
Invalid::assert_uniform_compat();

Will not panic (fixed via align attribute)

#[derive(ShaderType)]
struct Valid {
    a: f32,
    #[align(16)]
    b: S,
}
Valid::assert_uniform_compat();

Will not panic (fixed via size attribute)

#[derive(ShaderType)]
struct Valid {
    #[size(16)]
    a: f32,
    b: S,
}
Valid::assert_uniform_compat();

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl ShaderType for Option<NonZero<i32>>

source§

impl ShaderType for Option<NonZero<u32>>

source§

impl ShaderType for f32

source§

impl ShaderType for i32

source§

impl ShaderType for u32

source§

impl ShaderType for Wrapping<i32>

source§

impl ShaderType for Wrapping<u32>

source§

impl ShaderType for AtomicI32

source§

impl ShaderType for AtomicU32

source§

impl<T> ShaderType for &T
where T: ShaderType + ?Sized,

source§

fn size(&self) -> NonZero<u64>

source§

impl<T> ShaderType for &mut T
where T: ShaderType + ?Sized,

source§

fn size(&self) -> NonZero<u64>

source§

impl<T> ShaderType for [T]

source§

fn size(&self) -> NonZero<u64>

source§

impl<T> ShaderType for Cell<T>
where T: Copy + ShaderType + ?Sized,

source§

fn size(&self) -> NonZero<u64>

source§

impl<T, const N: usize> ShaderType for [T; N]

Implementors§

source§

impl ShaderType for Color

source§

impl ShaderType for Mat2
where f32: ShaderSize,

source§

impl ShaderType for Mat3
where f32: ShaderSize,

source§

impl ShaderType for Mat4
where f32: ShaderSize,

source§

impl ShaderType for Vec2
where f32: ShaderSize,

source§

impl ShaderType for Vec3
where f32: ShaderSize,

source§

impl ShaderType for Vec4
where f32: ShaderSize,

source§

impl ShaderType for IVec2
where i32: ShaderSize,

source§

impl ShaderType for IVec3
where i32: ShaderSize,

source§

impl ShaderType for IVec4
where i32: ShaderSize,

source§

impl ShaderType for UVec2
where u32: ShaderSize,

source§

impl ShaderType for UVec3
where u32: ShaderSize,

source§

impl ShaderType for UVec4
where u32: ShaderSize,

source§

impl ShaderType for PbrDeferredLightingDepthId
where u32: ShaderType,

source§

impl ShaderType for GpuDirectionalCascade

source§

impl ShaderType for GpuDirectionalLight

source§

impl ShaderType for GpuFog

source§

impl ShaderType for GpuLights

source§

impl ShaderType for GpuPointLight

source§

impl ShaderType for GpuPointLightsStorage

source§

impl ShaderType for GpuPointLightsUniform

source§

impl ShaderType for LightProbesUniform

source§

impl ShaderType for MeshUniform

source§

impl ShaderType for PreviousViewProjection

source§

impl ShaderType for StandardMaterialUniform

source§

impl ShaderType for ColorMaterialUniform

source§

impl ShaderType for Mesh2dUniform

source§

impl ShaderType for GlobalsUniform

source§

impl ShaderType for ColorGrading

source§

impl ShaderType for ViewUniform

source§

impl ShaderType for ArrayLength

source§

impl<T> ShaderType for Cow<'_, T>
where T: ToOwned<Owned = T> + ShaderType + ?Sized,

source§

impl<T> ShaderType for Box<T>
where T: ShaderType + ?Sized,

source§

impl<T> ShaderType for LinkedList<T>

source§

impl<T> ShaderType for VecDeque<T>

source§

impl<T> ShaderType for Rc<T>
where T: ShaderType + ?Sized,

source§

impl<T> ShaderType for Arc<T>
where T: ShaderType + ?Sized,

source§

impl<T> ShaderType for Vec<T>
where T: ShaderType + ShaderSize, Vec<T>: Length,