pub struct ConstantEvaluator<'a> { /* private fields */ }
Expand description

A context for evaluating constant expressions.

A ConstantEvaluator points at an expression arena to which it can append newly evaluated expressions: you pass try_eval_and_append whatever kind of Naga Expression you like, and if its value can be computed at compile time, try_eval_and_append appends an expression representing the computed value - a tree of Literal, Compose, ZeroValue, and Swizzle expressions - to the arena. See the try_eval_and_append method for details.

A ConstantEvaluator also holds whatever information we need to carry out that evaluation: types, other constants, and so on.

Implementations§

source§

impl<'a> ConstantEvaluator<'a>

source

pub fn for_wgsl_module(module: &'a mut Module) -> Self

Return a ConstantEvaluator that will add expressions to module’s constant expression arena.

Report errors according to WGSL’s rules for constant evaluation.

source

pub fn for_glsl_module(module: &'a mut Module) -> Self

Return a ConstantEvaluator that will add expressions to module’s constant expression arena.

Report errors according to GLSL’s rules for constant evaluation.

source

pub fn for_wgsl_function( module: &'a mut Module, expressions: &'a mut Arena<Expression>, expression_constness: &'a mut ExpressionConstnessTracker, emitter: &'a mut Emitter, block: &'a mut Block ) -> Self

Return a ConstantEvaluator that will add expressions to function’s expression arena.

Report errors according to WGSL’s rules for constant evaluation.

source

pub fn for_glsl_function( module: &'a mut Module, expressions: &'a mut Arena<Expression>, expression_constness: &'a mut ExpressionConstnessTracker, emitter: &'a mut Emitter, block: &'a mut Block ) -> Self

Return a ConstantEvaluator that will add expressions to function’s expression arena.

Report errors according to GLSL’s rules for constant evaluation.

source

pub fn to_ctx(&self) -> GlobalCtx<'_>

source

pub fn try_eval_and_append( &mut self, expr: &Expression, span: Span ) -> Result<Handle<Expression>, ConstantEvaluatorError>

Try to evaluate expr at compile time.

The expr argument can be any sort of Naga Expression you like. If we can determine its value at compile time, we append an expression representing its value - a tree of Literal, Compose, ZeroValue, and Swizzle expressions - to the expression arena self contributes to.

If expr’s value cannot be determined at compile time, return a an error. If it’s acceptable to evaluate expr at runtime, this error can be ignored, and the caller can append expr to the arena itself.

We only consider expr itself, without recursing into its operands. Its operands must all have been produced by prior calls to try_eval_and_append, to ensure that they have already been reduced to an evaluated form if possible.

source

pub fn cast( &mut self, expr: Handle<Expression>, target: Scalar, span: Span ) -> Result<Handle<Expression>, ConstantEvaluatorError>

Convert the scalar components of expr to target.

Treat span as the location of the resulting expression.

source

pub fn cast_array( &mut self, expr: Handle<Expression>, target: Scalar, span: Span ) -> Result<Handle<Expression>, ConstantEvaluatorError>

Convert the scalar leaves of expr to target, handling arrays.

expr must be a Compose expression whose type is a scalar, vector, matrix, or nested arrays of such.

This is basically the same as the cast method, except that that should only handle Naga As expressions, which cannot convert arrays.

Treat span as the location of the resulting expression.

Trait Implementations§

source§

impl<'a> Debug for ConstantEvaluator<'a>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'a> RefUnwindSafe for ConstantEvaluator<'a>

§

impl<'a> Send for ConstantEvaluator<'a>

§

impl<'a> Sync for ConstantEvaluator<'a>

§

impl<'a> Unpin for ConstantEvaluator<'a>

§

impl<'a> !UnwindSafe for ConstantEvaluator<'a>

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.