diff options
author | John Kessenich <johnkslang@users.noreply.github.com> | 2016-11-22 23:33:40 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-22 23:33:40 -0700 |
commit | d347794ed13d10ffacd03aac6c821f962712ea38 (patch) | |
tree | e0b9d307764f47935d89db2b9a729aba7c07b8fc | |
parent | fabe7d6a613782d49becaef86aa0161ed7d3c4d7 (diff) | |
parent | 75fd223f037d88e0b03f801a7dc5e6ed1a939172 (diff) | |
download | glslang-d347794ed13d10ffacd03aac6c821f962712ea38.tar.gz |
Merge pull request #597 from steve-lunarg/sample-keyword-fix
HLSL: allow "sample" as a valid identifier.
-rw-r--r-- | Test/baseResults/hlsl.identifier.sample.frag.out | 103 | ||||
-rw-r--r-- | Test/hlsl.identifier.sample.frag | 18 | ||||
-rw-r--r-- | gtests/Hlsl.FromFile.cpp | 1 | ||||
-rwxr-xr-x | hlsl/hlslGrammar.cpp | 13 |
4 files changed, 135 insertions, 0 deletions
diff --git a/Test/baseResults/hlsl.identifier.sample.frag.out b/Test/baseResults/hlsl.identifier.sample.frag.out new file mode 100644 index 00000000..8e740819 --- /dev/null +++ b/Test/baseResults/hlsl.identifier.sample.frag.out @@ -0,0 +1,103 @@ +hlsl.identifier.sample.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:9 Function Definition: sample(i1; (temp int) +0:9 Function Parameters: +0:9 'x' (in int) +0:? Sequence +0:9 Branch: Return with expression +0:9 'x' (in int) +0:12 Function Definition: main( (temp 4-component vector of float) +0:12 Function Parameters: +0:? Sequence +0:15 Sequence +0:15 move second child to first child (temp int) +0:15 'sample' (temp int) +0:15 Constant: +0:15 3 (const int) +0:17 Sequence +0:17 move second child to first child (temp 4-component vector of float) +0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float) +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:17 Branch: Return +0:? Linker Objects +0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:9 Function Definition: sample(i1; (temp int) +0:9 Function Parameters: +0:9 'x' (in int) +0:? Sequence +0:9 Branch: Return with expression +0:9 'x' (in int) +0:12 Function Definition: main( (temp 4-component vector of float) +0:12 Function Parameters: +0:? Sequence +0:15 Sequence +0:15 move second child to first child (temp int) +0:15 'sample' (temp int) +0:15 Constant: +0:15 3 (const int) +0:17 Sequence +0:17 move second child to first child (temp 4-component vector of float) +0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float) +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:17 Branch: Return +0:? Linker Objects +0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 24 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 20 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 10 "sample(i1;" + Name 9 "x" + Name 15 "sample" + Name 20 "@entryPointOutput" + Decorate 20(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 8: TypeFunction 6(int) 7(ptr) + 16: 6(int) Constant 3 + 17: TypeFloat 32 + 18: TypeVector 17(float) 4 + 19: TypePointer Output 18(fvec4) +20(@entryPointOutput): 19(ptr) Variable Output + 21: 17(float) Constant 0 + 22: 18(fvec4) ConstantComposite 21 21 21 21 + 4(main): 2 Function None 3 + 5: Label + 15(sample): 7(ptr) Variable Function + Store 15(sample) 16 + Store 20(@entryPointOutput) 22 + Return + FunctionEnd + 10(sample(i1;): 6(int) Function None 8 + 9(x): 7(ptr) FunctionParameter + 11: Label + 12: 6(int) Load 9(x) + ReturnValue 12 + FunctionEnd diff --git a/Test/hlsl.identifier.sample.frag b/Test/hlsl.identifier.sample.frag new file mode 100644 index 00000000..3281a9ac --- /dev/null +++ b/Test/hlsl.identifier.sample.frag @@ -0,0 +1,18 @@ + +struct MyStruct { + sample float a; + noperspective float b; + linear float c; + centroid float d; +}; + +int sample(int x) { return x; } // HLSL allows this as an identifier as well. + +float4 main() : SV_Target0 +{ + // HLSL allows this as an identifier as well. + // However, this is not true of other qualifier keywords such as "linear". + int sample = 3; + + return float4(0,0,0,0); +} diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp index 5487fb98..3b66109e 100644 --- a/gtests/Hlsl.FromFile.cpp +++ b/gtests/Hlsl.FromFile.cpp @@ -118,6 +118,7 @@ INSTANTIATE_TEST_CASE_P( {"hlsl.getdimensions.rw.dx10.frag", "main"}, {"hlsl.getdimensions.dx10.vert", "main"}, {"hlsl.getsampleposition.dx10.frag", "main"}, + {"hlsl.identifier.sample.frag", "main"}, {"hlsl.if.frag", "PixelShaderFunction"}, {"hlsl.inoutquals.frag", "main"}, {"hlsl.init.frag", "ShaderFunction"}, diff --git a/hlsl/hlslGrammar.cpp b/hlsl/hlslGrammar.cpp index e6f4b603..079a4690 100755 --- a/hlsl/hlslGrammar.cpp +++ b/hlsl/hlslGrammar.cpp @@ -85,6 +85,19 @@ bool HlslGrammar::acceptIdentifier(HlslToken& idToken) return true; } + // Even though "sample" is a keyword (for interpolation modifiers), it IS still accepted as + // an identifier. This appears to be a solitary exception: other interp modifier keywords such + // as "linear" or "centroid" NOT valid identifiers. This code special cases "sample", + // so e.g, "int sample;" is accepted. + if (peekTokenClass(EHTokSample)) { + idToken.string = NewPoolTString("sample"); + idToken.tokenClass = EHTokIdentifier; + idToken.symbol = nullptr; + idToken.loc = token.loc; + advanceToken(); + return true; + } + return false; } |