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§
Sourcefn min_size() -> NonZero<u64>
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
Sourcefn size(&self) -> NonZero<u64>
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
Sourcefn assert_uniform_compat()
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();Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.
Implementations on Foreign Types§
impl ShaderType for Option<NonZero<i32>>
impl ShaderType for Option<NonZero<u32>>
impl ShaderType for f32
impl ShaderType for i32
impl ShaderType for u32
impl ShaderType for Wrapping<i32>
impl ShaderType for Wrapping<u32>
impl ShaderType for AtomicI32
impl ShaderType for AtomicU32
impl ShaderType for LinearRgba
encase only.