HLSL: Add better diagnostic when using in/out qualifiers in global scope (#2258)
This commit is contained in:
parent
b56e0e441b
commit
78a3c915a1
43
Test/baseResults/hlsl.inoutquals.negative.frag.out
Normal file
43
Test/baseResults/hlsl.inoutquals.negative.frag.out
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
hlsl.inoutquals.negative.frag
|
||||||
|
ERROR: 0:1: 'invalid1' : in/out qualifiers are only valid on parameters
|
||||||
|
ERROR: 0:2: 'invalid2' : in/out qualifiers are only valid on parameters
|
||||||
|
ERROR: 0:3: 'invalid3' : in/out qualifiers are only valid on parameters
|
||||||
|
ERROR: 0:4: 'invalid4' : in/out qualifiers are only valid on parameters
|
||||||
|
ERROR: 4 compilation errors. No code generated.
|
||||||
|
|
||||||
|
|
||||||
|
Shader version: 500
|
||||||
|
gl_FragCoord origin is upper left
|
||||||
|
ERROR: node is still EOpNull!
|
||||||
|
0:6 Function Definition: @main( ( temp void)
|
||||||
|
0:6 Function Parameters:
|
||||||
|
0:6 Function Definition: main( ( temp void)
|
||||||
|
0:6 Function Parameters:
|
||||||
|
0:? Sequence
|
||||||
|
0:6 Function Call: @main( ( temp void)
|
||||||
|
0:? Linker Objects
|
||||||
|
0:? 'invalid1' ( in float)
|
||||||
|
0:? 'invalid2' ( inout float)
|
||||||
|
0:? 'invalid3' ( inout float)
|
||||||
|
0:? 'invalid4' ( out float)
|
||||||
|
|
||||||
|
|
||||||
|
Linked fragment stage:
|
||||||
|
|
||||||
|
|
||||||
|
Shader version: 500
|
||||||
|
gl_FragCoord origin is upper left
|
||||||
|
ERROR: node is still EOpNull!
|
||||||
|
0:6 Function Definition: @main( ( temp void)
|
||||||
|
0:6 Function Parameters:
|
||||||
|
0:6 Function Definition: main( ( temp void)
|
||||||
|
0:6 Function Parameters:
|
||||||
|
0:? Sequence
|
||||||
|
0:6 Function Call: @main( ( temp void)
|
||||||
|
0:? Linker Objects
|
||||||
|
0:? 'invalid1' ( in float)
|
||||||
|
0:? 'invalid2' ( inout float)
|
||||||
|
0:? 'invalid3' ( inout float)
|
||||||
|
0:? 'invalid4' ( out float)
|
||||||
|
|
||||||
|
SPIR-V is not generated for failed compile or link
|
7
Test/hlsl.inoutquals.negative.frag
Normal file
7
Test/hlsl.inoutquals.negative.frag
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
in float invalid1;
|
||||||
|
in out float invalid2;
|
||||||
|
inout float invalid3;
|
||||||
|
out float invalid4;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
}
|
@ -239,6 +239,7 @@ INSTANTIATE_TEST_CASE_P(
|
|||||||
{"hlsl.implicitBool.frag", "main"},
|
{"hlsl.implicitBool.frag", "main"},
|
||||||
{"hlsl.inf.vert", "main"},
|
{"hlsl.inf.vert", "main"},
|
||||||
{"hlsl.inoutquals.frag", "main"},
|
{"hlsl.inoutquals.frag", "main"},
|
||||||
|
{"hlsl.inoutquals.negative.frag", "main"},
|
||||||
{"hlsl.init.frag", "ShaderFunction"},
|
{"hlsl.init.frag", "ShaderFunction"},
|
||||||
{"hlsl.init2.frag", "main"},
|
{"hlsl.init2.frag", "main"},
|
||||||
{"hlsl.isfinite.frag", "main"},
|
{"hlsl.isfinite.frag", "main"},
|
||||||
|
@ -382,6 +382,16 @@ bool HlslGrammar::acceptDeclaration(TIntermNode*& nodeList)
|
|||||||
if (forbidDeclarators)
|
if (forbidDeclarators)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
// Check if there are invalid in/out qualifiers
|
||||||
|
switch (declaredType.getQualifier().storage) {
|
||||||
|
case EvqIn:
|
||||||
|
case EvqOut:
|
||||||
|
case EvqInOut:
|
||||||
|
parseContext.error(token.loc, "in/out qualifiers are only valid on parameters", token.string->c_str(), "");
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
// declarator_list
|
// declarator_list
|
||||||
// : declarator
|
// : declarator
|
||||||
// : identifier
|
// : identifier
|
||||||
|
Loading…
x
Reference in New Issue
Block a user