pub enum ResourceAccess {
Read,
Write,
}Expand description
P1-20 fix: resource access type for hazard analysis.
Each pass declares which resources it reads and which it writes. The graph planner can then detect:
- Write-after-write (WAW): two passes write the same resource without a barrier between them
- Read-after-write (RAW): a pass reads a resource that was written by an earlier pass without a barrier
- Write-after-read (WAR): a pass writes a resource that is still being read by an earlier pass
Hazards are detected at graph compilation time, not at runtime, so they don’t add frame-time overhead.
Variants§
Implementations§
Source§impl ResourceAccess
impl ResourceAccess
Sourcepub fn conflicts_with(self, other: ResourceAccess) -> bool
pub fn conflicts_with(self, other: ResourceAccess) -> bool
Returns true if this access conflicts with another in the sense that they cannot be reordered. The caller is responsible for inserting the appropriate barrier (wgpu render pass boundary, compute pass boundary, or queue.submit) between the two accesses.
Trait Implementations§
Source§impl Clone for ResourceAccess
impl Clone for ResourceAccess
Source§fn clone(&self) -> ResourceAccess
fn clone(&self) -> ResourceAccess
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreimpl Copy for ResourceAccess
Source§impl Debug for ResourceAccess
impl Debug for ResourceAccess
impl Eq for ResourceAccess
Source§impl PartialEq for ResourceAccess
impl PartialEq for ResourceAccess
Source§fn eq(&self, other: &ResourceAccess) -> bool
fn eq(&self, other: &ResourceAccess) -> bool
Tests for
self and other values to be equal, and is used by ==.impl StructuralPartialEq for ResourceAccess
Auto Trait Implementations§
impl Freeze for ResourceAccess
impl RefUnwindSafe for ResourceAccess
impl Send for ResourceAccess
impl Sync for ResourceAccess
impl Unpin for ResourceAccess
impl UnsafeUnpin for ResourceAccess
impl UnwindSafe for ResourceAccess
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
Mutably borrows from an owned value. Read more
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>
Convert
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>
Convert
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)
Convert
&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)
Convert
&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§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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>
Converts
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>
Converts
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