Add support for pre and post HLSL qualifier validation

The change makes it possible to define a const variable after the marked
type. Example "float const"
This commit is contained in:
Dawid Lorenz 2023-07-03 15:19:41 +02:00 committed by kd-11
parent 4218bbe746
commit 10da9c9550
6 changed files with 300 additions and 229 deletions

View File

@ -1,6 +1,6 @@
hlsl.function.frag
ERROR: 0:24: 'fun1' : unknown variable
ERROR: 0:24: 'return' : type does not match, or is not convertible to, the function's return type
ERROR: 0:29: 'fun1' : unknown variable
ERROR: 0:29: 'return' : type does not match, or is not convertible to, the function's return type
ERROR: 2 compilation errors. No code generated.
@ -16,45 +16,64 @@ ERROR: node is still EOpNull!
0:3 1.000000
0:3 1.000000
0:3 1.000000
0:7 Function Definition: fun2(vf4; ( temp uint)
0:7 Function Definition: fun2(vf4; ( temp 4-component vector of float)
0:7 Function Parameters:
0:7 'col' ( in 4-component vector of float)
0:7 'col' ( const (read only) 4-component vector of float)
0:? Sequence
0:8 Branch: Return with expression
0:8 Constant:
0:8 7 (const uint)
0:12 Function Definition: fun4(u1;u1; ( temp 4-component vector of float)
0:8 Construct vec4 ( temp 4-component vector of float)
0:8 Convert int to float ( temp float)
0:8 Comma ( temp int)
0:8 Comma ( temp int)
0:8 Comma ( temp int)
0:8 Constant:
0:8 1 (const int)
0:8 Constant:
0:8 2 (const int)
0:8 Constant:
0:8 3 (const int)
0:8 Constant:
0:8 4 (const int)
0:12 Function Definition: fun3(vf4; ( temp uint)
0:12 Function Parameters:
0:12 'id1' ( in uint)
0:12 'id2' ( uniform uint)
0:12 'col' ( const (read only) 4-component vector of float)
0:? Sequence
0:13 Branch: Return with expression
0:13 Construct vec4 ( temp 4-component vector of float)
0:13 Convert uint to float ( temp float)
0:13 component-wise multiply ( temp uint)
0:13 'id1' ( in uint)
0:13 'id2' ( uniform uint)
0:17 Function Definition: fun1(i1; ( temp 4-component vector of float)
0:13 Constant:
0:13 7 (const uint)
0:17 Function Definition: fun4(u1;u1; ( temp 4-component vector of float)
0:17 Function Parameters:
0:17 'index' ( in int)
0:17 'id1' ( in uint)
0:17 'id2' ( uniform uint)
0:? Sequence
0:18 Sequence
0:18 move second child to first child ( temp uint)
0:18 'entityId' ( temp uint)
0:18 Function Call: fun2(vf4; ( temp uint)
0:18 Function Call: fun0( ( temp 4-component vector of float)
0:19 Branch: Return with expression
0:19 Function Call: fun4(u1;u1; ( temp 4-component vector of float)
0:19 'entityId' ( temp uint)
0:19 'entityId' ( temp uint)
0:23 Function Definition: @main( ( temp int)
0:23 Function Parameters:
0:23 Function Definition: main( ( temp void)
0:23 Function Parameters:
0:18 Branch: Return with expression
0:18 Construct vec4 ( temp 4-component vector of float)
0:18 Convert uint to float ( temp float)
0:18 component-wise multiply ( temp uint)
0:18 'id1' ( in uint)
0:18 'id2' ( uniform uint)
0:22 Function Definition: fun1(i1; ( temp 4-component vector of float)
0:22 Function Parameters:
0:22 'index' ( in int)
0:? Sequence
0:23 move second child to first child ( temp int)
0:23 Sequence
0:23 move second child to first child ( temp uint)
0:23 'entityId' ( temp uint)
0:23 Function Call: fun3(vf4; ( temp uint)
0:23 Function Call: fun2(vf4; ( temp 4-component vector of float)
0:23 Function Call: fun0( ( temp 4-component vector of float)
0:24 Branch: Return with expression
0:24 Function Call: fun4(u1;u1; ( temp 4-component vector of float)
0:24 'entityId' ( temp uint)
0:24 'entityId' ( temp uint)
0:28 Function Definition: @main( ( temp int)
0:28 Function Parameters:
0:28 Function Definition: main( ( temp void)
0:28 Function Parameters:
0:? Sequence
0:28 move second child to first child ( temp int)
0:? '@entryPointOutput' (layout( location=0) out int)
0:23 Function Call: @main( ( temp int)
0:28 Function Call: @main( ( temp int)
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out int)
@ -74,45 +93,64 @@ ERROR: node is still EOpNull!
0:3 1.000000
0:3 1.000000
0:3 1.000000
0:7 Function Definition: fun2(vf4; ( temp uint)
0:7 Function Definition: fun2(vf4; ( temp 4-component vector of float)
0:7 Function Parameters:
0:7 'col' ( in 4-component vector of float)
0:7 'col' ( const (read only) 4-component vector of float)
0:? Sequence
0:8 Branch: Return with expression
0:8 Constant:
0:8 7 (const uint)
0:12 Function Definition: fun4(u1;u1; ( temp 4-component vector of float)
0:8 Construct vec4 ( temp 4-component vector of float)
0:8 Convert int to float ( temp float)
0:8 Comma ( temp int)
0:8 Comma ( temp int)
0:8 Comma ( temp int)
0:8 Constant:
0:8 1 (const int)
0:8 Constant:
0:8 2 (const int)
0:8 Constant:
0:8 3 (const int)
0:8 Constant:
0:8 4 (const int)
0:12 Function Definition: fun3(vf4; ( temp uint)
0:12 Function Parameters:
0:12 'id1' ( in uint)
0:12 'id2' ( uniform uint)
0:12 'col' ( const (read only) 4-component vector of float)
0:? Sequence
0:13 Branch: Return with expression
0:13 Construct vec4 ( temp 4-component vector of float)
0:13 Convert uint to float ( temp float)
0:13 component-wise multiply ( temp uint)
0:13 'id1' ( in uint)
0:13 'id2' ( uniform uint)
0:17 Function Definition: fun1(i1; ( temp 4-component vector of float)
0:13 Constant:
0:13 7 (const uint)
0:17 Function Definition: fun4(u1;u1; ( temp 4-component vector of float)
0:17 Function Parameters:
0:17 'index' ( in int)
0:17 'id1' ( in uint)
0:17 'id2' ( uniform uint)
0:? Sequence
0:18 Sequence
0:18 move second child to first child ( temp uint)
0:18 'entityId' ( temp uint)
0:18 Function Call: fun2(vf4; ( temp uint)
0:18 Function Call: fun0( ( temp 4-component vector of float)
0:19 Branch: Return with expression
0:19 Function Call: fun4(u1;u1; ( temp 4-component vector of float)
0:19 'entityId' ( temp uint)
0:19 'entityId' ( temp uint)
0:23 Function Definition: @main( ( temp int)
0:23 Function Parameters:
0:23 Function Definition: main( ( temp void)
0:23 Function Parameters:
0:18 Branch: Return with expression
0:18 Construct vec4 ( temp 4-component vector of float)
0:18 Convert uint to float ( temp float)
0:18 component-wise multiply ( temp uint)
0:18 'id1' ( in uint)
0:18 'id2' ( uniform uint)
0:22 Function Definition: fun1(i1; ( temp 4-component vector of float)
0:22 Function Parameters:
0:22 'index' ( in int)
0:? Sequence
0:23 move second child to first child ( temp int)
0:23 Sequence
0:23 move second child to first child ( temp uint)
0:23 'entityId' ( temp uint)
0:23 Function Call: fun3(vf4; ( temp uint)
0:23 Function Call: fun2(vf4; ( temp 4-component vector of float)
0:23 Function Call: fun0( ( temp 4-component vector of float)
0:24 Branch: Return with expression
0:24 Function Call: fun4(u1;u1; ( temp 4-component vector of float)
0:24 'entityId' ( temp uint)
0:24 'entityId' ( temp uint)
0:28 Function Definition: @main( ( temp int)
0:28 Function Parameters:
0:28 Function Definition: main( ( temp void)
0:28 Function Parameters:
0:? Sequence
0:28 move second child to first child ( temp int)
0:? '@entryPointOutput' (layout( location=0) out int)
0:23 Function Call: @main( ( temp int)
0:28 Function Call: @main( ( temp int)
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out int)

View File

@ -31,29 +31,20 @@ gl_FragCoord origin is upper left
0:20 10.000000
0:22 Constant:
0:22 10.000000
0:25 Sequence
0:25 move second child to first child ( temp float)
0:25 'n' ( temp float)
0:25 Constant:
0:25 0.000000
0:26 Sequence
0:26 move second child to first child ( temp 8-element array of 3-component vector of float)
0:26 'a' ( const (read only) 8-element array of 3-component vector of float)
0:26 Construct vec3 ( temp 8-element array of 3-component vector of float)
0:27 vector-scale ( temp 3-component vector of float)
0:27 Constant:
0:27 0.577350
0:27 0.577350
0:27 0.577350
0:27 add second child into first child ( temp float)
0:27 'n' ( temp float)
0:27 Constant:
0:27 1.000000
0:26 move second child to first child ( temp float)
0:26 'n' ( temp float)
0:26 Constant:
0:26 0.000000
0:27 Sequence
0:27 move second child to first child ( temp 8-element array of 3-component vector of float)
0:27 'a' ( const (read only) 8-element array of 3-component vector of float)
0:27 Construct vec3 ( temp 8-element array of 3-component vector of float)
0:28 vector-scale ( temp 3-component vector of float)
0:28 Constant:
0:28 -0.577350
0:28 -0.577350
0:28 -0.577350
0:28 0.577350
0:28 0.577350
0:28 0.577350
0:28 add second child into first child ( temp float)
0:28 'n' ( temp float)
0:28 Constant:
@ -62,7 +53,7 @@ gl_FragCoord origin is upper left
0:29 Constant:
0:29 -0.577350
0:29 -0.577350
0:29 0.577350
0:29 -0.577350
0:29 add second child into first child ( temp float)
0:29 'n' ( temp float)
0:29 Constant:
@ -70,8 +61,8 @@ gl_FragCoord origin is upper left
0:30 vector-scale ( temp 3-component vector of float)
0:30 Constant:
0:30 -0.577350
0:30 0.577350
0:30 -0.577350
0:30 0.577350
0:30 add second child into first child ( temp float)
0:30 'n' ( temp float)
0:30 Constant:
@ -80,16 +71,16 @@ gl_FragCoord origin is upper left
0:31 Constant:
0:31 -0.577350
0:31 0.577350
0:31 0.577350
0:31 -0.577350
0:31 add second child into first child ( temp float)
0:31 'n' ( temp float)
0:31 Constant:
0:31 1.000000
0:32 vector-scale ( temp 3-component vector of float)
0:32 Constant:
0:32 -0.577350
0:32 0.577350
0:32 0.577350
0:32 -0.577350
0:32 -0.577350
0:32 add second child into first child ( temp float)
0:32 'n' ( temp float)
0:32 Constant:
@ -98,7 +89,7 @@ gl_FragCoord origin is upper left
0:33 Constant:
0:33 0.577350
0:33 -0.577350
0:33 0.577350
0:33 -0.577350
0:33 add second child into first child ( temp float)
0:33 'n' ( temp float)
0:33 Constant:
@ -106,38 +97,38 @@ gl_FragCoord origin is upper left
0:34 vector-scale ( temp 3-component vector of float)
0:34 Constant:
0:34 0.577350
0:34 0.577350
0:34 -0.577350
0:34 0.577350
0:34 add second child into first child ( temp float)
0:34 'n' ( temp float)
0:34 Constant:
0:34 1.000000
0:36 Sequence
0:36 move second child to first child ( temp structure{ temp 3-component vector of float a})
0:36 'oneNonConst' ( const (read only) structure{ temp 3-component vector of float a})
0:36 Construct structure ( temp structure{ temp 3-component vector of float a})
0:36 vector-scale ( temp 3-component vector of float)
0:36 Constant:
0:36 -0.577350
0:36 0.577350
0:36 0.577350
0:36 add second child into first child ( temp float)
0:36 'n' ( temp float)
0:36 Constant:
0:36 1.000000
0:38 Sequence
0:38 move second child to first child ( temp structure{ temp 3-component vector of float a, temp 3-component vector of float b})
0:38 'twoNonConst' ( const (read only) structure{ temp 3-component vector of float a, temp 3-component vector of float b})
0:38 Construct structure ( temp structure{ temp 3-component vector of float a, temp 3-component vector of float b})
0:38 vector-scale ( temp 3-component vector of float)
0:38 Constant:
0:38 -0.577350
0:38 0.577350
0:38 0.577350
0:38 add second child into first child ( temp float)
0:38 'n' ( temp float)
0:38 Constant:
0:38 1.000000
0:35 vector-scale ( temp 3-component vector of float)
0:35 Constant:
0:35 0.577350
0:35 0.577350
0:35 -0.577350
0:35 add second child into first child ( temp float)
0:35 'n' ( temp float)
0:35 Constant:
0:35 1.000000
0:37 Sequence
0:37 move second child to first child ( temp structure{ temp 3-component vector of float a})
0:37 'oneNonConst' ( const (read only) structure{ temp 3-component vector of float a})
0:37 Construct structure ( temp structure{ temp 3-component vector of float a})
0:37 vector-scale ( temp 3-component vector of float)
0:37 Constant:
0:37 -0.577350
0:37 0.577350
0:37 0.577350
0:37 add second child into first child ( temp float)
0:37 'n' ( temp float)
0:37 Constant:
0:37 1.000000
0:39 Sequence
0:39 move second child to first child ( temp structure{ temp 3-component vector of float a, temp 3-component vector of float b})
0:39 'twoNonConst' ( const (read only) structure{ temp 3-component vector of float a, temp 3-component vector of float b})
0:39 Construct structure ( temp structure{ temp 3-component vector of float a, temp 3-component vector of float b})
0:39 vector-scale ( temp 3-component vector of float)
0:39 Constant:
0:39 -0.577350
@ -147,32 +138,41 @@ gl_FragCoord origin is upper left
0:39 'n' ( temp float)
0:39 Constant:
0:39 1.000000
0:45 Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
0:45 Function Parameters:
0:40 vector-scale ( temp 3-component vector of float)
0:40 Constant:
0:40 -0.577350
0:40 0.577350
0:40 0.577350
0:40 add second child into first child ( temp float)
0:40 'n' ( temp float)
0:40 Constant:
0:40 1.000000
0:46 Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
0:46 Function Parameters:
0:? Sequence
0:46 Function Call: Test1( ( temp void)
0:49 move second child to first child ( temp 4-component vector of float)
0:49 color: direct index for structure ( temp 4-component vector of float)
0:49 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:49 Constant:
0:49 0 (const int)
0:49 Constant:
0:49 1.000000
0:49 1.000000
0:49 1.000000
0:49 1.000000
0:50 Branch: Return with expression
0:50 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:45 Function Definition: main( ( temp void)
0:45 Function Parameters:
0:47 Function Call: Test1( ( temp void)
0:50 move second child to first child ( temp 4-component vector of float)
0:50 color: direct index for structure ( temp 4-component vector of float)
0:50 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:50 Constant:
0:50 0 (const int)
0:50 Constant:
0:50 1.000000
0:50 1.000000
0:50 1.000000
0:50 1.000000
0:51 Branch: Return with expression
0:51 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:46 Function Definition: main( ( temp void)
0:46 Function Parameters:
0:? Sequence
0:45 Sequence
0:45 move second child to first child ( temp 4-component vector of float)
0:46 Sequence
0:46 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:45 color: direct index for structure ( temp 4-component vector of float)
0:45 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:45 Constant:
0:45 0 (const int)
0:46 color: direct index for structure ( temp 4-component vector of float)
0:46 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:46 Constant:
0:46 0 (const int)
0:? Linker Objects
0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
@ -212,29 +212,20 @@ gl_FragCoord origin is upper left
0:20 10.000000
0:22 Constant:
0:22 10.000000
0:25 Sequence
0:25 move second child to first child ( temp float)
0:25 'n' ( temp float)
0:25 Constant:
0:25 0.000000
0:26 Sequence
0:26 move second child to first child ( temp 8-element array of 3-component vector of float)
0:26 'a' ( const (read only) 8-element array of 3-component vector of float)
0:26 Construct vec3 ( temp 8-element array of 3-component vector of float)
0:27 vector-scale ( temp 3-component vector of float)
0:27 Constant:
0:27 0.577350
0:27 0.577350
0:27 0.577350
0:27 add second child into first child ( temp float)
0:27 'n' ( temp float)
0:27 Constant:
0:27 1.000000
0:26 move second child to first child ( temp float)
0:26 'n' ( temp float)
0:26 Constant:
0:26 0.000000
0:27 Sequence
0:27 move second child to first child ( temp 8-element array of 3-component vector of float)
0:27 'a' ( const (read only) 8-element array of 3-component vector of float)
0:27 Construct vec3 ( temp 8-element array of 3-component vector of float)
0:28 vector-scale ( temp 3-component vector of float)
0:28 Constant:
0:28 -0.577350
0:28 -0.577350
0:28 -0.577350
0:28 0.577350
0:28 0.577350
0:28 0.577350
0:28 add second child into first child ( temp float)
0:28 'n' ( temp float)
0:28 Constant:
@ -243,7 +234,7 @@ gl_FragCoord origin is upper left
0:29 Constant:
0:29 -0.577350
0:29 -0.577350
0:29 0.577350
0:29 -0.577350
0:29 add second child into first child ( temp float)
0:29 'n' ( temp float)
0:29 Constant:
@ -251,8 +242,8 @@ gl_FragCoord origin is upper left
0:30 vector-scale ( temp 3-component vector of float)
0:30 Constant:
0:30 -0.577350
0:30 0.577350
0:30 -0.577350
0:30 0.577350
0:30 add second child into first child ( temp float)
0:30 'n' ( temp float)
0:30 Constant:
@ -261,16 +252,16 @@ gl_FragCoord origin is upper left
0:31 Constant:
0:31 -0.577350
0:31 0.577350
0:31 0.577350
0:31 -0.577350
0:31 add second child into first child ( temp float)
0:31 'n' ( temp float)
0:31 Constant:
0:31 1.000000
0:32 vector-scale ( temp 3-component vector of float)
0:32 Constant:
0:32 -0.577350
0:32 0.577350
0:32 0.577350
0:32 -0.577350
0:32 -0.577350
0:32 add second child into first child ( temp float)
0:32 'n' ( temp float)
0:32 Constant:
@ -279,7 +270,7 @@ gl_FragCoord origin is upper left
0:33 Constant:
0:33 0.577350
0:33 -0.577350
0:33 0.577350
0:33 -0.577350
0:33 add second child into first child ( temp float)
0:33 'n' ( temp float)
0:33 Constant:
@ -287,38 +278,38 @@ gl_FragCoord origin is upper left
0:34 vector-scale ( temp 3-component vector of float)
0:34 Constant:
0:34 0.577350
0:34 0.577350
0:34 -0.577350
0:34 0.577350
0:34 add second child into first child ( temp float)
0:34 'n' ( temp float)
0:34 Constant:
0:34 1.000000
0:36 Sequence
0:36 move second child to first child ( temp structure{ temp 3-component vector of float a})
0:36 'oneNonConst' ( const (read only) structure{ temp 3-component vector of float a})
0:36 Construct structure ( temp structure{ temp 3-component vector of float a})
0:36 vector-scale ( temp 3-component vector of float)
0:36 Constant:
0:36 -0.577350
0:36 0.577350
0:36 0.577350
0:36 add second child into first child ( temp float)
0:36 'n' ( temp float)
0:36 Constant:
0:36 1.000000
0:38 Sequence
0:38 move second child to first child ( temp structure{ temp 3-component vector of float a, temp 3-component vector of float b})
0:38 'twoNonConst' ( const (read only) structure{ temp 3-component vector of float a, temp 3-component vector of float b})
0:38 Construct structure ( temp structure{ temp 3-component vector of float a, temp 3-component vector of float b})
0:38 vector-scale ( temp 3-component vector of float)
0:38 Constant:
0:38 -0.577350
0:38 0.577350
0:38 0.577350
0:38 add second child into first child ( temp float)
0:38 'n' ( temp float)
0:38 Constant:
0:38 1.000000
0:35 vector-scale ( temp 3-component vector of float)
0:35 Constant:
0:35 0.577350
0:35 0.577350
0:35 -0.577350
0:35 add second child into first child ( temp float)
0:35 'n' ( temp float)
0:35 Constant:
0:35 1.000000
0:37 Sequence
0:37 move second child to first child ( temp structure{ temp 3-component vector of float a})
0:37 'oneNonConst' ( const (read only) structure{ temp 3-component vector of float a})
0:37 Construct structure ( temp structure{ temp 3-component vector of float a})
0:37 vector-scale ( temp 3-component vector of float)
0:37 Constant:
0:37 -0.577350
0:37 0.577350
0:37 0.577350
0:37 add second child into first child ( temp float)
0:37 'n' ( temp float)
0:37 Constant:
0:37 1.000000
0:39 Sequence
0:39 move second child to first child ( temp structure{ temp 3-component vector of float a, temp 3-component vector of float b})
0:39 'twoNonConst' ( const (read only) structure{ temp 3-component vector of float a, temp 3-component vector of float b})
0:39 Construct structure ( temp structure{ temp 3-component vector of float a, temp 3-component vector of float b})
0:39 vector-scale ( temp 3-component vector of float)
0:39 Constant:
0:39 -0.577350
@ -328,32 +319,41 @@ gl_FragCoord origin is upper left
0:39 'n' ( temp float)
0:39 Constant:
0:39 1.000000
0:45 Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
0:45 Function Parameters:
0:40 vector-scale ( temp 3-component vector of float)
0:40 Constant:
0:40 -0.577350
0:40 0.577350
0:40 0.577350
0:40 add second child into first child ( temp float)
0:40 'n' ( temp float)
0:40 Constant:
0:40 1.000000
0:46 Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
0:46 Function Parameters:
0:? Sequence
0:46 Function Call: Test1( ( temp void)
0:49 move second child to first child ( temp 4-component vector of float)
0:49 color: direct index for structure ( temp 4-component vector of float)
0:49 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:49 Constant:
0:49 0 (const int)
0:49 Constant:
0:49 1.000000
0:49 1.000000
0:49 1.000000
0:49 1.000000
0:50 Branch: Return with expression
0:50 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:45 Function Definition: main( ( temp void)
0:45 Function Parameters:
0:47 Function Call: Test1( ( temp void)
0:50 move second child to first child ( temp 4-component vector of float)
0:50 color: direct index for structure ( temp 4-component vector of float)
0:50 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:50 Constant:
0:50 0 (const int)
0:50 Constant:
0:50 1.000000
0:50 1.000000
0:50 1.000000
0:50 1.000000
0:51 Branch: Return with expression
0:51 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:46 Function Definition: main( ( temp void)
0:46 Function Parameters:
0:? Sequence
0:45 Sequence
0:45 move second child to first child ( temp 4-component vector of float)
0:46 Sequence
0:46 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:45 color: direct index for structure ( temp 4-component vector of float)
0:45 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:45 Constant:
0:45 0 (const int)
0:46 color: direct index for structure ( temp 4-component vector of float)
0:46 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:46 Constant:
0:46 0 (const int)
0:? Linker Objects
0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)

View File

@ -3,9 +3,14 @@ float4 fun0()
return 1.0f;
}
uint fun2(float4 col)
float4 fun2(float4 const col)
{
return 7;
return (1, 2, 3, 4);
}
uint fun3(const float4 col)
{
return 7;
}
float4 fun4(uint id1, uniform uint id2)
@ -15,7 +20,7 @@ float4 fun4(uint id1, uniform uint id2)
float4 fun1(int index)
{
uint entityId = fun2(fun0());
uint entityId = fun3(fun2(fun0()));
return fun4(entityId, entityId);
}

View File

@ -21,7 +21,8 @@ void Test1()
const mystruct2 constTest5 = { {8,}, {9,}, {10}, };
constTest5.c;
const float step = 1.f;
float const origStep = 1.0f;
const float step = origStep;
float n = 0;
const float3 a[8] = {
normalize(float3(1, 1, 1)) * (n += step),

View File

@ -1,6 +1,7 @@
//
// Copyright (C) 2016-2018 Google, Inc.
// Copyright (C) 2016 LunarG, Inc.
// Copyright (C) 2023 Mobica Limited
//
// All rights reserved.
//
@ -594,6 +595,7 @@ bool HlslGrammar::acceptControlDeclaration(TIntermNode*& node)
// fully_specified_type
// : type_specifier
// | type_qualifier type_specifier
// | type_specifier type_qualifier
//
bool HlslGrammar::acceptFullySpecifiedType(TType& type, const TAttributes& attributes)
{
@ -605,7 +607,7 @@ bool HlslGrammar::acceptFullySpecifiedType(TType& type, TIntermNode*& nodeList,
// type_qualifier
TQualifier qualifier;
qualifier.clear();
if (! acceptQualifier(qualifier))
if (! acceptPreQualifier(qualifier))
return false;
TSourceLoc loc = token.loc;
@ -620,6 +622,10 @@ bool HlslGrammar::acceptFullySpecifiedType(TType& type, TIntermNode*& nodeList,
return false;
}
// type_qualifier
if (! acceptPostQualifier(qualifier))
return false;
if (type.getBasicType() == EbtBlock) {
// the type was a block, which set some parts of the qualifier
parseContext.mergeQualifiers(type.getQualifier(), qualifier);
@ -634,7 +640,7 @@ bool HlslGrammar::acceptFullySpecifiedType(TType& type, TIntermNode*& nodeList,
parseContext.declareBlock(loc, type);
} else {
// Some qualifiers are set when parsing the type. Merge those with
// whatever comes from acceptQualifier.
// whatever comes from acceptPreQualifier and acceptPostQualifier.
assert(qualifier.layoutFormat == ElfNone);
qualifier.layoutFormat = type.getQualifier().layoutFormat;
@ -660,7 +666,7 @@ bool HlslGrammar::acceptFullySpecifiedType(TType& type, TIntermNode*& nodeList,
//
// Zero or more of these, so this can't return false.
//
bool HlslGrammar::acceptQualifier(TQualifier& qualifier)
bool HlslGrammar::acceptPreQualifier(TQualifier& qualifier)
{
do {
switch (peek()) {
@ -766,6 +772,25 @@ bool HlslGrammar::acceptQualifier(TQualifier& qualifier)
} while (true);
}
// type_qualifier
// : qualifier qualifier ...
//
// Zero or more of these, so this can't return false.
//
bool HlslGrammar::acceptPostQualifier(TQualifier& qualifier)
{
do {
switch (peek()) {
case EHTokConst:
qualifier.storage = EvqConst;
break;
default:
return true;
}
advanceToken();
} while (true);
}
// layout_qualifier_list
// : LAYOUT LEFT_PAREN layout_qualifier COMMA layout_qualifier ... RIGHT_PAREN
//

View File

@ -1,6 +1,7 @@
//
// Copyright (C) 2016-2018 Google, Inc.
// Copyright (C) 2016 LunarG, Inc.
// Copyright (C) 2023 Mobica Limited.
//
// All rights reserved.
//
@ -72,7 +73,8 @@ namespace glslang {
bool acceptSamplerState();
bool acceptFullySpecifiedType(TType&, const TAttributes&);
bool acceptFullySpecifiedType(TType&, TIntermNode*& nodeList, const TAttributes&, bool forbidDeclarators = false);
bool acceptQualifier(TQualifier&);
bool acceptPreQualifier(TQualifier&);
bool acceptPostQualifier(TQualifier&);
bool acceptLayoutQualifierList(TQualifier&);
bool acceptType(TType&);
bool acceptType(TType&, TIntermNode*& nodeList);