pub struct PhaseItemExtraIndex(pub u32);
Expand description
The “extra index” associated with some PhaseItem
s, alongside the
indirect instance index.
Sometimes phase items require another index in addition to the range of instances they already have. These can be:
-
The dynamic offset: a
wgpu
dynamic offset into the uniform buffer of instance data. This is used on platforms that don’t support storage buffers, to work around uniform buffer size limitations. -
The indirect parameters index: an index into the buffer that specifies the indirect parameters for this
PhaseItem
’s drawcall. This is used when indirect mode is on (as used for GPU culling).
Note that our indirect draw functionality requires storage buffers, so it’s
impossible to have both a dynamic offset and an indirect parameters index.
This convenient fact allows us to pack both indices into a single u32
.
Tuple Fields§
§0: u32
Implementations§
Source§impl PhaseItemExtraIndex
impl PhaseItemExtraIndex
Sourcepub const INDIRECT_PARAMETER_INDEX: u32 = 2_147_483_648u32
pub const INDIRECT_PARAMETER_INDEX: u32 = 2_147_483_648u32
The flag that indicates that this index is an indirect parameter. If not set, this is a dynamic offset.
Sourcepub const OFFSET_MASK: u32 = 2_147_483_647u32
pub const OFFSET_MASK: u32 = 2_147_483_647u32
To extract the index from a packed PhaseItemExtraIndex
, bitwise-and
the contents with this value.
Sourcepub const FLAGS_MASK: u32 = 2_147_483_648u32
pub const FLAGS_MASK: u32 = 2_147_483_648u32
To extract the flag from a packed PhaseItemExtraIndex
, bitwise-and
the contents with this value.
Sourcepub const NONE: PhaseItemExtraIndex = _
pub const NONE: PhaseItemExtraIndex = _
The special value that indicates that no extra index is present.
Sourcepub fn indirect_parameters_index(
indirect_parameter_index: u32,
) -> PhaseItemExtraIndex
pub fn indirect_parameters_index( indirect_parameter_index: u32, ) -> PhaseItemExtraIndex
Packs a indirect parameters index into this extra index.
Sourcepub fn maybe_indirect_parameters_index(
maybe_indirect_parameters_index: Option<NonMaxU32>,
) -> PhaseItemExtraIndex
pub fn maybe_indirect_parameters_index( maybe_indirect_parameters_index: Option<NonMaxU32>, ) -> PhaseItemExtraIndex
Returns either an indirect parameters index or
PhaseItemExtraIndex::NONE
, as appropriate.
Sourcepub fn dynamic_offset(dynamic_offset: u32) -> PhaseItemExtraIndex
pub fn dynamic_offset(dynamic_offset: u32) -> PhaseItemExtraIndex
Packs a dynamic offset into this extra index.
Sourcepub fn maybe_dynamic_offset(
maybe_dynamic_offset: Option<NonMaxU32>,
) -> PhaseItemExtraIndex
pub fn maybe_dynamic_offset( maybe_dynamic_offset: Option<NonMaxU32>, ) -> PhaseItemExtraIndex
Returns either a dynamic offset or PhaseItemExtraIndex::NONE
, as
appropriate.
Sourcepub fn as_dynamic_offset(&self) -> Option<NonMaxU32>
pub fn as_dynamic_offset(&self) -> Option<NonMaxU32>
If this extra index describes a dynamic offset, returns it; otherwise,
returns None
.
Sourcepub fn as_indirect_parameters_index(&self) -> Option<u32>
pub fn as_indirect_parameters_index(&self) -> Option<u32>
If this extra index describes an indirect parameters index, returns it;
otherwise, returns None
.
Trait Implementations§
Source§impl Clone for PhaseItemExtraIndex
impl Clone for PhaseItemExtraIndex
Source§fn clone(&self) -> PhaseItemExtraIndex
fn clone(&self) -> PhaseItemExtraIndex
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for PhaseItemExtraIndex
impl Debug for PhaseItemExtraIndex
Source§impl Hash for PhaseItemExtraIndex
impl Hash for PhaseItemExtraIndex
Source§impl PartialEq for PhaseItemExtraIndex
impl PartialEq for PhaseItemExtraIndex
impl Copy for PhaseItemExtraIndex
impl Eq for PhaseItemExtraIndex
impl StructuralPartialEq for PhaseItemExtraIndex
Auto Trait Implementations§
impl Freeze for PhaseItemExtraIndex
impl RefUnwindSafe for PhaseItemExtraIndex
impl Send for PhaseItemExtraIndex
impl Sync for PhaseItemExtraIndex
impl Unpin for PhaseItemExtraIndex
impl UnwindSafe for PhaseItemExtraIndex
Blanket Implementations§
Source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
Source§fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
T
ShaderType
for self
. When used in AsBindGroup
derives, it is safe to assume that all images in self
exist.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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)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>
. Box<dyn Any>
can
then be further downcast
into Box<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>
. Rc<Any>
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> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
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.