Enum EarlyDepthTest
pub enum EarlyDepthTest {
Force,
Allow {
conservative: ConservativeDepth,
},
}
unstable-wgpu-26
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:
discard
is 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: ConservativeDepth
Specifies 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
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.