Struct naga::back::spv::Function

source ·
struct Function {
    signature: Option<Instruction>,
    parameters: Vec<FunctionArgument>,
    variables: FastHashMap<Handle<LocalVariable>, LocalVariable>,
    spilled_composites: FastIndexMap<Handle<Expression>, LocalVariable>,
    spilled_accesses: HandleSet<Expression>,
    access_uses: FastHashMap<Handle<Expression>, usize>,
    blocks: Vec<TerminatedBlock>,
    entry_point_context: Option<EntryPointContext>,
}

Fields§

§signature: Option<Instruction>§parameters: Vec<FunctionArgument>§variables: FastHashMap<Handle<LocalVariable>, LocalVariable>§spilled_composites: FastIndexMap<Handle<Expression>, LocalVariable>

A map taking an expression that yields a composite value (array, matrix) to the temporary variables we have spilled it to, if any. Spilling allows us to render an arbitrary chain of Access and AccessIndex expressions as an OpAccessChain and an OpLoad (plus bounds checks). This supports dynamic indexing of by-value arrays and matrices, which SPIR-V does not.

§spilled_accesses: HandleSet<Expression>

A set of expressions that are either in spilled_composites or refer to some component/element of such.

§access_uses: FastHashMap<Handle<Expression>, usize>

A map taking each expression to the number of Access and AccessIndex expressions that uses it as a base value. If an expression has no entry, its count is zero: it is never used as a Access or AccessIndex base.

We use this, together with ExpressionInfo::ref_count, to recognize the tips of chains of Access and AccessIndex expressions that access spilled values — expressions in spilled_composites. We defer generating code for the chain until we reach its tip, so we can handle it with a single instruction.

§blocks: Vec<TerminatedBlock>§entry_point_context: Option<EntryPointContext>

Implementations§

source§

impl Function

source

fn to_words(&self, sink: &mut impl Extend<Word>)

source§

impl Function

source

fn consume(&mut self, block: Block, termination: Instruction)

source

fn parameter_id(&self, index: u32) -> Word

Trait Implementations§

source§

impl Default for Function

source§

fn default() -> Function

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.