Navigation
API > API/Runtime > API/Runtime/Engine
The FEmitter is a helper object responsible for emitting MIR values and instructions. It is primarily used within UMaterialExpression::Build() implementations to lower the high-level semantics of a material expression into corresponding lower-level MIR nodes.
During the emission process, the emitter automatically performs various simplifications and constant folding optimizations where possible.
An instance of the emitter is created and managed by the FMaterialIRModuleBuilder. This instance is then passed to the UMaterialExpression::Build() functions so that they can emit their corresponding IR values.
IMPORTANT: Users should not assume the exact MIR::FType of the FValue* returned by EmitXXX() functions. The emitter is free to optimize operations, which may result in a returned value having a different type than naively expected (e.g., folding an operation into a constant).
The emitter handles invalid inputs gracefully. If an operation is attempted with invalid arguments (e.g., acting on arguments of unexpected types), the emitter automatically reports an error and returns the MIR::FPoison value. Furthermore, all EmitXXX() functions are robust to receiving MIR::FPoison as input; they will simply propagate the poison value without attempting the operation.
| Name | FEmitter |
| Type | class |
| Header File | /Engine/Source/Runtime/Engine/Public/Materials/MaterialIREmitter.h |
| Include Path | #include "Materials/MaterialIREmitter.h" |
Syntax
class FEmitter
Constructors
| Name | Remarks | Include Path | Unreal Specifiers |
|---|---|---|---|
FEmitter() |
Materials/MaterialIREmitter.h |
Structs
| Name | Remarks |
|---|---|
| FPrivate | |
| FValueKeyFuncs |
Variables
Protected
| Name | Type | Remarks | Include Path | Unreal Specifiers |
|---|---|---|---|---|
| bCurrentExpressionHasErrors | bool | Whether the current expression has reported any error. | Materials/MaterialIREmitter.h | |
| BuilderImpl | FMaterialIRModuleBuilderImpl * | Pointer to the builder internal implementation. | Materials/MaterialIREmitter.h | |
| Expression | UMaterialExpression * | The current expression being built (set by the builder). | Materials/MaterialIREmitter.h | |
| FalseConstant | FValue * | Global "false" constant. | Materials/MaterialIREmitter.h | |
| FMaterialIRModuleBuilder | friend | Materials/MaterialIREmitter.h | ||
| FMaterialIRModuleBuilderImpl | friend | Materials/MaterialIREmitter.h | ||
| Material | UMaterial * | The material being translated. | Materials/MaterialIREmitter.h | |
| Module | FMaterialIRModule * | The IR module being built. | Materials/MaterialIREmitter.h | |
| StaticParameterSet | const FStaticParameterSet * | The set of static parameter assignments to use during this translation. | Materials/MaterialIREmitter.h | |
| TrueConstant | FValue * | Global "true" constant. | Materials/MaterialIREmitter.h | |
| ValueSet | TSet< FValue *, FValueKeyFuncs > | The set of all values previously emitted. | Materials/MaterialIREmitter.h |
Functions
Public
| Name | Remarks | Include Path | Unreal Specifiers |
|---|---|---|---|
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
FValueRef AnalyticalPartialDerivative
(
FValueRef Value, |
Computes and emits the analytical partial derivative of a give value. | Materials/MaterialIREmitter.h | |
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Emits a branch instruction. | Materials/MaterialIREmitter.h | ||
| Casts the given value to the specified target type. Returns poison if the cast is invalid. | Materials/MaterialIREmitter.h | ||
FValueRef CastToBool
(
FValueRef Value, |
These functions cast the given value to the a primitive scalar or column vector type of given rows. | Materials/MaterialIREmitter.h | |
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
FValueRef CastToScalar
(
FValueRef Value |
Casts the given arithmetic value to a scalar. | Materials/MaterialIREmitter.h | |
| Materials/MaterialIREmitter.h | |||
| Validates that the value is of an arithmetic type (int or float). Reports error and returns poison otherwise. | Materials/MaterialIREmitter.h | ||
| Validates that the value is of a integral type. If not, reports an error and returns poison. | Materials/MaterialIREmitter.h | ||
| Validates that the value is of a primitive type. If not, reports an error and returns poison. | Materials/MaterialIREmitter.h | ||
| Validates that the value is a scalar. If not, reports error and returns poison. | Materials/MaterialIREmitter.h | ||
| Validates that the value is either a scalar or a vector. Reports error and returns poison otherwise. | Materials/MaterialIREmitter.h | ||
FValueRef CheckIsTexture
(
FValueRef Value |
Retrieves the texture value flowing into given input. | Materials/MaterialIREmitter.h | |
FValueRef CheckTypeIsKind
(
FValueRef Value, |
Retrieves the value from the given input of given type kind. | Materials/MaterialIREmitter.h | |
| Materials/MaterialIREmitter.h | |||
FValueRef ConstantBool
(
bool InX |
Returns the given constant boolean scalar. | Materials/MaterialIREmitter.h | |
FValueRef ConstantFalse() |
Returns the constant boolean scalar `false_. | Materials/MaterialIREmitter.h | |
FValueRef ConstantFloat
(
TFloat InX |
Returns the given constant float scalar. | Materials/MaterialIREmitter.h | |
FValueRef ConstantFloat2
(
UE::Math::TVector2< TFloat > InValue |
Emits a constant float 2D column vector and returns it. | Materials/MaterialIREmitter.h | |
FValueRef ConstantFloat3
(
UE::Math::TVector< TFloat > InValue |
Emits a constant float 3D column vector and returns it. | Materials/MaterialIREmitter.h | |
FValueRef ConstantFloat4
(
UE::Math::TVector4< TFloat > InValue |
Emits a constant float 4D column vector and returns it. | Materials/MaterialIREmitter.h | |
FValueRef ConstantFromShaderValue
(
const UE::Shader::FValue& InValue |
Converts the given UE::Shader::FValue to a MIR constant value and returns it. | Materials/MaterialIREmitter.h | |
FValueRef ConstantInt
(
TInteger InX |
Returns the given constant integer scalar. | Materials/MaterialIREmitter.h | |
FValueRef ConstantInt2
(
UE::Math::TIntVector2< TInteger > InValue |
Emits a constant integer 2D column vector and returns it. | Materials/MaterialIREmitter.h | |
FValueRef ConstantInt3
(
UE::Math::TIntVector3< TInteger > InValue |
Emits a constant integer 3D column vector and returns it. | Materials/MaterialIREmitter.h | |
FValueRef ConstantInt4
(
UE::Math::TIntVector4< TInteger > InValue |
Emits a constant integer 4D column vector and returns it. | Materials/MaterialIREmitter.h | |
FValueRef ConstantOne
(
EScalarKind Kind |
Emits a scalar constant value of given kind with value 1 and returns it. | Materials/MaterialIREmitter.h | |
FValueRef ConstantScalar
(
EScalarKind Kind, |
Casts the given float value to the given scalar kind and returns its value. | Materials/MaterialIREmitter.h | |
FValueRef ConstantTrue() |
Returns the constant boolean scalar `true_. | Materials/MaterialIREmitter.h | |
FValueRef ConstantZero
(
EScalarKind Kind |
Emits a scalar constant value of given kind with value 0 and returns it. | Materials/MaterialIREmitter.h | |
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
bool CurrentExpressionHasErrors () |
Returns whether the current expression generated an error. | Materials/MaterialIREmitter.h | |
FValueRef CustomPrimitiveData
(
uint32 PrimitiveDataIndex |
Emits a custom primitive data value with given index. | Materials/MaterialIREmitter.h | |
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Reports an error with given error message. | Materials/MaterialIREmitter.h | ||
void Error
(
FStringView Message |
Reports an error with given error message. | Materials/MaterialIREmitter.h | |
| Reports an error using printf-like format and arguments to format the error message. | Materials/MaterialIREmitter.h | ||
void Errorf
(
UE::Core::TCheckedFormatString< FString::FmtCharType, TArgs... > Format, |
Reports an error using printf-like format and arguments to format the error message. | Materials/MaterialIREmitter.h | |
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
FValueRef ExternalInput
(
EExternalInput Id |
Emits an external input value of given input Id and returns it. | Materials/MaterialIREmitter.h | |
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
const FType * GetCommonType
(
const FType* A, |
Gets the common type between A and B and reports an error if no such type exists. | Materials/MaterialIREmitter.h | |
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
FValueRef InlineHLSL
(
const FMaterialExternalCodeDeclaration* InExternalCodeDeclaration, |
Emit a new HLSL function inline within the material shader based on an external code declaration. | Materials/MaterialIREmitter.h | |
FValueRef InlineHLSL
(
const FType* Type, |
Emit a new HLSL function inline within the material shader. | Materials/MaterialIREmitter.h | |
FValueRef Input
(
const FExpressionInput* Input |
Retrieves the value flowing into given input. | Materials/MaterialIREmitter.h | |
FValueRef InputDefaultBool
(
const FExpressionInput* Input, |
If the input has no value flowing in (e.g., because the input is disconnected), these DefaultXXX() functions will emit a constant value, bind it to the input, and return it. | Materials/MaterialIREmitter.h | |
FValueRef InputDefaultFloat
(
const FExpressionInput* Input, |
Materials/MaterialIREmitter.h | ||
FValueRef InputDefaultFloat2
(
const FExpressionInput* Input, |
Materials/MaterialIREmitter.h | ||
FValueRef InputDefaultFloat3
(
const FExpressionInput* Input, |
Materials/MaterialIREmitter.h | ||
FValueRef InputDefaultFloat4
(
const FExpressionInput* Input, |
Materials/MaterialIREmitter.h | ||
FValueRef InputDefaultInt
(
const FExpressionInput* Input, |
Materials/MaterialIREmitter.h | ||
FValueRef InputDefaultInt2
(
const FExpressionInput* Input, |
Materials/MaterialIREmitter.h | ||
FValueRef InputDefaultInt3
(
const FExpressionInput* Input, |
Materials/MaterialIREmitter.h | ||
FValueRef InputDefaultInt4
(
const FExpressionInput* Input, |
Materials/MaterialIREmitter.h | ||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Emits a mathematical operation instruction with given operator and arguments. | Materials/MaterialIREmitter.h | ||
| Materials/MaterialIREmitter.h | |||
Flows given Value_ out of the expression output with given OutputIndex_. |
Materials/MaterialIREmitter.h | ||
FEmitter & Output
(
const FExpressionOutput* Output, |
Flows given Value_ out of given expression Output_. |
Materials/MaterialIREmitter.h | |
FValueRef Parameter
(
FName Name, |
Emits a material parameter value with given name, metadata and sampler type (if it is a texture) and returns it. | Materials/MaterialIREmitter.h | |
FValueRef PartialDerivative
(
FValueRef Value, |
Emits the partial derivative of given value. | Materials/MaterialIREmitter.h | |
FValueRef Poison() |
Emits the poison value. | Materials/MaterialIREmitter.h | |
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
FSetMaterialOutput * SetMaterialOutput
(
EMaterialProperty InProperty, |
Emits an instruction that sets the material attribute with given property to given argument. | Materials/MaterialIREmitter.h | |
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
| Materials/MaterialIREmitter.h | |||
FValueRef StageSwitch
(
const FType* Type, |
Emits a stage switch instruction. | Materials/MaterialIREmitter.h | |
| Extracts the component with given index from the given argument value. | Materials/MaterialIREmitter.h | ||
| Materials/MaterialIREmitter.h | |||
FValueRef Swizzle
(
FValueRef Value, |
Swizzles the given argument by given mask. | Materials/MaterialIREmitter.h | |
| Materials/MaterialIREmitter.h | |||
FValueRef TextureGather
(
FValueRef Texture, |
Emits a texture gather instruction. | Materials/MaterialIREmitter.h | |
FValueRef TextureObject
(
UTexture* Texture, |
Emits a texture object value of fiven sampler type and returns it. | Materials/MaterialIREmitter.h | |
FValueRef TextureSample
(
FValueRef Texture, |
Emits a texture sample instruction. | Materials/MaterialIREmitter.h | |
FValueRef TextureSampleBias
(
FValueRef Texture, |
Emits a texture sample instruction with bias added to the automatically selected mip level. | Materials/MaterialIREmitter.h | |
FValueRef TextureSampleGrad
(
FValueRef Texture, |
Emits a texture sample instruction using user provided partial derivatives. | Materials/MaterialIREmitter.h | |
FValueRef TextureSampleLevel
(
FValueRef Texture, |
Emits a texture sample instruction with a manually given mip level. | Materials/MaterialIREmitter.h | |
bool ToConstantBool
(
FValueRef Value |
Casts the value flowing into this input to a constant boolean and returns it. | Materials/MaterialIREmitter.h | |
| Materials/MaterialIREmitter.h | |||
const FType * TryGetCommonType
(
const FType* A, |
Tries to find a common type between A and B. | Materials/MaterialIREmitter.h | |
FValueRef TryInput
(
const FExpressionInput* Input |
Retrieves the value from the given input, if present. | Materials/MaterialIREmitter.h | |
| Emits a 2D column vector dimensional value and returns it. | Materials/MaterialIREmitter.h | ||
| Emits a 3D column vector dimensional value and returns it. | Materials/MaterialIREmitter.h | ||
| Emits a 4D column vector dimensional value and returns it. | Materials/MaterialIREmitter.h |