DSH3xxx —— 分节与声明
DSH3xxx —— 分节与声明
DSH3xxx —— 分节与声明
生成标记之间的块由
.skill/gen-diagnostics.ps1写入。 标记下方的所有内容均为手写,并在重新生成后保留。
DSH3200
严重性 错误
消息
Unexpected {0} at file scope; expected a declaration, '#pragma', '#include' or 'import'.引发者 Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:1401
原因。 解析器在文件作用域遇到了一个无法作为任何内容开头的标记:一个游离的 )、}、
运算符、数字或字符串,位于任何声明之外。常见来源是函数之后多出的一个右花括号、
写在文件作用域中的语句(x = 1; 前面需要一个类型),或
一个丢失了关键字的 1.x 块。
修复。 删除游离的标记,或将该行改为声明。恢复过程会跳到下一个
;、匹配的 } 或开始声明的行,因此其后的声明仍能解析;请先修复
第一个 DSH3200 并重新编译,然后再去处理后续的那些,它们通常是从更下方看到的
同一个错误。
DSH3201
严重性 错误
消息
Preprocessor directive '#{0}' reached the parser; only '#pragma' and '#include' belong here, and '#if' / '#define' lines must be resolved by the preprocessor first.引发者 Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:648
原因。 一行 #(而非 #pragma 或 #include(#if、#define、#endif、#error……))
到达了解析器。2.0 解析器期望的是预处理后的文本:#if 和 #define 会在解析之前
由 DreamShader 预处理器解析,且保留行数,因此在这里看到其中一个,说明
文本是原始解析的,或某个指令拼写错误(#pragam)。
修复。 在一次编译内部,这不可能发生;对于直接调用 ParseDreamShaderLang
的工具,请先运行预处理器。如果该指令是拼写错误,请更正它。在 /// @custom
主体内部,每一行 # 都会原样保留,永远不会到达此检查。
DSH3202
严重性 错误
消息
'#pragma' needs a name: material, instance, pipeline, layout, region or endregion.引发者 Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:668、Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:734
原因。 一行 #pragma 的形态不是解析器所读取的形态:
- 完全没有名称(仅有
#pragma,或#pragma (), #pragma material/#pragma layout的参数列表不是(Key = Value, ...)(缺少)、一个裸=、未终止的字符串、不是标识符、数字或 带引号字符串的值),#pragma material带有位置参数:材质设置是以键索引的,只有layout接受 前导的位置类型(#pragma layout(Node, ...))。
修复。 请写入 #pragma material(ShadingModel = Unlit, BlendMode = Additive)、
#pragma layout(Node, Var = UV, X = -1100, Y = -120)、#pragma region Title 或
#pragma endregion。行尾的 // 注释是可以的,会被剥离。未知的
pragma 名称(#pragma once)不是错误:它会连同其文本被保留为 EPragmaKind::Unknown,
并被编译器忽略。
DSH3203
严重性 错误
消息
'#include' needs a quoted path: #include "/Game/Shared/Common.dsh".引发者 Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:627、Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:824
原因。 #include 后面没有双引号中的 "path",或 import 后面没有
带引号的字符串。未加引号的路径(#include /Game/X.dsh)、只有一侧带引号的路径,
以及 HLSL 系统包含的写法 #include <path> 都是常见情况。尖括号
不被接受:DreamShader 没有系统包含目录,因此该写法毫无意义,
打印器也将不得不凭空编造一个。
修复。 给路径加引号:#include "/Game/Shared/Common.dsh" 或 import "Hash.dsh";。import
需要结尾的 ;;#include 则不能有。两种写法产生相同的
FIncludeDecl;只有 bImportSpelling 不同,因此打印器可以按原样将文件写回。
DSH3204
严重性 错误
消息
Expected a type name, found {0}.引发者 Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:415
原因。 期望一个类型名称,却发现了其他内容:uniform = 1;(缺少类型)、
前缀关键字吃掉了唯一标识符后的 float3 = ...、参数列表中的 out x,或
被用作类型的关键字(参数列表中的 struct)。
修复。 补上类型:uniform float Intensity = 1;。在 2.0 中,每个声明都是
[uniform|static|const|extern|export] Type Name,不存在无类型的 var。
DSH3205
严重性 错误
消息
Expected a name after 'struct', found {1}.引发者 Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:1137、Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:1300、Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:859、Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:894、Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:953
原因。 期望一个名称,而那里的标记不是标识符。会针对变量或函数(float ;)、结构体(struct {)、
字段或参数(float f(float) —— 即使未使用,参数也必须命名)的名称引发。
修复。 添上名称。即使某个参数不使用也需要一个名称;它正是 @param 以及
生成的材质函数输入引脚所用的名称。
DSH3206
严重性 错误
消息
Expected '`{' or ';' after the parameter list of '{0}', found {1}.引发者 Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:1227、Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:997
原因。 在函数的参数列表之后,解析器既未找到 {,也未找到 ;。通常是
) 与 { 之间有一个游离标记(float f() const {、float f() 5),或缺少一个 {。
修复。 让主体直接跟在参数列表之后,如果函数是 extern,则
让 ; 直接跟在之后。2.0 中,参数列表与主体之间没有限定符。
DSH3207
严重性 错误
消息
'{0}' is 'extern' and binds to an existing asset, so it cannot have a body; write a prototype ending in ';'.引发者 Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:1181
原因。 一个 extern 函数带有主体。extern 的意思是“将此名称绑定到现有的
材质函数资产”(通过 /// @asset 或库查找),因此主体将
无处安放。
修复。 要么去掉 extern 并保留主体(此时该函数将从源代码编译),要么
去掉主体并以 ; 结束原型。恢复期间主体会被整体跳过,因此
其后的声明仍能解析。
DSH3208
严重性 错误
消息
'{0}' has no body. Only an 'extern' prototype may end in ';'; a function you define needs '`{...`}'.引发者 Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:1218
原因。 一个不是 extern 的函数以 ; 而不是主体结尾。2.0 源文件
没有前向声明:辅助函数可以按任意顺序定义,并会按名称
跨文件及其包含进行解析。
修复。 给该函数提供主体,如果它指向现有资产,则将其标记为 extern。如果这个声明
原本是前向声明,请删除它;它并不需要。
DSH3210
严重性 错误
消息
A '.dsh' header cannot export '{0}'; only a '.dss' file produces assets.引发者 Source/DreamShaderLang/Private/Lang/LangParser.cpp:74
原因。 一个 .dsh 头文件包含了一个 export 函数。头文件会被包含进材质和
函数中,从不单独编译,因此其中的 export 没有可以成为的资产,
并且会被复制到每个包含者中。
修复。 移除 export(该函数将成为一个普通辅助函数,对所有包含该头文件的文件可见),或将其移入其专属的 .dss 文件中。每个导出的声明触发一次,来自 LangParser.cpp 中的模块循环;该声明保留在语法树中,以便工具仍能看到它。
DSH3211
严重性 错误
消息
Expected the end of the expression, found {0}.触发自 Source/DreamShaderLang/Private/Lang/LangParser.cpp:572
原因。 ParseDreamShaderLangExpression(测试、语言服务、#pragma 值)接收到的文本在一个完整表达式之后还有其他内容:a + b c、x = 1;(; 不是表达式的一部分)。
修复。 仅传入一个表达式。在编辑器中,这仅出现在 #pragma 参数本应是表达式却并非如此的情况下。
DSH3213
严重性 错误
消息
'{0}' cannot be combined with the keywords before it; a declaration is 'uniform', 'static const', 'static', 'const', 'extern' or 'export', not a mix.触发自 Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:1087、Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:1155、Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:1241
原因。 声明的前缀关键字不搭配,或与错误类型的声明搭配:
- 重复或冲突的前缀:
uniform static、const uniform、export extern、uniform uniform; - 函数上的存储类:
uniform float f()—uniform、static和const描述的是 变量; - 变量上的链接性:
export float x、extern float3 Dir—extern和export描述的是 函数。
修复。 使用一种可接受的形式:变量使用 uniform T x、static const T x、static T x、
const T x、T x;函数使用 T f()、export T f()、extern T f();。由多个材质共享的
常量是 static const;材质实例可编辑的值是
uniform。
DSH3214
严重性 错误
消息
Parameter '{0}' is 'out' and cannot have a default value; only inputs are optional.触发自 Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:972
原因。 一个 out 参数带有默认值:out float Alpha = 1.0。输出由函数写入,对调用方而言不可能是可选的,因此默认值没有意义。
修复。 移除默认值。如果调用方应能够不连接该引脚,请将参数改为 in 并以其他方式返回值,或者给调用方一个可传入的 uniform。inout
参数也不能有默认值。
DSH3215
严重性 错误
消息
Expected ']' to close the array dimension, found {1}.触发自 Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:453
原因。 数组维度以 [ 开始但未闭合:float Weights[4;、
float3 P[;。该维度必须是 [ 与 ] 之间的单个表达式。
修复。 闭合方括号。大小是表达式,可以引用 static const 值;
float x[](无大小)会被解析器接受,留给编译器拒绝或推断。
DSH3216
严重性 错误
消息
Expected ';' after the import path, found {1}.触发自 Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:1277、Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:1324、Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:838、Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:902、Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:911
原因。 某个声明缺少其 ;:在变量及其初始化器之后、在
import "x.dsh" 之后、在结构体字段之后、在结构体的闭合 } 之后,或在
uniform float a, b 中两个声明符之间。
修复。 添加 ;。解析器会告诉你它正在闭合什么(消息会说明“在声明之后”、“在导入路径之后”、“在字段之后”、“在结构体的闭合 '}' 之后”)。
最常见的形式是 struct X { ... } 之后缺少 ; —— HLSL 和 C 都需要它。
DSH3217
严重性 错误
消息
Expected '{' after the struct name, found {1}.触发自 Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:863
原因。 struct Name 之后未跟随 {。通常是前向声明(struct X;),2.0 不支持;或基类冒号(struct X : Y),它也不支持。
修复。 就地定义结构体:struct X { float a; };。类型在整个文件中按名称解析,
因此结构体可以在使用它的函数之后声明。
DSH3218
严重性 错误
消息
Expected ')' to close the parameter list, found {1}.触发自 Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:986
原因。 参数列表未以 ) 闭合。要么缺少 ),要么参数之间使用了 , 以外的分隔符(float a; float b),要么参数带有解析器不认识的限定符(const float a —— 2.0 参数只接受 in、out、inout)。
修复。 用逗号分隔参数并闭合列表。从参数中移除 const;在生成的图中输入
已是只读的。
DSH3219
严重性 警告
消息
'#pragma nogeneration' takes no arguments, and '{0}' was ignored: the file is still marked. Remove the line to have it built automatically again.触发自 Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:691
原因。 #pragma nogeneration (2.1.2 之后) 后面写有其他内容,例如 (false)。它不接受任何内容,且文件会保持标记状态:除了移除该行外无法关闭它。
修复。 单独写 #pragma nogeneration,或移除该行以让文件重新自动构建。
DSH3220
严重性 警告
消息
A '@' in a '///' line must be followed by a directive name; the text is kept as description.触发自 Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:577
原因。 (警告) 一行 /// 中,@ 位于指令位置(文本开头或空格之后)且未跟随指令名称:/// see @ the docs、/// @ desc Foo、
/// @123。该行会作为描述文本保留,因此不会丢失任何内容,但如果本意是指令则未被读取。
修复。 将指令写为 @name value,且 @ 后无空格:/// @desc Overall gain。
单词内部(user@host)的 @ 或其后跟空格的均视为纯文本,仅当它位于指令起始位置时才会发出警告。读取时指令键会转为小写,因此 @Desc
和 @desc 是同一个键。
DSH3221
严重性 警告
消息
This '///' block is not followed by a field and is ignored.触发自 Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:1352、Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:884
原因。 (警告) 一个 /// 块未附加到任何内容:它位于文件末尾且之后没有任何声明,或位于结构体主体末尾且之后没有任何字段。文档块属于其后的声明,因此后面没有内容的块会被丢弃。
修复。 将该块移到它所描述的声明之上;如果它只是注释,则改为 // 注释。位于 #pragma 或 #include 行之上的块会附加到该指令并保留,
因此写在第一个 #pragma 之上、形式为 /// 的文件头注释不会被孤立。
DSH3222
严重性 错误
消息
Expected a 2.0 declaration, found the 1.x declaration '{0}'; 1.x declarations belong in a .dsh header or in a .dsm or .dsf file.触发自 Source/DreamShaderLang/Private/Lang/LangParserDeclarations.cpp:1119
原因。 在 2.0 声明应开始的位置发现了 1.x 声明词——Function、GraphFunction、Namespace、VirtualFunction、
Shader、ShaderFunction、ShaderLayer、ShaderLayerBlend。2.0 前端不读取 1.x 块语法:由扩展选择前端,而
.dss 要求使用这一前端。
修复。 将 1.x 源保留在由 1.x 前端编译的 .dsm / .dsf / .dsh 文件中,或将
声明移植到 2.0:Function float Luma(in vec3 c) { ... } 变为
float Luma(float3 c) { ... },Shader(Name = "X") { ... } 变为 export void X(inout material m) { ... } with #pragma material(...) 以表示设置。消息会指出它看到的那个词;
恢复期间整个块被跳过,因此文件的其余部分仍会报告自身的错误。
DSH3250
严重性 错误
消息
Expected a property type and a name, found {0}.引发者 Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1042、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:719、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:731、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:773
原因。 Properties 节的某一行没有以类型和名称开头。每个属性均为
<Type> <Name> [= default] [ [metadata] ];。
修复。 检查上一行是否缺少 ;,并确认类型是单个词(float3、
Texture2D、ScalarParameter……)。
DSH3251
严重性 错误
消息
Expected a property type after 'const', found {0}.引发者 Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:674
原因。 const 后面没有跟随属性类型。
修复。 写入 const float K = 1.0; 或 const Texture2D Noise = Path(...);。
DSH3252
严重性 错误
消息
Expected a property type such as 'float', 'float4', 'Texture2D' or 'ScalarParameter', found '{0}'.引发者 Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:839
原因。 类型位置上的词不是 1.x 属性可以具有的类型:既不是 HLSL 值类型, 也不是纹理类型,也不是 1.x 按名称识别的某个参数节点类。
修复。 使用值类型(float …… float4、vec*)、纹理类型,或诸如
ScalarParameter、VectorParameter、TextureObjectParameter、StaticSwitchParameter 的参数类。1.x
属性类型匹配时忽略大小写,正如 1.x 所做的那样,因此出错的是这个词本身。
DSH3253
严重性 错误
消息
Expected a property type with a 2.0 spelling, found '{0}{1}', which has none; move this material to a .dss file and write the node with UE.Expression.引发者 Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:851
原因。 该属性是 1.x 可以声明而 2.0 没有对应声明的节点类,或 const
作用于一个不能作为常量的属性(参数节点)。两个前端构建同一个 AST,因此
属性需要一种 2.0 形式:uniform、static const,或在读取处展开的节点。
修复。 将其声明为普通值或参数;对于任何其他节点类,将材质迁移到
.dss 文件,并在使用处写入该节点,如 UE.<Class>(...)。
DSH3254
严重性 错误
消息
Expected a default value after '{0} =', found {1}.引发者 Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:753、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:869、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:911、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:935
原因。 某属性具有 =,且其后没有任何前端可读作默认值的内容。默认值可以是
数字、构造函数(float4(1, 0, 0, 1))、true / false、资源引用(Path(...)、
带引号的对象路径、内容浏览器引用),或内建属性的 UE.* 节点。
修复。 以上述形式之一书写默认值,或移除 =。
DSH3255
严重性 错误
消息
Expected ']' to close the metadata block, found {0}.引发者 Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:186、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:199、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:253、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:273
原因。 属性或参数之后的元数据块 [ ... ] 未闭合,或其中的某一项
不是 Key = value;。
修复。 用 ] 闭合块,并以 ; 结束每一项。
DSH3256
严重性 错误
消息
Expected the metadata key '{0}' once, found it again.引发者 Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:307
原因。 同一个 [ ... ] 块中某个元数据键被写了两次。
修复。 保留其中之一。
DSH3257
严重性 错误
消息
Expected 'Slider(min, max)' with two numbers, found '{0}'.引发者 Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:236、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:299
原因。 Slider 不具有带有两个数字的 Slider(min, max) 形式,或范围
给出了两次:Slider(...) 与同一元数据
块中的 SliderMin / SliderMax 风格边界同时出现。
修复。 只写一次范围,例如 Slider(0.0, 4.0)。
DSH3258
严重性 错误
消息
Expected 'SortPriority' to be a whole number, found '{0}'.引发者 Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1797、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:473
原因。 SortPriority(或其简写形式 Sort)不是整数。引擎
按整数对参数排序。
修复。 写入整数:SortPriority = 10;。
DSH3259
严重性 错误
消息
Expected ')' to close the arguments of 'UE.{0}', found {1}.引发者 Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:703、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:817
原因。 某内建属性(float3 Cam = UE.CameraPositionWS();)打开了其
UE.* 节点的参数列表且从未闭合,或将节点的参数作为默认值写在名称之后,
而不是写在括号内。
修复。 闭合 ),并将节点的参数写在其中:float2 UV = UE.TexCoord(Index = 1);。
DSH3260
严重性 错误
消息
Expected a name inside 'Group("...")', found an empty string.引发者 Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:635
原因。 Group("") { ... } 的名称为空。此类块的成员会将此名称作为其
参数组。
修复。 为该组指定名称,或删除该块并让属性保持未分组。
DSH3261
严重性 错误
消息
Expected a setting name such as 'BlendMode', found {0}.引发者 Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1110、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1135、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1147、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1161
原因。 Settings 节的某一行没有以设置名称开头。每项设置均为
<Name> = <value>;。
修复。 检查上一行是否缺少 ;。
DSH3262
严重性 警告
消息
The setting '{0}' is written twice; the later value wins, as it did in 1.x.引发者 Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1181
原因。 某项设置被写了两次。1.x 保留后出现的值,此前端也如此。
修复。 移除其中之一。
DSH3263
严重性 警告
消息
'{0}' is not a setting of '{1}'; 1.x ignored it and so does this front end.引发者 Source/DreamShaderLang/Private/Lang/LangLegacyParser.cpp:1199
原因。 该设置不属于块的类别所拥有的设置(ShaderFunction 中的材质设置、 拼写错误的函数设置)。1.x 会忽略它不认识的内容,因此源会像以往一样构建 ——只是没有该设置。
修复。 对照 Docs/settings 检查拼写,或删除该行。
DSH3264
严重性 警告
消息
'UserExposedCaption' has no 2.0 spelling and is not applied; its value is kept for migration.引发者 Source/DreamShaderLang/Private/Lang/LangLegacyParser.cpp:1187
原因。 UserExposedCaption 被设置在某个函数上。2.0 没有针对它的指令,编译器也不会写入它:新资源没有标题,而早期版本已设置过标题的资源会保留其原有标题。该值会保留在迁移记录中。
修复。 对构建而言无需处理。如果标题很重要,请在迁移后手动在资源上设置它。
DSH3265
严重性 警告
消息
Expected 'true' or 'false' for 'ExposeToLibrary', found '{0}'; 1.x ignored the setting and so does this front end.引发者 Source/DreamShaderLang/Private/Lang/LangLegacyParser.cpp:1173
原因。 ExposeToLibrary 既不是 true 也不是 false。1.x 会忽略此类的值,并将函数留在原处。
修复。 写入 ExposeToLibrary = true;。
DSH3266
严重性 错误
消息
Expected ';' after the output declaration '{0}', found {1}.引发者 Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1202、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1322、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1627
原因。 一个 Outputs 节不是前端所读取的内容:该节未以 { 开头,某个声明之后没有 ;,或者某行既不是输出声明、Base.<Attribute> = <source>;, nor Expression(...).Pin[<index>] = <source>;。
修复。 在每行末尾加上 ;,并使用三种形式之一。
DSH3267
严重性 错误
消息
Expected 'Pin[<index>] = <source>' for an Expression(...) output target, found {0}.引发者 Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1230、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1415、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1425、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1437、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1448、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1464、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1493、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1559
原因。 绑定到自定义输出节点的 Outputs 不是 Expression(Class = "...").Pin[<index>] = <source>; (or, in block form, Pin[<index>] = <source>;(位于花括号内)这一形式。
修复。 通过索引来命名引脚:Pin[0] = Color;。
DSH3268
严重性 错误
消息
Expected each pin of Expression(Class = "{0}") to be bound once, found Pin[{1}] bound again.引发者 Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1606
原因。 Expression(...) 输出目标的块形式对同一个引脚绑定了两次。
修复。 每个引脚只保留一个绑定。
DSH3269
严重性 错误
消息
Expected at least one 'Pin[<index>] = <source>;' in the Expression(...) block, found none.引发者 Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1549
原因。 Expression(...) 输出目标的块形式中没有任何引脚绑定,因此该节点将在没有任何连线的情况下构建。
修复。 至少添加一个 Pin[<index>] = <source>;。
DSH3270
严重性 错误
消息
Expected a source after 'Pin[{0}] =', found none.引发者 Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1246、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1302、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1367
原因。 Outputs 节中的 = 后面没有任何内容:Pin[<index>] =、Base.<Attribute> =,或输出声明的初始化器。
修复。 指定 Graph 的变量或常量作为源。
DSH3271
严重性 错误
消息
Expected a parameter type and name such as 'float Amount', found {0}.引发者 Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1659、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1694、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1730、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1756
原因。 函数的 Inputs 或 Outputs 节中的某行不是 [opt] <Type> <Name> [= default] [ [metadata] ];。
修复。 检查类型拼写以及上一行的 ;。
DSH3272
严重性 警告
消息
'opt' on the output '{0}' means nothing; 1.x ignored it and so does this front end.引发者 Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1770
原因。 opt 位于输出上。只有输入可以是可选的;1.x 会读取该词但不做任何处理。
修复。 将其移除。
DSH3273
严重性 警告
消息
A default on the output '{0}' means nothing; 1.x ignored it, so it is dropped.引发者 Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1778
原因。 输出带有默认值。输出是 Graph 所赋的值;1.x 会读取默认值并将其丢弃。
修复。 移除默认值,或在 Graph 中赋值。
DSH3274
严重性 错误
消息
Expected 'Node(...)' or 'Comment(...)' in the Layout section, found {0}.引发者 Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1838、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1863、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1884、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1894、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1906、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1922、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1938、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1957
原因。 Layout 节中包含的内容不是 Node(...) 和 Comment(...) 条目。
修复。 写入 Node(Var = "Name", X = 0, Y = 0); 或 Comment(Name = "Title", X = 0, Y = 0, W = 400, H = 200);。
DSH3275
严重性 错误
消息
Expected the argument '{0}' in '{1}(...)', found none.引发者 Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:1998、Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:2010
原因。 Node(...) 或 Comment(...) 条目缺少一个它不能缺少的参数——对于节点是 Var、
X、Y;对于注释是 Name、X、Y、W、H——或者某个位置或大小不是整数。
修复。 添加该参数;位置和大小是以图单位为单位的整数。
DSH3276
严重性 错误
消息
Expected 'Color' to be a vector literal such as '(0.1, 0.16, 0.22, 0.35)', found '{0}'.引发者 Source/DreamShaderLang/Private/Lang/LangLegacySections.cpp:2036
原因。 Comment(...) 的 Color 不是括号中的四个数字。
修复。 写入 Color = (0.1, 0.16, 0.22, 0.35)——红、绿、蓝、alpha。
DSH3277
严重性 警告
消息
The layer input '{0}' becomes the 'inout material' parameter named after the output '{1}', so the input pin changes its name.引发者 Source/DreamShaderLang/Private/Lang/LangLegacyParser.cpp:1252
原因。 1.x 图层为其 MaterialAttributes 输入和输出使用了不同的名称。2.0 图层有一个 inout material 参数,它同时是两个引脚,并采用输出的名称——因此图层资源的输入引脚被重命名。在主体内部,旧的输入名称仍读取传入的材质。
修复。 源码中无需更改。图层堆栈按位置连接图层的唯一输入,因此现有堆栈仍可正常工作;通过引脚名称连接函数调用的图需要重新连接一次。
DSH3278
严重性 错误
消息
Expected a MaterialAttributes output on '{0}', found none.引发者 Source/DreamShaderLang/Private/Lang/LangLegacyParser.cpp:1222
原因。 ShaderLayer 或 ShaderLayerBlend 没有类型为 MaterialAttributes 的输出。图层堆栈从图层或混合中恰好读取一个此类输出。
修复。 在 Outputs 中声明它:MaterialAttributes Result;。
DSH3300
严重性 错误
消息
Expected the buffer's name after 'buffer', found {1}.引发者 Source/DreamShaderLang/Private/Lang/LangParserPipeline.cpp:122
原因。 buffer 开始了 .dsp 的声明,但其后没有名称:名称缺失
(buffer : R8;)、被引号括起(buffer "Mask" : R8;),或者是该语言的关键字(buffer in : R8;)。
修复。 用普通标识符写入 buffer <Name> : <Format>;:buffer Mask : R8;。该名称是
通过绑定判定的依据(区分大小写)、r.DreamPass.Visualize <Pipeline>.<Buffer> 所采用的内容,并且
对于导出的缓冲区,它是其渲染目标名称的一部分,<Pipeline>_<Buffer>。
DSH3301
严重性 错误
消息
Expected ':' and a format after 'buffer {0}', found {1}.引发自 Source/DreamShaderLang/Private/Lang/LangParserPipeline.cpp:126
原因。 缓冲区的名称之后没有跟随 : 及其格式:格式缺失
(buffer Mask;)、: 为(buffer Mask R8;、buffer Mask = R8;)、参数列表出现在
格式之前(buffer Mask(Clear = 0) : R8;),或两个名称共用一个声明
(buffer Mask, Edge : R8;)。
修复。 单独声明每个缓冲区,格式在前,参数(如果有)在其后:
buffer Mask : R8(Clear = 0);
buffer Edge : R8;DSH3302
严重性 错误
消息
Expected a buffer format such as 'R8' or 'RGBA16F', found {1}.引发自 Source/DreamShaderLang/Private/Lang/LangParserPipeline.cpp:130
原因。 缓冲区名称之后的 : 没有跟随格式词:格式缺失
(buffer Mask : ;、buffer Mask : (Clear = 0);)或被引用(buffer Mask : "R8";)。此处任何名称
都可解析;不是格式的名称(RGBA16、rgba16f)是绑定器的 DSH7305。
修复。 写入格式时不加引号:R8、RG8、RGBA8、R16F、RG16F、RGBA16F、R32F、
RG32F、RGBA32F,或 Depth32 用于网格通道自身的深度。R32U 和 RG32U 是保留的:目前没有
通道读取或写入整数缓冲区(DSH7321),而一个 id 恰好能容纳 R32F 直至 16777216。
DSH3303
严重性 错误
消息
Expected the pass's name after 'pass', found {1}.引发自 Source/DreamShaderLang/Private/Lang/LangParserPipeline.cpp:226
原因。 pass 开始一个 .dsp 的声明,且其后没有名称:pass : mesh { ... }、
pass "DrawMask" : mesh { ... },或一个关键字出现在名称应处的位置。
修复。 使用普通标识符为通道命名:pass DrawMask : mesh { ... }。GPU 捕获和
Insights 将该通道显示为 <Pipeline>.<Pass>,因此在一条管线中每个名称只能使用一次(DSH4401)。
DSH3304
严重性 错误
消息
Expected ':' and a pass kind after 'pass {0}', found {1}.引发自 Source/DreamShaderLang/Private/Lang/LangParserPipeline.cpp:230
原因。 通道的名称之后没有跟随 : 及其种类:种类缺失
(pass Blur { ... })、: 为(pass Blur compute { ... }),或种类被写成了
参数(pass Blur(compute) { ... })。
修复。 在块之前写入 pass <Name> : <kind>:pass Blur : compute { ... }。种类有
fullscreen、compute、mesh、clear 和 copy。
DSH3305
严重性 错误
消息
Expected a pass kind: fullscreen, compute, mesh, clear or copy, found {1}.引发自 Source/DreamShaderLang/Private/Lang/LangParserPipeline.cpp:234
原因。 通道名称之后的 : 没有跟随种类:它缺失
(pass Blur : { ... })或被引用(pass Blur : "compute" { ... })。此处任何名称都可解析;不是
种类的名称(Compute、postprocess)是绑定器的 DSH7304。
修复。 写入种类时不加引号,使用小写:fullscreen(一个后处理材质,或一个
作为像素着色器运行的 .usf)、compute(一个 .usf 计算着色器)、mesh(选中的图元被再次
绘制)、clear 或 copy。
DSH3310
严重性 错误
消息
'buffer {0}' declares a buffer of a Custom Pass pipeline, which only a '.dsp' file holds; move it into the pipeline's '.dsp'.引发自 Source/DreamShaderLang/Private/Lang/LangParserPipeline.cpp:99
原因。 一个 .dss、.dsh 或 .dsi 声明了 buffer <Name> : ... 或 pass <Name> : ...(
消息随后显示 'pass ...' declares a pass)。缓冲区和通道属于自定义通道管线,
而 buffer 和 pass 是 .dsp 中的声明词;在其他任何地方它们都是普通名称,
而这段文本一直是语法错误——消息现在会指出它应属之处。一个仅仅
叫做 buffer 或 pass 的变量没有问题:是名称之后的 : 使其成为管线
声明。
修复。 将该声明移入管线的 .dsp。材质不声明它所
读取的缓冲区:全屏通道绘制时通过 UE.UserSceneTexture 读取它们,由通道的 read
行绑定,而任何其他材质通过
UE.DreamPassBuffer(Pipeline = "...", Buffer = "...") 读取导出的缓冲区。
DSH3311
严重性 错误
消息
'#pragma pipeline' configures a Custom Pass pipeline and belongs in a '.dsp' file of its own, and this line is in '{0}'; move it, with the pipeline's buffers and passes, into a '.dsp'.引发自 Source/DreamShaderLang/Private/Semantic/LangBinderPipeline.cpp:4818
原因。 #pragma pipeline(...) 出现在 .dss、.dsh 或 .dsi 中——消息会指出
文件名。自定义通道管线是一个独立的源文件:.dsp 持有该 pragma 以及
管线的参数、缓冲区和通道,并成为一个以该文件命名的 UDreamPassPipeline。
修复。 将该 pragma 及其配置的缓冲区和通道移入一个 .dsp;材质浏览器中的 New Source
提供三个管线模板供起步使用。通道所绘制的材质
保留在其 .dss 文件中,并带有其 #pragma material(...)。
DSH3312
严重性 错误
消息
An 'hlsl' block at file scope is the HLSL of a Custom Pass pipeline, which only a '.dsp' file holds, and '{0}' is not one; a pipeline cannot be included.引发自 Source/DreamShaderLang/Private/Semantic/LangBinderPipeline.cpp:4831、Source/DreamShaderLang/Private/Semantic/LangBinderPipeline.cpp:4855
原因。 一个 buffer 或 pass 声明,或一个文件级 hlsl 块,到达了 .dss 或
.dsh 的绑定器——即,一个 .dsp 被包含了。解析器仅在 .dsp 中进行这些声明(在其他地方该文本是
DSH3310),因此这里的唯一途径是某个宿主的包含解析器解析了一个 .dsp;编辑器与 dsc 的
解析器在此发生之前拒绝包含除 .dsh 或 .dss 之外的任何内容(DSH8295)。它会在 .dsp 中报告,每个缓冲区和通道一次,并指出正在编译的文件。
修复。 移除该包含。管线不通过包含来共享:材质通过
UE.DreamPassBuffer(一个导出的缓冲区)读取其结果,或通过绘制它的通道的 read 和 param
行读取。
DSH3313
严重性 错误
消息
'#pragma pipeline' is written a second time, and one '.dsp' is one pipeline; the line {0} already configures it.引发自 Source/DreamShaderLang/Private/Semantic/LangBinderPipeline.cpp:691
原因。 一个 .dsp 有第二个 #pragma pipeline(...)。第一个配置管线;
这一个被整体拒绝,其所有键都不会合并到第一个中。
修复。 将键合并到一个 pragma 中,如下所示
#pragma pipeline(Order = 100, Views = Game | Editor | SceneCapture)。应当各自独立运行的
两条管线是两个 .dsp 文件。
DSH3314
严重性 错误
消息
'#pragma material' configures a material, and a '.dsp' is configured by '#pragma pipeline(...)'; the material a pass draws with is a '.dss' of its own.引发自 Source/DreamShaderLang/Private/Semantic/LangBinderPipeline.cpp:708、Source/DreamShaderLang/Private/Semantic/LangBinderPipeline.cpp:741、Source/DreamShaderLang/Private/Semantic/LangBinderPipeline.cpp:751、Source/DreamShaderLang/Private/Semantic/LangBinderPipeline.cpp:761
原因。 一个 .dsp 持有只有材质源才能使用的声明。管线持有
#pragma pipeline、uniform、static const、buffer 和 pass 声明以及一个 hlsl 块;另外四种
种类属于此错误,各有一条消息:
#pragma material(...)-- 材质的设置,属于材质某个 pass 所绘制内容的.dss;- 位于
hlsl块之外的函数 -- HLSL pass 的代码是一个hlsl { }块或其.usf,材质的代码是其.dss,而param值则由管线的参数折叠而来; - 位于
hlsl块之外的struct; - 位于
hlsl块之外的#include或import--.dsp中的任何内容都无法使用它所声明的东西;#includeHLSL 所需的内容要放在该块内部。
修复。 把每一项移到它该在的位置:材质设置移到该材质 .dss 的 #pragma material(...) 中,函数移到 .dss 或 .dsh(图代码)中,或移到 hlsl 块或 pass 的 .usf 中(HLSL),struct 移到 .dsh 或 hlsl 块中;删除该 include,或将其移到 hlsl 块中。管线自身的设置就是
#pragma pipeline(...) 的键:Order、Injection、Views、Requires 和 Enabled。
DSH3315
严重程度 警告
消息
'#pragma {0}' boxes or places graph nodes, and a '.dsp' has no graph; the line was ignored.引发者 Source/DreamShaderLang/Private/Semantic/LangBinderPipeline.cpp:722
原因。 #pragma layout、#pragma region 或 #pragma endregion 位于 .dsp 中。在 .dss 中,这些内容会放置生成的节点并用注释将其框起;而管线不生成图,因此该行会被忽略,管线会当作它不存在一样进行构建。
修复。 将其删除。要对较长的 .dsp 中的声明进行分组,请使用 // 注释,它们能在
dsc fmt 和 Adopt 后保留;要对细节面板中的参数进行分组,请在 uniform 上使用 /// @group。
DSH3316
严重程度 错误
消息
'{0}' is a file-scope variable of a '.dsp', which is a 'uniform' (a parameter an activation may override) or a 'static const' (a compile-time value).引发者 Source/DreamShaderLang/Private/Semantic/LangBinderPipeline.cpp:826
原因。 .dsp 的文件作用域变量在声明时没有 uniform 或 static const:
float Radius = 2.0;、static float Scale = 0.5;。管线有两种值:参数 -- 激活项(体积、组件、项目设置、蓝图)可以覆盖它 -- 以及常量,常量在使用处折叠(普通的 const 会当作常量)。普通变量两者都不是。该声明会被丢弃,因此命名它的 param 或 Enabled 也会 DSH4404。
修复。 当激活项应当能够更改该值时写 uniform,当该值固定时写 static const:
/// @group Blur @slider 1 8
uniform float BlurRadius = 3.0;
static const float HalfRes = 0.5;DSH3317
严重程度 警告
消息
'@{0}' has no effect on {1} in a '.dsp'; remove it.引发者 Source/DreamShaderLang/Private/Semantic/LangBinderPipeline.cpp:793
原因。 位于 .dsp 声明上方的 /// 指令对管线没有意义。每种声明接受的内容:
| 上方为 | 指令 |
|---|---|
一个 uniform | @group、@desc、@slider、@sort;Texture2D 上的 @default |
一个 static const、一个 buffer、一个 pass | @desc |
#pragma pipeline | 无;其 /// 块用于记录该文件 |
在 uniform 或 static const 上,该警告针对 @name、@sampler、@static 和 @page,这些指令对材质或材质实例的参数有意义,也针对该语言未定义的键,.dss 会按引擎名称将其交给参数节点 -- 管线参数不是节点。该语言的其他指令若放错位置,在任何文件中都会 DSH7224。
修复。 移除该指令。/// 块中的纯文本永远不会被警告:在参数、缓冲区或 pass 上方,它就是描述,就如同 @desc 一样。