DSH5xxx --- Builtins -- UE.*, math, Substrate
DSH5xxx --- Builtins -- UE.*, math, Substrate
DSH5xxx --- Builtins -- UE.*, math, Substrate
The block between the generated markers is written by
.skill/gen-diagnostics.ps1. Everything below a marker is written by hand and survives a regeneration.
DSH5200
Severity error
Message
A material has no '{0}' pin; did you mean '{1}'? Attribute names are case-sensitive.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:1076, Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:1087
Cause. m.<Name> names no material pin. The table comes from the engine, so the message can
suggest a spelling that differs only in case — the usual cause, since 1.x matched these
case-insensitively and 2.0 does not.
Fix. Use the exact spelling. EmissiveColor, BaseColor, Roughness, Normal,
WorldPositionOffset, FrontMaterial and the rest keep their engine names; the 1.x short forms
(Emissive, AO, WPO, PDO) are carried as aliases in the catalog.
DSH5201
Severity error
Message
This Custom node declares no output called '{0}'; its outputs are '{1}'. An output is declared by 'AdditionalOutputs'.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:1169, Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:1223, Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:1429, Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:1832
Cause. Three shapes, one code — all say "this node's outputs need naming". The message lists the outputs the class has.
.Nameon a multi-output node names no output of that class.- A multi-output node was used as a value without naming an output, and it is not the value the
place wants. A node takes its default (first) output where that output's type is exactly the
type wanted. A node whose outputs are all channel views of one value —
UE.VertexColor()'sRGB,R,G,B,A, all cut from onefloat4— also stands for that whole value where exactly its type is wanted, sofloat4 VC = UE.VertexColor();binds as it did in 1.x (when the default output leads the value, asRGBdoes). A node whose outputs are different values —UE.SceneTexture(...)'sColor,Size,InvSize— has no whole to stand for: anything but its default output's exact type has to name an output. - A swizzle on a node of channel views asked for channels that sit on different outputs
(
UE.VertexColor().ga:GandAare separate pins). A swizzle that one view publishes exactly is that view (.aisA), and a swizzle inside the default output is a swizzle of it (.rg); across views there is no one pin to read.
Fix. Name one of the listed outputs — UE.SceneTexture(SceneTextureId = PostProcessInput0).Color,
UE.VertexColor().A — or read the channels one output at a time and combine them
(float2(UE.VertexColor().g, UE.VertexColor().a); two identical calls are one node).
dsc export-catalog writes out every class with its pins and its outputs; an unnamed masked output
is listed under the channels it keeps.
DSH5202
Severity warning
Message
The builtin catalog is empty, so no 'UE.' expression and no material attribute can be resolved; export it with 'dsc export-catalog'.Raised by Source/DreamShaderLang/Private/Semantic/LangBinder.cpp:287
Cause. The binder was given an empty builtin catalog, so no UE. node and no material pin can
be resolved and everything that names one will also report. This is normal for a tool running
outside the editor; inside a compile it means the catalog was not loaded.
Fix. Export the catalog with dsc export-catalog and point the tool at it. Nothing else in the
file is affected — the symbol index is still produced.
DSH5210
Severity error
Message
'{0}.{1}' is not a node; did you mean '{0}.{2}'? Node names are case-sensitive.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:4270, Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:4282
Cause. UE.X / Substrate.X names no class this engine has. Node names are case-sensitive;
a case-only match is suggested.
Fix. Correct the spelling, or reach the class by its engine name with
UE.Expression(Class = "MaterialExpressionX"). Substrate. only resolves the Substrate table.
DSH5211
Severity error
Message
'{0}.{1}' is a node and has to be called: write '{0}.{1}(...)'.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:1019
Cause. UE.X was written without an argument list. A node is made by calling it, even when it
takes nothing.
Fix. Add the parentheses: UE.Time().
DSH5212
Severity error
Message
'{0}' is not a material expression class this engine has.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:4204
Cause. The Class argument does not name a material expression class. The class name is
accepted with or without its MaterialExpression prefix and as a full /Script/Engine.… path.
Fix. Check the spelling against the exported catalog.
DSH5213
Severity error
Message
'{0}.{1}' has no pin or property called '{2}'.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:4708
Cause. A named argument to a reflected node matches neither an input pin nor a reflected property of that class. Pins are tried first, then properties; a case-only match on either is suggested.
Fix. Correct the name. A literal that should be written into the node rather than connected to
it usually has a Const-prefixed property name — ConstA beside the A pin.
DSH5214
Severity error
Message
{0} expects {1}, and this is {2}.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:1939
Cause. A value does not fit the pin it feeds: the wrong width, or a kind the pin does not take (a number into a MaterialAttributes pin, a texture into a numeric one). Also raised for the coordinates and the mip level of a texture sample.
Fix. Match the pin's type — the message names it. A pin that does not constrain its width takes whatever arrives.
DSH5215
Severity error
Message
'{0}' is not a value of '{1}' on '{2}'.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:4066
Cause. The value of an enumerated property is not one of that enum's values. A case-only match is suggested.
Fix. Use one of the listed spellings, written without the enum's prefix
(SamplerType = Normal, not SAMPLERTYPE_Normal).
DSH5216
Severity error
Message
'Substrate.' already names the node, so it takes no 'Class' argument.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:4176
Cause. A Class argument was given to a Substrate. call. The Substrate. prefix already
names the class.
Fix. Drop the Class argument, or write the call as UE.Expression(Class = "…") instead.
DSH5217
Severity error
Message
'Class' takes the expression class as a quoted string.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:4184
Cause. The Class argument is not a literal the binder can read. It accepts a quoted string, a
bare identifier and a dotted name.
Fix. Write Class = "MaterialExpressionConstant3Vector".
DSH5218
Severity error
Message
'UE.Expression' reaches a node this language has no name for, so it needs 'Class = "MaterialExpressionName"'.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:4217
Cause. UE.Expression(...) without Class. Expression is the escape hatch for a node the
language has no name for, so the class is the one thing it cannot infer.
Fix. Add Class = "MaterialExpressionName", or call the node by its short name.
DSH5219
Severity warning
Message
'{0}.{1}' leaves its required '{2}' pin unconnected; unless the node reads a default for it, the engine reports it when the material compiles.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:4777, Source/DreamShaderLang/Private/Semantic/LangBinderSubstrate.cpp:416
Cause. A pin the engine draws as required was left unconnected, and its literal twin was not set
either. It is a warning, not an error: required only means the property has no RequiredInput = "false". Most nodes do fail to compile with such a pin open, but some read a default instead
(MakeMaterialAttributes, the per-level inputs of a switch, nodes of an engine fork that never set
the metadata), and only the material compile knows. A class whose nodes show pins per setting has no
statically required pin at all.
Fix. Connect the pin, or set its Const... property to a literal. If the node is meant to run
with the pin open, nothing has to change; dsc check -Shaders compiles the material and reports a
real missing input.
DSH5220
Severity error
Message
'{0}.{1}' takes named arguments: write 'Pin = value'.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:4401
Cause. A positional argument was given to a node that has no canonical argument order. Most reflected classes are named-only — the pin order an engine class happens to have is not a contract.
Fix. Name the argument: Pin = value.
DSH5221
Severity error
Message
'{0}.{1}' takes {2} arguments in order; name the rest.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:4418
Cause. More positional arguments than the node's canonical order defines.
Fix. Name the remaining ones.
DSH5223
Severity error
Message
'{0}' is abstract and cannot be made into a node.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:4310
Cause. The class is abstract and cannot be instantiated.
Fix. Use one of its concrete subclasses.
DSH5224
Severity error
Message
'{0}' is an enumerated property; write one of its values, as in 'SamplerType = Normal'.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:4026, Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:4097, Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:4139
Cause. A literal property was given something that is not a literal: an expression the binder cannot fold, or a word where a number was wanted. A property is written into the node when the graph is built, so its value has to exist at that moment.
Fix. Write a literal, or a static const expression that folds to one. A value that has to be
computed belongs on a pin, not in a property.
DSH5230
Severity error
Message
The first argument of a texture sample is the texture, and this is {0}.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:5033
Cause. The first argument of Texture2DSample is not a texture.
Fix. Pass the texture — a uniform Texture2D, or a texture parameter of the function.
DSH5231
Severity error
Message
The second argument of 'Texture2DSample' is the sampler, and this is {0}.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:5049
Cause. The second argument of Texture2DSample is not a sampler.
Fix. Pass <TextureName>Sampler, the sampler the translator pairs with the texture, or use the
shorter Tex.Sample(UV), which takes it from the texture itself.
DSH5250
Severity error
Message
Expected 'OutputIndex' to be a whole number of zero or more, found '{0}'.Raised by Source/DreamShaderLang/Private/Lang/LangLegacyExpressions.cpp:1044
Cause. OutputIndex selects an output of a 1.x call by position, and its value is not a whole
number from 0 up.
Fix. Write OutputIndex = 1, or name the output: Output = "Alpha".
DSH5251
Severity error
Message
Expected 'Output' to name an output with a quoted name or an identifier, found '{0}'.Raised by Source/DreamShaderLang/Private/Lang/LangLegacyExpressions.cpp:1065
Cause. Output selects an output of a 1.x call by name, and its value is neither a quoted
string nor an identifier.
Fix. Write Output = "RGB".
DSH5252
Severity error
Message
Expected either 'Output' or 'OutputIndex' on this call, found both.Raised by Source/DreamShaderLang/Private/Lang/LangLegacyExpressions.cpp:1033
Cause. One 1.x call carries both Output and OutputIndex. They are two ways of choosing one
output.
Fix. Keep one of them.
DSH5253
Severity error
Message
Expected an output selector only on a call that has outputs, found one on the constructor '{0}'.Raised by Source/DreamShaderLang/Private/Lang/LangLegacyExpressions.cpp:1081
Cause. An output selector (Output / OutputIndex) stands on a constructor such as
float3(...), which has no outputs.
Fix. Remove the selector, or take the component with a swizzle.
DSH5254
Severity warning
Message
'{0}' takes no positional argument here; 1.x ignored it, so it is dropped.Raised by Source/DreamShaderLang/Private/Lang/LangLegacyExpressions.cpp:1096, Source/DreamShaderLang/Private/Lang/LangLegacyExpressions.cpp:1105
Cause. A 1.x call spelling was given an argument it does not read: a positional argument where the spelling takes named ones only, or a named argument that is none of its own. 1.x skipped both without a word, so the node was built without that value; the front end drops it too and says so.
Fix. Name the argument the way the spelling reads it (Pin = value), or delete it.
DSH5255
Severity error
Message
Expected 'UE.SceneTexture' to take exactly one argument, 'Id = ...', found {0} argument(s).Raised by Source/DreamShaderLang/Private/Lang/LangLegacyExpressions.cpp:1287
Cause. The 1.x shorthand UE.SceneTexture(Id = ...) takes its scene texture id and nothing
else.
Fix. Write UE.SceneTexture(Id = PPI_SceneColor); any other property of the node needs
UE.Expression(Class = "SceneTexture", ...).
DSH5256
Severity error
Message
Expected 'SampleTexture2D' to take exactly two positional arguments, a texture and coordinates, found {0} argument(s).Raised by Source/DreamShaderLang/Private/Lang/LangLegacyExpressions.cpp:1214
Cause. The 1.x shorthand SampleTexture2D(Texture, UV) takes exactly a texture and coordinates.
Fix. Pass both and nothing else; for a mip level or derivatives use UE.Expression(Class = "TextureSample", ...).
DSH5257
Severity error
Message
Expected 'UE.StaticSwitchParameter' to name its parameter with 'Name = "..."', found no name.Raised by Source/DreamShaderLang/Private/Lang/LangLegacyExpressions.cpp:1319
Cause. UE.StaticSwitchParameter(...) has no Name. The name is the parameter an instance
overrides, and what makes two calls the same switch.
Fix. Add Name = "Use Detail".
DSH5258
Severity error
Message
Expected the static switch '{0}' to be called with a 'True = ...' and a 'False = ...' input, found at most one of them.Raised by Source/DreamShaderLang/Private/Lang/LangLegacyExpressions.cpp:1157, Source/DreamShaderLang/Private/Lang/LangLegacyExpressions.cpp:1344
Cause. A static switch is called without both of its sides. The node chooses between its True
and False inputs; with one of them missing there is nothing to choose.
Fix. Pass True = ... and False = ....
DSH5259
Severity error
Message
Expected every argument of the parameter call '{0}' to name an input pin, found a positional argument.Raised by Source/DreamShaderLang/Private/Lang/LangLegacyExpressions.cpp:1185
Cause. A property that is a parameter node (a TextureSampleParameter2D, a
StaticSwitchParameter, ...) is called with a positional argument. Such a call is the node with its
pins wired, and pins go by name.
Fix. Name each argument: MyTex(Coordinates = uv).
DSH5260
Severity error
Message
Expected a name after '::', found {0}.Raised by Source/DreamShaderLang/Private/Lang/LangLegacyExpressions.cpp:560
Cause. Namespace:: is not followed by a function name.
Fix. Write N::F(...).
DSH5261
Severity error
Message
Expected 'OutputType' of a Custom expression to be float1 to float4 or MaterialAttributes, found '{0}'.Raised by Source/DreamShaderLang/Private/Lang/LangLegacyExpressions.cpp:1563
Cause. The OutputType of a UE.Expression(Class = "Custom", ...) call is not a type a Custom
node can return.
Fix. Use float1 .. float4 (or float .. float4), or MaterialAttributes.
DSH5263
Severity error
Message
Expected 'Default' of 'UE.StaticSwitchParameter' to be true or false, found '{0}'.Raised by Source/DreamShaderLang/Private/Lang/LangLegacyExpressions.cpp:1364
Cause. Default of a UE.StaticSwitchParameter(...) call is not true or false.
Fix. Write Default = true.
DSH5264
Severity error
Message
Expected 'SortPriority' of 'UE.StaticSwitchParameter' to be a whole number, found '{0}'.Raised by Source/DreamShaderLang/Private/Lang/LangLegacyExpressions.cpp:1378
Cause. SortPriority of a UE.StaticSwitchParameter(...) call is not a whole number.
Fix. Write an integer.
DSH5265
Severity error
Message
Expected the parameter call '{0}' to take only its inputs, found an output selector.Raised by Source/DreamShaderLang/Private/Lang/LangLegacyExpressions.cpp:1125
Cause. A call to a parameter-node property carries Output / OutputIndex. Such a call is
rewritten into the node with its pins wired, and the selector has nowhere to go.
Fix. Select the output after the call with a member: MyTex(Coordinates = uv).rgb.
DSH5275
Severity warning
Message
'{0}' matches '{1}' only in case; a 1.x source is read ignoring case, so this is '{1}', and a '.dss' needs the exact spelling.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderLegacy.cpp:83
Cause. Rule L19. A name in a 1.x source matches a declaration only when case is ignored. 1.x
compared most names ignoring case, so the source builds; a .dss is case-sensitive.
Fix. Spell the name the way it is declared. dsc migrate does this for every such name.
DSH5276
Severity warning
Message
'{0}' matches the engine name '{1}' only in case; 1.x matched engine names ignoring case, so this is '{1}', and a '.dss' needs the exact spelling.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderLegacy.cpp:95
Cause. Rule L19, for engine names: a UE. class, a pin, a property or an output matches only
when case is ignored. 1.x looked these up ignoring case.
Fix. Use the engine's spelling, which the message shows. dsc migrate writes it.
DSH5277
Severity warning
Message
'{0}' is the GLSL spelling of '{1}'; a 1.x source may use it and it is read as '{1}', and a '.dss' writes '{1}'.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:3020
Cause. Rule L2. A GLSL function or type spelling is used in a 1.x source (mix, fract, mod,
vec3). 1.x rewrote them; a .dss takes HLSL only.
Fix. Write the HLSL name the message gives. dsc migrate does.
DSH5278
Severity warning
Message
'{0}' is the 1.x name of the '{1}' space of '{2}'; a '.dss' writes '{1}'.Raised by Source/DreamShaderLang/Private/Lang/LangLegacyExpressions.cpp:1492, Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:4052
Cause. Rule L12. An enum value is written the engine's way (PPI_SceneColor,
TRANSFORM_Tangent, SAMPLERTYPE_Color) or with its Enum:: scope. 1.x matched enumerators
loosely -- prefix, scope and case aside -- and this front end resolves the same value; a .dss
takes the short form the catalog lists. The second message is a transform space by a name only 1.x
had (AbsoluteWorld, CameraRelativeWorld, FirstPerson, Particle, InstanceParticle), which
the front end writes as the engine's -- see Transform builtins.
Fix. Write the value as the message spells it.
DSH5279
Severity warning
Message
'{0}.{1}' leaves its required '{2}' pin unconnected, which 1.x allowed and the engine reports when the material compiles.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:4761, Source/DreamShaderLang/Private/Semantic/LangBinderSubstrate.cpp:403
Cause. Rule L13. A UE. node is built in a 1.x body with a pin open that the engine draws as
required. 1.x checked this only for a few of its hand-registered builtins (the Input of a transform
was one), and many such sources compile because the node reads a default. In a
.dss the same thing is DSH5219, also a warning.
Fix. Wire the pin if the material fails to compile with 'missing input'; otherwise nothing has to change.
DSH5280
Severity error
Message
'{0}' has no output to select, and this call selects '{1}'.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderLegacy.cpp:592
Cause. A 1.x call selects an output (Output = ..., OutputIndex = ..., or a receiver passed
last) on something that has none: a helper with no result, or a call that is no node and no
function.
Fix. Remove the selector, or call something that has the output.
DSH5281
Severity error
Message
An output is selected by a whole number the compiler knows, and this index is computed.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:1547, Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:1582
Cause. node[k] reads output k of a node, and k is not a constant the compiler can
evaluate. Which wire is connected cannot depend on a run-time value.
Fix. Use a literal index, or name the output.
DSH5282
Severity error
Message
This Custom node declares {0} output(s), counted from 0, and this selects output {1}.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:1593, Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:1613, Source/DreamShaderLang/Private/Semantic/LangBinderLegacy.cpp:611
Cause. An output index is past the outputs the node or function declares. Outputs count from 0; a Custom node has its return value at 0 and its additional outputs after it.
Fix. Use an index inside the range, or name the output.
DSH5283
Severity info
Message
'{0}' is not declared, and as in 1.x it is declared here as a local of type {1} receiving '{2}' of '{3}'.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderLegacy.cpp:652
Cause. Rule L5. A 1.x statement call passes a receiver (F(a, Out)) that is declared nowhere.
1.x declared it on the spot with the type of the output it receives, and the front end does the
same.
Fix. Nothing has to change. dsc migrate writes the declaration out.
DSH5284
Severity error
Message
'{0}' becomes an input of the custom node, which carries a number or a texture, and this argument is {1}.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:4601
Cause. An argument of a Custom node call is a value a Custom node input cannot carry: a
material, a Substrate value, a sampler. A Custom input takes a number or a texture.
Fix. Pass the components the code needs (m.BaseColor), not the whole material.
DSH5285
Severity error
Message
'{0}.{1}' has {2} input pin(s), counted from 0, and this argument connects pin {3}.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:4376
Cause. Pin[k] = value names an input pin by its engine index, and the class has fewer pins
than that.
Fix. Use an index the class has, or name the pin.
DSH5286
Severity error
Message
'Pin[{0}] = ...' connects a node's input pin by its engine index, and only a 'UE.' or 'Substrate.' node call has one; pass this argument by name or by position.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:2925
Cause. Pin[k] = value is used on a call that is no UE. / Substrate. node: a user function,
an intrinsic, a constructor. Only a reflected node has engine pin indices.
Fix. Pass the argument by name or by position.
DSH5287
Severity info
Message
'{0}' has more than one output and is read as its first, '{1}', which is what 1.x did; a '.dss' names the output.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:1814
Cause. Rule L3c. A node with several outputs is used as a value in a 1.x body without saying
which output. 1.x read the first one; so does this front end, and it says which that is. It does so
where the catalog gives that output no width, and wherever the node is passed straight to a pin
(UE.TransformPosition(UE.WorldPosition(), ...) takes XYZ), because 1.x connected it there as it
was and the pin took what it uses (2.0.0 – 2.1.0 refused the pin case with DSH5201).
Fix. Nothing has to change. A .dss names the output (UE.ScreenPosition().ViewportUV), and
dsc migrate writes it.
DSH5288
Severity warning
Message
'{0}.{1}' has no 'DefaultValue', so the default written for this parameter is dropped, as 1.x dropped it.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:4628
Cause. A 1.x property is a parameter node without a DefaultValue property (a collection
parameter, for one) and has a default written after =. 1.x dropped it.
Fix. Remove the default; set the value where the node takes it (the collection asset).
DSH5289
Severity info
Message
{0} expects {1}, and this is {2}: its leading components are taken, which is what 1.x did; a '.dss' writes the swizzle.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:1877
Cause. Rule L22. A value is wider than the place it goes -- a float4 parameter assigned to a
vec3 variable, passed as a float3 argument -- and 1.x cut it down to its leading components
without a word. Only a wider value into a narrower place: two operands of different widths are still
an error (DSH4226).
Fix. Nothing has to change. Writing the swizzle (Tint.rgb) says what is meant, and dsc migrate writes it.
DSH5290
Severity info
Message
The asset of this block and a function this file can call are both named '{0}', which 1.x kept apart; the block is declared as '{1}', and a '.dss' writes that name.Raised by Source/DreamShaderLang/Private/Semantic/LangBinder.cpp:866
Cause. Rule L23. A block builds an asset named like a function this file can call (a
ShaderFunction(Name = ".../MF_X") next to a Function MF_X). 1.x kept assets and functions in two
tables, so both existed; 2.0 has one name table, and the block's function is declared as
<Name>_Asset while the asset keeps its name.
Fix. Nothing has to change. The migrated file declares the export under the new identifier with
a /// @name for the asset.
DSH5291
Severity info
Message
'{0}.{1}' lists no pin called '{2}'; it is connected by that name once the node exists, because a node may name its pins after its properties.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:4657
Cause. Rule L24. A named argument is not a pin or property the catalog lists for the class. The
catalog is read off each class's default object, and some nodes name their pins after a property
(MoonToonModifier shows other pins per modifier, TextureSample shows CoordinatesDX only under
MipValueMode = Derivative, a Landscape layer blend calls its pins Layer Grass / Height Rock after
its Layers). The pin is wired by that name on the node once it exists; if the node
shows no such pin, the build fails there (DSH8212). In a .dss this applies only to classes the
catalog flags as naming their pins per node; elsewhere an unknown name is DSH5213. In a .dss, such a
pin fixes no width either: a numeric output is as wide as the widest value on one, and a material
on one makes the output a material.
Fix. Nothing to do if the name is what the node shows. The pin's own property name (ChannelW)
always resolves and does not need the lookup.
DSH5292
Severity info
Message
'{0}' is not declared, and as in 1.x this assignment declares it, as a local of type {1}.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:2345
Cause. Rule L26. x = value; in a 1.x body assigns to a name declared nowhere. 1.x declared the
variable there, with the type of the value.
Fix. Nothing has to change; dsc migrate writes T x = value;. In a .dss an undeclared name
is an error.
DSH5293
Severity error
Message
A Substrate value has no compound assignment; write 'S = S + T' (Substrate.Add) or 'S = S * w' (Substrate.Weight).Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:2377, Source/DreamShaderLang/Private/Semantic/LangBinderSubstrate.cpp:274, Source/DreamShaderLang/Private/Semantic/LangBinderSubstrate.cpp:302
Cause. An operator that Substrate values do not have. They take A + B (Substrate.Add), A * w and w * A with a scalar (Substrate.Weight) and lerp(A, B, t) (Substrate.HorizontalMix),
and nothing else. Three messages: another operator (A - B, A * B, -A); a lerp whose first
two arguments are not both Substrate values or both numbers; a compound assignment (A += B), which
would make the declaration of A mean two nodes.
Fix. Write the node you mean: Substrate.Layer(Top, Base, Thickness) for layering, lerp for
mixing, and A = A + B; instead of A += B;.
DSH5294
Severity error
Message
'Substrate.{0}' is a node Unreal Engine has from {1} on; this engine does not have it.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:4242, Source/DreamShaderLang/Private/Semantic/LangBinderSubstrate.cpp:148, Source/DreamShaderLang/Private/Semantic/LangBinderSubstrate.cpp:161
Cause. A piece of Substrate sugar needs a node this engine does not have. Three messages: a
Substrate.X(...) call whose node exists from a later Unreal Engine version on (the message names
the version); an operator, a run-time branch or a virtual argument that stands for such a node; and
the same on an engine that has no Substrate nodes at all (before 5.4).
Fix. Build against an engine that has the node, or write what the sugar stands for with the
nodes this engine has -- for a run-time branch, a /// @static condition or a lerp. Guard the
code with #if DS_ENGINE_MINOR >= ... when one source has to build on both.
DSH5295
Severity error
Message
'{0}.{1}': '{2}' and '{3}' parameterize the same pins; give one of them.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderSubstrate.cpp:600, Source/DreamShaderLang/Private/Semantic/LangBinderSubstrate.cpp:631, Source/DreamShaderLang/Private/Semantic/LangBinderSubstrate.cpp:825
Cause. Two arguments parameterize the same pins. BaseColor / Metallic / Specular become
DiffuseAlbedo and F0 through a conversion node, so giving DiffuseAlbedo or F0 as well leaves
two values for one pin; IOR computes F0, so it conflicts with F0 and with the metalness
arguments; Haziness becomes SecondRoughness and SecondRoughnessWeight; Transmittance becomes
SSSMFP. The same rule holds for a value built member by member, where the two writes are on
different lines.
Fix. Keep one parameterization: either the legacy one (BaseColor, Metallic, Specular) or
the pins (DiffuseAlbedo, F0).
DSH5296
Severity error
Message
'{0}.Thickness' is how deep 'Transmittance' is measured, and '{0}' was given no 'Transmittance' before this use.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderSubstrate.cpp:454, Source/DreamShaderLang/Private/Semantic/LangBinderSubstrate.cpp:464, Source/DreamShaderLang/Private/Semantic/LangBinderSubstrate.cpp:784, Source/DreamShaderLang/Private/Semantic/LangBinderSubstrate.cpp:840
Cause. A virtual argument came without the one it is measured against. Haziness converts the
BSDF's own Roughness into a second lobe, so it needs Roughness; Thickness is how deep
Transmittance is measured, so it needs Transmittance. For a value built member by member the
question is asked when the value is first used: the companion has to be written by then.
Fix. Give the companion -- Roughness with Haziness, Transmittance with Thickness -- in
the same call, or before the first use of the value.
DSH5297
Severity error
Message
'{0}' has been assigned a whole Substrate value since it was declared, and that value has no members; build a new value, or write the members before the assignment.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderSubstrate.cpp:506, Source/DreamShaderLang/Private/Semantic/LangBinderSubstrate.cpp:555
Cause. A member of a Substrate value is written after the value stopped being a builder. Two messages: the value has been used already (passed, assigned, returned, combined with another), which made its node, and a later write could not change that node; or the local has been assigned a whole Substrate value since it was declared, and a finished value has no members.
Fix. Write every member before the first use of the value. To vary a value after using it, build a second one.
DSH5298
Severity error
Message
A member of the Substrate value '{0}' cannot be written inside an 'if': that would be one node in two versions. Build two values and choose between them.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderSubstrate.cpp:569
Cause. A member of a Substrate value is written inside an if that the value's declaration is
outside of. The value is one node, and a pin connected on one path only would be that node in two
versions. (A builder declared inside the arm is that arm's own, and may be written there.)
Fix. Compute the pin's value with the branch and write it once -- S.Roughness = wet ? 0.1 : 0.8; -- or build two values and choose between them.
DSH5299
Severity error
Message
'{0}' builds a '{1}.{2}', which has no pin called '{3}'.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderSubstrate.cpp:536, Source/DreamShaderLang/Private/Semantic/LangBinderSubstrate.cpp:581, Source/DreamShaderLang/Private/Semantic/LangBinderSubstrate.cpp:649
Cause. A member access on a Substrate value being built does not work out. Three messages: the
node the value builds has no pin or virtual argument of that name; the member is read before
anything wrote it -- a member reads back what was written to it, and the node's own default is not a
value in the graph; the member is the left side of *=, +=, ++ and their kin before anything
wrote it.
Fix. Check the pin's name against the node (dsc export-catalog, or hover in the editor
extension), and assign a member before reading it.
DSH5300
Severity error
Message
'UE.{0}' needs {1}, and this engine's node catalog does not have it.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderExpressions.cpp:4256
Cause. UE.DreamPassOutput, UE.DreamPassBuffer or the engine's UE.UserSceneTexture is
called, and the node catalog this file is bound against does not have the class. The two Custom
Pass nodes are listed on Unreal Engine 5.8 and later only: below it their classes still exist, but
they compile to a material error, so the catalog leaves them out and the call is refused here rather
than built into a material that cannot compile. UE.UserSceneTexture came with 5.6. A catalog
exported with dsc export-catalog from such an engine gives the same answer.
Fix. Build with an engine that has the node. A source that has to build on an older engine as well guards the call:
#if DS_ENGINE_MAJOR > 5 || (DS_ENGINE_MAJOR == 5 && DS_ENGINE_MINOR >= 8)
UE.DreamPassOutput(Output0 = float4(1, 0, 0, 0));
#endifDSH5301
Severity error
Message
Material '{0}' asks for the new material translator ('bEnableNewHLSLGenerator = true'), and uses {1} (line {2}), which only the classic translator compiles; remove the setting.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderPassNodes.cpp:251
Cause. The material sets bEnableNewHLSLGenerator = true in its #pragma material, and its
graph holds a UE.DreamPassOutput or UE.DreamPassBuffer node, written in the entry or in a helper
the entry inlines. Neither node implements the new material translator, so the material would not
compile. The message stands on the setting and gives the line of the first node.
Fix. Remove bEnableNewHLSLGenerator from the #pragma material, or set it to false. A
material that needs the new translator cannot use the Custom Pass nodes.
DSH5302
Severity warning
Message
UE.DreamPassOutput does nothing in '{0}', a {1}: the engine compiles custom outputs from a material's own graph only, and only there does the node give the material its DreamPass shader tag. A material using '{0}' writes no pass outputs, and a mesh pass in 'Mode = Own' does not draw it; write UE.DreamPassOutput in the material itself.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderPassNodes.cpp:271
Cause. UE.DreamPassOutput is called in a material function, a material layer or a layer blend
(an exported function, or one marked @layer / @layerblend), directly or through a helper it
inlines. The engine compiles custom outputs from a material's own graph only, so in a function the
node writes nothing and does not give the calling material the DreamPass shader tag: a material that
has the node only there is not drawn by a mesh pass in Mode = Own, and has no outputs for a mesh
pass that names it as its Material (DSH7340). It is a warning because the function itself still
builds.
Fix. Write the node in the material: in its entry, or in a plain helper the entry calls, which is
inlined into the material's graph. Let the function return the values the outputs need, and pass
them to UE.DreamPassOutput there.
DSH5303
Severity error
Message
Material '{0}' gets a second UE.DreamPassOutput node here (the first is on line {1}), and a material compiles one custom output of a class; write all four outputs in one call. A call inside a loop, or in a helper called twice, makes more than one node.Raised by Source/DreamShaderLang/Private/Semantic/LangBinderPassNodes.cpp:235
Cause. One material's graph would get two UE.DreamPassOutput nodes, and a material compiles one
custom output of a class -- the engine would fail it. Two calls make two nodes. So does one call
inside a loop, which unrolls into more than one, and one call in a helper the material calls twice
(or from a loop), because a helper is inlined at every call. The message stands at the second node
and gives the line of the first.
Fix. Compute the values first, then write the node once, with every output it fills:
float4 Mask = ...;
float Id = ...;
UE.DreamPassOutput(Output0 = Mask, Output1 = Id);DSH5315
Severity error
Message
UE.DreamPassBuffer names no Pipeline: write the name of the '.dsp' (Pipeline = "CP_Highlight") or the pipeline asset's path.Raised by Source/DreamShaderCompiler/Private/Pipeline/DreamShaderPipelineReferences.cpp:847, Source/DreamShaderCompiler/Private/Pipeline/DreamShaderPipelineReferences.cpp:868
Cause. UE.DreamPassBuffer does not say which pipeline it reads. Two messages: the call has no
Pipeline argument, or an empty one; or Pipeline is written as a path -- /Game/..., Path(...),
a pasted Class'/Game/...' reference -- that does not resolve to an object path, and the message
quotes why (a malformed Path(...), a pasted reference of another class than a pipeline).
Fix. Name the pipeline by the name of the .dsp that builds it, or by the pipeline asset's path:
float Glow = UE.DreamPassBuffer(Pipeline = "CP_Highlight", Buffer = "Blurred").r;DSH5316
Severity error
Message
No pipeline named '{0}' is built by a .dsp under '{1}'; write the pipeline asset's path, or check the name.Raised by Source/DreamShaderCompiler/Private/Pipeline/DreamShaderPipelineReferences.cpp:877
Cause. Pipeline is a bare name, and no .dsp under the source root of this .dss builds a
pipeline of that name. A bare name is looked up the way a .dsi's Parent is: among the products of
the same source root. A pipeline is named after its .dsp file.
Fix. Check the name against the .dsp's file name. A pipeline under another source root, or one
no .dsp builds, is named by its asset path: Pipeline = "/Game/Passes/CP_Highlight".
DSH5317
Severity error
Message
'{0}' names more than one pipeline under this source root ({1}); write the pipeline asset's path instead.Raised by Source/DreamShaderCompiler/Private/Pipeline/DreamShaderPipelineReferences.cpp:885
Cause. Pipeline is a bare name, and more than one .dsp under this source root builds a
pipeline of that name -- two files of one name in different folders. The message lists them.
Fix. Write the asset path of the one you mean, or rename one of the files.
DSH5318
Severity error
Message
The pipeline '{0}' names nothing: no pipeline asset exists at '{1}', and no .dsp under the source roots builds it.Raised by Source/DreamShaderCompiler/Private/Pipeline/DreamShaderPipelineReferences.cpp:962
Cause. The reference resolved to an object path where no pipeline asset exists, and no .dsp
under the source roots builds the pipeline, so nothing can stand in for it. Usually the path names
nothing: a typo, or an asset that was moved or renamed. A pipeline that a .dsp builds is not this
error, even when the .dsp does not compile: a dsc check, which builds nothing, reads that .dsp
in place of the missing asset, and one that fails is DSH5319, with its first error.
Fix. Correct the path, or name the pipeline by its .dsp's bare name.
DSH5319
Severity error
Message
The pipeline '{0}' comes from '{1}', which failed to compile, so the buffer this material reads cannot be checked. {2}Raised by Source/DreamShaderCompiler/Private/Pipeline/DreamShaderPipelineReferences.cpp:510, Source/DreamShaderCompiler/Private/Pipeline/DreamShaderPipelineReferences.cpp:951
Cause. The pipeline comes from a .dsp that does not compile, so the buffer this material reads
cannot be checked. Two messages, one per kind of run:
- a run that builds assets found the pipeline asset missing or older than its
.dsp, built the.dspfirst (DSH5320 says so), and that compile failed (... which failed to compile ...); - a run that builds nothing -- a
dsc check-- found no pipeline asset and read the.dspin its place, and the.dspdoes not compile (... which does not compile ...).
The message ends with the .dsp's first error. When that error is DSH8333, the pipeline and this
material need each other: the cycle DSH5325 describes, met from the material's side.
Fix. Fix the .dsp -- compile it on its own to see all its diagnostics -- then compile the
material again. For DSH8333, change the read as DSH5325 says.
DSH5320
Severity info
Message
The pipeline '{0}' was missing or older than its source, so '{1}' was compiled first.Raised by Source/DreamShaderCompiler/Private/Pipeline/DreamShaderPipelineReferences.cpp:490
Cause. The pipeline this material reads was missing or older than its .dsp, so the compile
built the .dsp first, the way a .dsi's parent is built first. Only a run that builds assets does
this; a dsc check leaves the pipeline as it is. Said before that compile runs; DSH5319 follows if
it fails.
Fix. Nothing to fix.
DSH5321
Severity error
Message
(built at runtime)Raised by Source/DreamShaderCompiler/Private/Pipeline/DreamShaderPipelineReferences.cpp:1002, Source/DreamShaderCompiler/Private/Pipeline/DreamShaderPipelineReferences.cpp:986
Cause. The node's own rule refuses the buffer -- in the words the material editor would use. With the pipeline asset there, the message says which:
Buffernames a built-in texture (SceneColor,CustomDepth, ...), which lives in the frame's render graph only; nothing copies it out.- The pipeline has no buffer of that name.
- The buffer is not exported.
- The buffer is
Depth32or an integer format, which a material cannot sample. - The buffer is exported and the asset has no render target for it.
A built-in texture is this error from both paths: when the pipeline has not been built yet and its
.dsp is read in its place (a dsc check on a fresh checkout), it is refused before any buffer is
looked up, in the same words, so a check says what a build says. The .dsp path's other refusals
have codes of their own (DSH5322, DSH5323).
A dsc check reads the pipeline asset as it is on disk, so a buffer added or exported in the .dsp
since its last compile is not there yet.
Fix. Name a buffer the pipeline declares with Export = true, in a float or normalized format.
When the .dsp already says so, compile it -- that also makes a missing render target -- then the
material.
DSH5322
Severity error
Message
The pipeline '{0}' declares no buffer '{1}'.Raised by Source/DreamShaderCompiler/Private/Pipeline/DreamShaderPipelineReferences.cpp:1016, Source/DreamShaderCompiler/Private/Pipeline/DreamShaderPipelineReferences.cpp:1024
Cause. The pipeline has not been built yet, so its .dsp was read in its place (a dsc check on a
fresh checkout), and the buffer does not fit. Two messages: the .dsp declares no buffer of that
name -- compared ignoring case, as the built asset compares it -- or the buffer is not
Export = true. A built-in texture does not end here: it is refused first, as DSH5321, in the
node's own words.
Fix. Name a buffer the .dsp declares, and declare it with Export = true:
buffer Blurred : R8(Scale = 0.5, Export = true);DSH5323
Severity error
Message
Buffer '{1}' of the pipeline '{0}' is {2}, which a material cannot sample. Export a float or normalized buffer instead.Raised by Source/DreamShaderCompiler/Private/Pipeline/DreamShaderPipelineReferences.cpp:1032
Cause. The pipeline has not been built yet, its .dsp was read in its place, and the exported
buffer is Depth32, R32U or RG32U. A material declares the texture as a float Texture2D and
samples it with a filtering sampler, which none of these formats allows. This is a backstop: the
.dsp itself refuses such an export first (DSH7355, DSH7321), and a .dsp that does not compile is
not read here (DSH5319).
Fix. Export a float or normalized format -- R8, RG16F, R32F -- instead.
DSH5324
Severity error
Message
UE.DreamPassBuffer names no Buffer of '{0}': write the exported buffer's name (Buffer = "Blurred").Raised by Source/DreamShaderCompiler/Private/Pipeline/DreamShaderPipelineReferences.cpp:853
Cause. UE.DreamPassBuffer names its pipeline and no buffer of it: Buffer is missing, empty or
None.
Fix. Write the exported buffer's name: Buffer = "Blurred".
DSH5325
Severity error
Message
The pipeline '{0}' needs this material to be built -- it is one of its pass materials, or the material of a pipeline that one needs -- so this material cannot read its exported buffer: the two can be built in no order. Inside its own pipeline a pass binds the buffer with 'read' -- a fullscreen material reads it as a UserSceneTexture input -- rather than the exported copy; a mesh pass's material cannot read its own pipeline's buffers.Raised by Source/DreamShaderCompiler/Private/Pipeline/DreamShaderPipelineReferences.cpp:907
Cause. This material reads, through UE.DreamPassBuffer, an exported buffer of a pipeline that
needs the material built: the pipeline draws it as one of its pass materials, or one of its pass
materials reads a pipeline that draws it. The two can be built in no order -- compiled first, the
material has no pipeline asset to read; compiled second, the pipeline has no material to draw
(DSH4406) -- so the pair can never bootstrap, and the read is refused. It is raised when the
material is compiled or read from inside the pipeline's compile, which builds a missing or stale
pass material first; the .dsp then reports its material as failing (DSH8331). Met from the
material's side, the same cycle is the .dsp's DSH8333, which the material reports as DSH5319.
Fix. Inside its own pipeline, read the buffer itself rather than its exported copy: bind it with
read in the pass that draws this material, and in the material sample it as a UE.UserSceneTexture
input of that name instead of calling UE.DreamPassBuffer:
// in the .dsp
pass Composite : fullscreen
{
...
read Blurred;
}
// in the material
float Halo = UE.UserSceneTexture(UserSceneTexture = "Blurred", Coordinates = UV).Color.r;A mesh pass's material cannot read its own pipeline's buffers at all: sample the buffer in a
fullscreen pass of the pipeline, or in a material the pipeline does not draw. When the loop runs
through another pipeline, break it at one of its UE.DreamPassBuffer reads the same way.
DSH5326
Severity error
Message
'{0}' is a {1}, not a DreamShader pass pipeline.Raised by Source/DreamShaderCompiler/Private/Pipeline/DreamShaderPipelineReferences.cpp:923
Cause. Pipeline names an asset that exists and is not a pass pipeline: a material, a texture --
often the render target an exported buffer becomes, CP_Highlight_Blurred, picked instead of the
pipeline CP_Highlight. The message names its class.
Fix. Point Pipeline at the pipeline asset, or at its .dsp's bare name, and name the buffer
with Buffer.