Struct naga::proc::index::BoundsCheckPolicies
source · pub struct BoundsCheckPolicies {
pub index: BoundsCheckPolicy,
pub buffer: BoundsCheckPolicy,
pub image_load: BoundsCheckPolicy,
pub image_store: BoundsCheckPolicy,
pub binding_array: BoundsCheckPolicy,
}Expand description
Policies for injecting bounds checks during code generation.
Fields§
§index: BoundsCheckPolicyHow should the generated code handle array, vector, or matrix indices that are out of range?
buffer: BoundsCheckPolicyHow should the generated code handle array, vector, or matrix indices
that are out of range, when those values live in a GlobalVariable in
the Storage or Uniform address spaces?
Some graphics hardware provides “robust buffer access”, a feature that
ensures that using a pointer cannot access memory outside the ‘buffer’
that it was derived from. In Naga terms, this means that the hardware
ensures that pointers computed by applying Access and
AccessIndex expressions to a GlobalVariable whose space is
Storage or Uniform will never read or write memory outside that
global variable.
When hardware offers such a feature, it is probably undesirable to have Naga inject bounds checking code for such accesses, since the hardware can probably provide the same protection more efficiently. However, bounds checks are still needed on accesses to indexable values that do not live in buffers, like local variables.
So, this option provides a separate policy that applies only to accesses
to storage and uniform globals. When depending on hardware bounds
checking, this policy can be Unchecked to avoid unnecessary overhead.
When special hardware support is not available, this should probably be
the same as index_bounds_check_policy.
image_load: BoundsCheckPolicyHow should the generated code handle image texel loads that are out of range?
This controls the behavior of ImageLoad expressions when a coordinate,
texture array index, level of detail, or multisampled sample number is out of range.
image_store: BoundsCheckPolicyHow should the generated code handle image texel stores that are out of range?
This controls the behavior of ImageStore statements when a coordinate,
texture array index, level of detail, or multisampled sample number is out of range.
This policy should’t be needed since all backends should ignore OOB writes.
binding_array: BoundsCheckPolicyHow should the generated code handle binding array indexes that are out of bounds.
Implementations§
source§impl BoundsCheckPolicies
impl BoundsCheckPolicies
sourcepub fn choose_policy(
&self,
base: Handle<Expression>,
types: &UniqueArena<Type>,
info: &FunctionInfo
) -> BoundsCheckPolicy
pub fn choose_policy( &self, base: Handle<Expression>, types: &UniqueArena<Type>, info: &FunctionInfo ) -> BoundsCheckPolicy
Determine which policy applies to base.
base is the “base” expression (the expression being indexed) of a Access
and AccessIndex expression. This is either a pointer, a value, being directly
indexed, or a binding array.
See the documentation for BoundsCheckPolicy for details about
when each policy applies.
sourcepub fn contains(&self, policy: BoundsCheckPolicy) -> bool
pub fn contains(&self, policy: BoundsCheckPolicy) -> bool
Return true if any of self’s policies are policy.
Trait Implementations§
source§impl Clone for BoundsCheckPolicies
impl Clone for BoundsCheckPolicies
source§fn clone(&self) -> BoundsCheckPolicies
fn clone(&self) -> BoundsCheckPolicies
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moresource§impl Debug for BoundsCheckPolicies
impl Debug for BoundsCheckPolicies
source§impl Default for BoundsCheckPolicies
impl Default for BoundsCheckPolicies
source§fn default() -> BoundsCheckPolicies
fn default() -> BoundsCheckPolicies
source§impl Hash for BoundsCheckPolicies
impl Hash for BoundsCheckPolicies
source§impl PartialEq for BoundsCheckPolicies
impl PartialEq for BoundsCheckPolicies
source§fn eq(&self, other: &BoundsCheckPolicies) -> bool
fn eq(&self, other: &BoundsCheckPolicies) -> bool
self and other values to be equal, and is used
by ==.impl Copy for BoundsCheckPolicies
impl Eq for BoundsCheckPolicies
impl StructuralPartialEq for BoundsCheckPolicies
Auto Trait Implementations§
impl Freeze for BoundsCheckPolicies
impl RefUnwindSafe for BoundsCheckPolicies
impl Send for BoundsCheckPolicies
impl Sync for BoundsCheckPolicies
impl Unpin for BoundsCheckPolicies
impl UnwindSafe for BoundsCheckPolicies
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<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.