Enum EarlyDepthTest
pub enum EarlyDepthTest {
Force,
Allow {
conservative: ConservativeDepth,
},
}unstable-wgpu-27 only.Expand description
Explicitly allows early depth/stencil tests.
Normally, depth/stencil tests are performed after fragment shading. However, as an optimization, most drivers will move the depth/stencil tests before fragment shading if this does not have any observable consequences. This optimization is disabled under the following circumstances:
discardis called in the fragment shader.- The fragment shader writes to the depth buffer.
- The fragment shader writes to any storage bindings.
When EarlyDepthTest is set, it is allowed to perform an early depth/stencil test even if the
above conditions are not met. When EarlyDepthTest::Force is used, depth/stencil tests
must be performed before fragment shading.
To force early depth/stencil tests in a shader:
- GLSL:
layout(early_fragment_tests) in; - HLSL:
Attribute earlydepthstencil - SPIR-V:
ExecutionMode EarlyFragmentTests - WGSL:
@early_depth_test(force)
This may also be enabled in a shader by specifying a ConservativeDepth.
For more, see:
Variants§
Force
Requires depth/stencil tests to be performed before fragment shading.
This will disable depth/stencil tests after fragment shading, so discarding the fragment or overwriting the fragment depth will have no effect.
Allow
Allows an additional depth/stencil test to be performed before fragment shading.
It is up to the driver to decide whether early tests are performed. Unlike Force, this
does not disable depth/stencil tests after fragment shading.
Fields
conservative: ConservativeDepthSpecifies restrictions on how the depth value can be modified within the fragment shader.
This may be taken into account when deciding whether to perform early tests.
Trait Implementations§
§impl Clone for EarlyDepthTest
impl Clone for EarlyDepthTest
§fn clone(&self) -> EarlyDepthTest
fn clone(&self) -> EarlyDepthTest
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more§impl Debug for EarlyDepthTest
impl Debug for EarlyDepthTest
§impl Hash for EarlyDepthTest
impl Hash for EarlyDepthTest
§impl Ord for EarlyDepthTest
impl Ord for EarlyDepthTest
§impl PartialEq for EarlyDepthTest
impl PartialEq for EarlyDepthTest
§impl PartialOrd for EarlyDepthTest
impl PartialOrd for EarlyDepthTest
impl Copy for EarlyDepthTest
impl Eq for EarlyDepthTest
impl StructuralPartialEq for EarlyDepthTest
Auto Trait Implementations§
impl Freeze for EarlyDepthTest
impl RefUnwindSafe for EarlyDepthTest
impl Send for EarlyDepthTest
impl Sync for EarlyDepthTest
impl Unpin for EarlyDepthTest
impl UnwindSafe for EarlyDepthTest
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§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.§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.§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.§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.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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>
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§impl<T> Pointable for T
impl<T> Pointable for T
§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.