mirror of
https://github.com/gfx-rs/wgpu.git
synced 2024-11-21 22:33:49 +00:00
[naga spv-out] Internal doc fixes for back::spv::index
.
In `naga:🔙:spv::index`, clarify documentation for:
- `BoundsCheckResult`
- `write_index_comparison`
- `write_bounds_check`
This commit is contained in:
parent
2d82054ae4
commit
215f0fc887
@ -11,16 +11,31 @@ use crate::{arena::Handle, proc::BoundsCheckPolicy};
|
|||||||
|
|
||||||
/// The results of performing a bounds check.
|
/// The results of performing a bounds check.
|
||||||
///
|
///
|
||||||
/// On success, `write_bounds_check` returns a value of this type.
|
/// On success, `write_bounds_check` returns a value of this type. The
|
||||||
|
/// caller can assume that the right policy has been applied, and
|
||||||
|
/// simply do what the variant says.
|
||||||
pub(super) enum BoundsCheckResult {
|
pub(super) enum BoundsCheckResult {
|
||||||
/// The index is statically known and in bounds, with the given value.
|
/// The index is statically known and in bounds, with the given value.
|
||||||
KnownInBounds(u32),
|
KnownInBounds(u32),
|
||||||
|
|
||||||
/// The given instruction computes the index to be used.
|
/// The given instruction computes the index to be used.
|
||||||
|
///
|
||||||
|
/// When [`BoundsCheckPolicy::Restrict`] is in force, this is a
|
||||||
|
/// clamped version of the index the user supplied.
|
||||||
|
///
|
||||||
|
/// When [`BoundsCheckPolicy::Unchecked`] is in force, this is
|
||||||
|
/// simply the index the user supplied. This variant indicates
|
||||||
|
/// that we couldn't prove statically that the index was in
|
||||||
|
/// bounds; otherwise we would have returned [`KnownInBounds`].
|
||||||
|
///
|
||||||
|
/// [`KnownInBounds`]: BoundsCheckResult::KnownInBounds
|
||||||
Computed(Word),
|
Computed(Word),
|
||||||
|
|
||||||
/// The given instruction computes a boolean condition which is true
|
/// The given instruction computes a boolean condition which is true
|
||||||
/// if the index is in bounds.
|
/// if the index is in bounds.
|
||||||
|
///
|
||||||
|
/// This is returned when [`BoundsCheckPolicy::ReadZeroSkipWrite`]
|
||||||
|
/// is in force.
|
||||||
Conditional(Word),
|
Conditional(Word),
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -357,6 +372,8 @@ impl<'w> BlockContext<'w> {
|
|||||||
|
|
||||||
/// Write an index bounds comparison to `block`, if needed.
|
/// Write an index bounds comparison to `block`, if needed.
|
||||||
///
|
///
|
||||||
|
/// This is used to implement [`BoundsCheckPolicy::ReadZeroSkipWrite`].
|
||||||
|
///
|
||||||
/// If we're able to determine statically that `index` is in bounds for
|
/// If we're able to determine statically that `index` is in bounds for
|
||||||
/// `sequence`, return `KnownInBounds(value)`, where `value` is the actual
|
/// `sequence`, return `KnownInBounds(value)`, where `value` is the actual
|
||||||
/// value of the index. (In principle, one could know that the index is in
|
/// value of the index. (In principle, one could know that the index is in
|
||||||
@ -477,11 +494,23 @@ impl<'w> BlockContext<'w> {
|
|||||||
|
|
||||||
/// Emit code for bounds checks for an array, vector, or matrix access.
|
/// Emit code for bounds checks for an array, vector, or matrix access.
|
||||||
///
|
///
|
||||||
/// This implements either `index_bounds_check_policy` or
|
/// This tries to handle all the critical steps for bounds checks:
|
||||||
/// `buffer_bounds_check_policy`, depending on the address space of the
|
|
||||||
/// pointer being accessed.
|
|
||||||
///
|
///
|
||||||
/// Return a `BoundsCheckResult` indicating how the index should be
|
/// - First, select the appropriate bounds check policy for `base`,
|
||||||
|
/// depending on its address space.
|
||||||
|
///
|
||||||
|
/// - Next, analyze `index` to see if its value is known at
|
||||||
|
/// compile time, in which case we can decide statically whether
|
||||||
|
/// the index is in bounds.
|
||||||
|
///
|
||||||
|
/// - If the index's value is not known at compile time, emit code to:
|
||||||
|
///
|
||||||
|
/// - restrict its value (for [`BoundsCheckPolicy::Restrict`]), or
|
||||||
|
///
|
||||||
|
/// - check whether it's in bounds (for
|
||||||
|
/// [`BoundsCheckPolicy::ReadZeroSkipWrite`]).
|
||||||
|
///
|
||||||
|
/// Return a [`BoundsCheckResult`] indicating how the index should be
|
||||||
/// consumed. See that type's documentation for details.
|
/// consumed. See that type's documentation for details.
|
||||||
pub(super) fn write_bounds_check(
|
pub(super) fn write_bounds_check(
|
||||||
&mut self,
|
&mut self,
|
||||||
|
Loading…
Reference in New Issue
Block a user