pub struct Features {
pub plane: EnumSet<Plane>,
pub cube_cluster: bool,
pub memory_reinterpret: bool,
pub alignment: bool,
pub types: Types,
pub matmul: MatmulFeatures,
pub copy_async: bool,
pub device_memory_scope: bool,
pub tma: EnumSet<Tma>,
pub unaligned_io: bool,
}Expand description
Features supported by a runtime
Fields§
§plane: EnumSet<Plane>Plane features supported by this runtime.
cube_cluster: boolClustered launches and intra-cluster operations like cluster shared memory
memory_reinterpret: boolEnables changing the type of containers during kernel execution.
alignment: boolEnables explicit alignment. If false, alignment still compiles, but isn’t actually applied.
types: TypesType support
matmul: MatmulFeaturesMatrix multiplication features
copy_async: boolWhether copy_async is supported
device_memory_scope: boolWhether a SyncScope::Device
synchronization is a release and an acquire at device scope, so that one cube’s writes to
storage are visible to another that synchronizes after it. Without it the same
synchronization is a cube barrier and nothing more, which is all WebGPU’s memory model
promises, so a kernel whose cubes hand each other data must ask before it runs.
tma: EnumSet<Tma>Tensor Memory Accelerator supported features
unaligned_io: boolWhether vectors can be read from / stored to addresses not aligned
with the vector_size
Implementations§
Source§impl Features
impl Features
Sourcepub fn type_usage(&self, ty: ElemType) -> EnumSet<TypeUsage>
pub fn type_usage(&self, ty: ElemType) -> EnumSet<TypeUsage>
Get the usages for a type
Sourcepub fn complex_usage(&self, ty: ElemType) -> EnumSet<ComplexUsage>
pub fn complex_usage(&self, ty: ElemType) -> EnumSet<ComplexUsage>
Get the complex capability families for a type.
Sourcepub fn supports_complex_usage(&self, ty: ElemType, usage: ComplexUsage) -> bool
pub fn supports_complex_usage(&self, ty: ElemType, usage: ComplexUsage) -> bool
Whether a complex type supports the requested capability family.
Sourcepub fn atomic_type_usage(&self, ty: Type) -> EnumSet<AtomicUsage>
pub fn atomic_type_usage(&self, ty: Type) -> EnumSet<AtomicUsage>
Get the usages for an atomic type
Sourcepub fn supports_type(&self, ty: impl Into<Type>) -> bool
pub fn supports_type(&self, ty: impl Into<Type>) -> bool
Whether the type is supported in any way
Sourcepub fn supports_address(&self, ty: impl Into<AddressType>) -> bool
pub fn supports_address(&self, ty: impl Into<AddressType>) -> bool
Whether the address type is supported in any way
Trait Implementations§
impl Eq for Features
impl StructuralPartialEq for Features
Auto Trait Implementations§
impl Freeze for Features
impl RefUnwindSafe for Features
impl Send for Features
impl Sync for Features
impl Unpin for Features
impl UnsafeUnpin for Features
impl UnwindSafe for Features
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more