From 9839e2440e736bff0f4590000b44082fb94684fb Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Thu, 26 Sep 2013 00:45:21 +0000 Subject: [PATCH] Unify the 8 grammar productions for declaring variables. This greatly simplifies making changes for this set of productions. This change also naturally picks up redeclarations of built-in arrays and the addition of the remaining linker objects of const, arrays, etc. git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@23246 e7fa87d3-cd2b-0410-9028-fcbf551c1848 --- Install/Windows/glslangValidator.exe | Bin 332288 -> 335872 bytes Test/baseResults/120.frag.out | 2 + Test/baseResults/120.vert.out | 9 +- Test/baseResults/130.frag.out | 3 + Test/baseResults/300.frag.out | 2 + Test/baseResults/300.vert.out | 3 + Test/baseResults/300layout.frag.out | 1 + Test/baseResults/300layout.vert.out | 3 + Test/baseResults/300operations.frag.out | 1 + Test/baseResults/400.frag.out | 1 + Test/baseResults/420.vert.out | 1 + Test/baseResults/array.frag.out | 3 + Test/baseResults/array100.frag.out | 3 + Test/baseResults/constErrors.frag.out | 3 + Test/baseResults/constFold.frag.out | 9 + Test/baseResults/cppComplexExpr.vert.out | 1 + Test/baseResults/cppIndent.vert.out | 1 + Test/baseResults/cppNest.vert.out | 1 + Test/baseResults/cppSimple.vert.out | 5 + Test/baseResults/dce.frag.out | 2 + Test/baseResults/decls.frag.out | 151 ++++++++++ Test/baseResults/deepRvalue.frag.out | 4 + Test/baseResults/functionCall.frag.out | 1 + Test/baseResults/length.frag.out | 2 + Test/baseResults/link1.frag.out | 15 + Test/baseResults/matrixError.vert.out | 1 + Test/baseResults/nonSquare.vert.out | 3 + Test/baseResults/precision.frag.out | 1 + Test/baseResults/specExamples.frag.out | 29 +- Test/baseResults/specExamples.vert.out | 3 + Test/baseResults/structure.frag.out | 1 + Test/baseResults/tokenLength.vert.out | 12 + Test/baseResults/uniformArray.frag.out | 2 + Test/baseResults/variableArrayIndex.frag.out | 1 + Test/baseResults/varyingArray.frag.out | 2 + .../baseResults/varyingArrayIndirect.frag.out | 2 + Test/baseResults/voidFunction.frag.out | 1 + Test/decls.frag | 34 +++ Test/testlist | 1 + Todo.txt | 2 +- glslang/Include/Types.h | 1 + glslang/MachineIndependent/Intermediate.cpp | 3 +- glslang/MachineIndependent/ParseHelper.cpp | 272 ++++++++++-------- glslang/MachineIndependent/ParseHelper.h | 17 +- glslang/MachineIndependent/glslang.y | 133 ++------- 45 files changed, 505 insertions(+), 243 deletions(-) create mode 100644 Test/baseResults/decls.frag.out create mode 100644 Test/decls.frag diff --git a/Install/Windows/glslangValidator.exe b/Install/Windows/glslangValidator.exe index 35f1078b1c8914659dca919c700fbf723d35f123..e3cbb6d42a486e1c439e309a1b27796cb52f5c67 100644 GIT binary patch delta 133965 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 gSC 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%0D{y}yqb)E2{dbBqQ_ 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 BWRU;> diff --git a/Test/baseResults/120.frag.out b/Test/baseResults/120.frag.out index bbcda690..777a0e92 100644 --- a/Test/baseResults/120.frag.out +++ b/Test/baseResults/120.frag.out @@ -292,4 +292,6 @@ ERROR: node is still EOpNull! 0:? 'm' (uniform 4X2 matrix of float) 0:? 'imageBuffer' (float) 0:? 'uimage2DRect' (float) +0:? 'a' (int) +0:? 'gl_TexCoord' (smooth in 6-element array of 4-component vector of float) diff --git a/Test/baseResults/120.vert.out b/Test/baseResults/120.vert.out index adabd121..96a7fee2 100644 --- a/Test/baseResults/120.vert.out +++ b/Test/baseResults/120.vert.out @@ -23,12 +23,11 @@ ERROR: 0:37: 'arrays of arrays' : not supported with this profile: none ERROR: 0:38: 'arrays of arrays' : not supported with this profile: none ERROR: 0:38: 'constructor' : array constructor needs one argument per array element ERROR: 0:38: 'arrays of arrays' : not supported with this profile: none -ERROR: 0:43: 'uniform' : cannot initialize this type of qualifier ERROR: 0:47: 'arrays of arrays' : not supported with this profile: none ERROR: 0:48: 'arrays of arrays' : not supported with this profile: none ERROR: 0:49: 'arrays of arrays' : not supported with this profile: none ERROR: 0:50: 'arrays of arrays' : not supported with this profile: none -ERROR: 30 compilation errors. No code generated. +ERROR: 29 compilation errors. No code generated. ERROR: node is still EOpNull! 0:15 Function Definition: main( (void) @@ -71,6 +70,10 @@ ERROR: node is still EOpNull! 0:40 move second child to first child (float) 0:40 'gl_PointSize' (invariant gl_PointSize float) 0:40 3.800000 +0:43 Sequence +0:43 move second child to first child (float) +0:43 'initted' (uniform float) +0:43 3.400000 0:? Linker Objects 0:? 'i' (in 4-component vector of float) 0:? 'o' (smooth out 4-component vector of float) @@ -78,4 +81,6 @@ ERROR: node is still EOpNull! 0:? 'attv4' (in 4-component vector of float) 0:? 's2D' (uniform sampler2D) 0:? 'centTexCoord' (invariant smooth out 2-component vector of float) +0:? 'initted' (uniform float) +0:? 'concall' (const float) diff --git a/Test/baseResults/130.frag.out b/Test/baseResults/130.frag.out index 38fa1aac..b1eada0d 100644 --- a/Test/baseResults/130.frag.out +++ b/Test/baseResults/130.frag.out @@ -2,6 +2,9 @@ 0:16 Function Definition: main( (void) 0:16 Function Parameters: 0:? Linker Objects +0:? 'a' (3-component vector of float) +0:? 'b' (float) +0:? 'c' (int) 0:? 'i' (smooth in 4-component vector of float) 0:? 'o' (out 4-component vector of float) 0:? 'fflat' (flat in float) diff --git a/Test/baseResults/300.frag.out b/Test/baseResults/300.frag.out index 9fc969b6..7f15f918 100644 --- a/Test/baseResults/300.frag.out +++ b/Test/baseResults/300.frag.out @@ -217,6 +217,7 @@ ERROR: node is still EOpNull! 0:? 'c1D' (smooth in lowp float) 0:? 'c2D' (smooth in lowp 2-component vector of float) 0:? 'c3D' (smooth in lowp 3-component vector of float) +0:? 'c4D' (smooth lowp 4-component vector of float) 0:? 'ic1D' (flat in mediump int) 0:? 'ic2D' (flat in mediump 2-component vector of int) 0:? 'ic3D' (flat in mediump 3-component vector of int) @@ -227,5 +228,6 @@ ERROR: node is still EOpNull! 0:? 's2' (smooth in structure) 0:? 'sc' (out lowp 3-component vector of float) 0:? 'sf' (out lowp float) +0:? 'arrayedSampler' (uniform 5-element array of lowp sampler2D) 0:? 'multiInst' (layout(shared ) uniform 2-element array of block) diff --git a/Test/baseResults/300.vert.out b/Test/baseResults/300.vert.out index 567be865..1388f662 100644 --- a/Test/baseResults/300.vert.out +++ b/Test/baseResults/300.vert.out @@ -126,6 +126,7 @@ ERROR: node is still EOpNull! 0:? 'm44' (uniform highp 4X4 matrix of float) 0:? 'v3' (in highp 3-component vector of float) 0:? 'v2' (smooth out highp 2-component vector of float) +0:? 'bad' (in 10-element array of highp 4-component vector of float) 0:? 'badorder' (in highp 4-component vector of float) 0:? 'badorder2' (invariant smooth out highp 4-component vector of float) 0:? 'badorder4' (centroid in highp 4-component vector of float) @@ -134,8 +135,10 @@ ERROR: node is still EOpNull! 0:? 'rep2' (centroid smooth sample out highp 4-component vector of float) 0:? 'rep3' (in highp 4-component vector of float) 0:? 's' (smooth out structure) +0:? 'badsize' (unsized array of highp float) 0:? 'badsize2' (unsized array of highp float) 0:? 'ubInst' (layout(shared ) uniform unsized array of block) +0:? 'okayA' (2-element array of highp float) 0:? 'gl_VertexID' (gl_VertexId highp int) 0:? 'gl_InstanceID' (gl_InstanceId highp int) diff --git a/Test/baseResults/300layout.frag.out b/Test/baseResults/300layout.frag.out index 2610ad88..f2128e10 100644 --- a/Test/baseResults/300layout.frag.out +++ b/Test/baseResults/300layout.frag.out @@ -21,4 +21,5 @@ ERROR: node is still EOpNull! 0:? 'color' (layout(location=2 ) smooth in mediump 4-component vector of float) 0:? 'c' (layout(location=1 ) out mediump 4-component vector of float) 0:? 'p' (layout(location=3 ) out mediump 4-component vector of float) +0:? 'q' (layout(location=4 ) out 2-element array of mediump 4-component vector of float) diff --git a/Test/baseResults/300layout.vert.out b/Test/baseResults/300layout.vert.out index 241d003c..77f487da 100644 --- a/Test/baseResults/300layout.vert.out +++ b/Test/baseResults/300layout.vert.out @@ -49,12 +49,15 @@ ERROR: node is still EOpNull! 0:? Linker Objects 0:? 'c' (layout(location=7 ) in highp 3-component vector of float) 0:? 'p' (layout(location=3 ) in highp 4-component vector of float) +0:? 'q' (layout(location=9 ) in 4-element array of highp 4-component vector of float) +0:? 'r' (layout(location=10 ) in 4-element array of structure) 0:? 'pos' (smooth out highp 4-component vector of float) 0:? 'color' (smooth out highp 3-component vector of float) 0:? 'badm4' (layout(column_major shared ) uniform highp 4X4 matrix of float) 0:? 'tblock' (layout(std140 ) uniform block) 0:? '__anon__0' (layout(shared ) uniform block) 0:? 'badout' (layout(location=10 ) smooth out highp 4-component vector of float) +0:? 'compute_only' (shared highp 4-component vector of float) 0:? 'gl_VertexID' (gl_VertexId highp int) 0:? 'gl_InstanceID' (gl_InstanceId highp int) diff --git a/Test/baseResults/300operations.frag.out b/Test/baseResults/300operations.frag.out index a679ca08..a40b7f79 100644 --- a/Test/baseResults/300operations.frag.out +++ b/Test/baseResults/300operations.frag.out @@ -200,4 +200,5 @@ ERROR: node is still EOpNull! 0:? Linker Objects 0:? 'instanceName' (layout(shared ) uniform block) 0:? 's' (structure) +0:? 'a' (5-element array of mediump float) diff --git a/Test/baseResults/400.frag.out b/Test/baseResults/400.frag.out index fe783037..df37e93e 100644 --- a/Test/baseResults/400.frag.out +++ b/Test/baseResults/400.frag.out @@ -15,4 +15,5 @@ ERROR: node is still EOpNull! 0:? Linker Objects 0:? 'c2D' (smooth in 2-component vector of float) 0:? 'i' (flat in int) +0:? 'arrayedSampler' (uniform 5-element array of sampler2D) diff --git a/Test/baseResults/420.vert.out b/Test/baseResults/420.vert.out index af98606c..4150d4ec 100644 --- a/Test/baseResults/420.vert.out +++ b/Test/baseResults/420.vert.out @@ -37,6 +37,7 @@ ERROR: node is still EOpNull! 0:30 'v' (in 4-component vector of float) 0:? Linker Objects 0:? 'v2' (smooth out 2-component vector of float) +0:? 'bad' (in 10-element array of 4-component vector of float) 0:? 'badorder' (in 4-component vector of float) 0:? 'badorder2' (invariant smooth out 4-component vector of float) 0:? 'badorder4' (centroid in 4-component vector of float) diff --git a/Test/baseResults/array.frag.out b/Test/baseResults/array.frag.out index f12c2649..fa745eb3 100644 --- a/Test/baseResults/array.frag.out +++ b/Test/baseResults/array.frag.out @@ -147,5 +147,8 @@ ERROR: node is still EOpNull! 0:58 1 (const int) 0:58 4 (const int) 0:? Linker Objects +0:? 'gu' (unsized array of float) +0:? 'g4' (4-element array of float) +0:? 'g5' (5-element array of float) 0:? 'a' (uniform int) diff --git a/Test/baseResults/array100.frag.out b/Test/baseResults/array100.frag.out index 4dd0235f..d3eb5295 100644 --- a/Test/baseResults/array100.frag.out +++ b/Test/baseResults/array100.frag.out @@ -99,5 +99,8 @@ ERROR: node is still EOpNull! 0:40 1.000000 0:40 1.000000 0:? Linker Objects +0:? 'gu' (unsized array of mediump float) +0:? 'g4' (4-element array of mediump float) +0:? 'g5' (5-element array of mediump float) 0:? 'a' (uniform mediump int) diff --git a/Test/baseResults/constErrors.frag.out b/Test/baseResults/constErrors.frag.out index abc1b67e..82913151 100644 --- a/Test/baseResults/constErrors.frag.out +++ b/Test/baseResults/constErrors.frag.out @@ -15,5 +15,8 @@ ERROR: node is still EOpNull! 0:? Linker Objects 0:? 'inVar' (smooth in 4-component vector of float) 0:? 'outVar' (out 4-component vector of float) +0:? 'constInt' (const int) 0:? 'uniformInt' (uniform int) +0:? 's' (structure) +0:? 's2' (structure) diff --git a/Test/baseResults/constFold.frag.out b/Test/baseResults/constFold.frag.out index fff747b7..8d7b1203 100644 --- a/Test/baseResults/constFold.frag.out +++ b/Test/baseResults/constFold.frag.out @@ -138,6 +138,14 @@ 0:81 0 (const int) 0:81 7.000000 0:? Linker Objects +0:? 'a' (const int) +0:? 'b' (const int) +0:? 'c' (const int) +0:? 'd' (const int) +0:? 'e' (const float) +0:? 'f' (const float) +0:? 'g' (const float) +0:? 'pytho' (const 2-component vector of float) 0:? 'inv' (smooth in 4-component vector of float) 0:? 'FragColor' (out 4-component vector of float) 0:? 'out2' (out 2-component vector of float) @@ -152,4 +160,5 @@ 0:? 'out11' (out 4-component vector of float) 0:? 'out12' (out 2-component vector of int) 0:? 'out13' (out 3-component vector of uint) +0:? 's' (const structure) diff --git a/Test/baseResults/cppComplexExpr.vert.out b/Test/baseResults/cppComplexExpr.vert.out index f6410bfc..6069fc0c 100644 --- a/Test/baseResults/cppComplexExpr.vert.out +++ b/Test/baseResults/cppComplexExpr.vert.out @@ -21,4 +21,5 @@ WARNING: #version: statement missing; use #version on first line of shader 0:39 Construct vec4 (highp 4-component vector of float) 0:39 'sum' (highp float) 0:? Linker Objects +0:? 'sum' (highp float) diff --git a/Test/baseResults/cppIndent.vert.out b/Test/baseResults/cppIndent.vert.out index 0f9f66a9..2ef0dcd6 100644 --- a/Test/baseResults/cppIndent.vert.out +++ b/Test/baseResults/cppIndent.vert.out @@ -26,4 +26,5 @@ 0:56 Construct vec4 (4-component vector of float) 0:56 'sum' (float) 0:? Linker Objects +0:? 'sum' (float) diff --git a/Test/baseResults/cppNest.vert.out b/Test/baseResults/cppNest.vert.out index 4574806c..38894d82 100644 --- a/Test/baseResults/cppNest.vert.out +++ b/Test/baseResults/cppNest.vert.out @@ -29,4 +29,5 @@ 0:86 Construct vec4 (4-component vector of float) 0:86 'sum' (float) 0:? Linker Objects +0:? 'sum' (float) diff --git a/Test/baseResults/cppSimple.vert.out b/Test/baseResults/cppSimple.vert.out index b98f560e..76415b23 100644 --- a/Test/baseResults/cppSimple.vert.out +++ b/Test/baseResults/cppSimple.vert.out @@ -71,5 +71,10 @@ ERROR: node is still EOpNull! 0:130 'twoPi' (float) 0:130 6.280000 0:? Linker Objects +0:? 'sum' (float) +0:? 'linenumber' (int) +0:? 'filenumber' (int) +0:? 'version' (int) +0:? 'twoPi' (float) 0:? 'tod' (float) diff --git a/Test/baseResults/dce.frag.out b/Test/baseResults/dce.frag.out index 7975f99e..d2d7ac54 100644 --- a/Test/baseResults/dce.frag.out +++ b/Test/baseResults/dce.frag.out @@ -114,4 +114,6 @@ 0:55 Pre-Increment (int) 0:55 'c' (int) 0:? Linker Objects +0:? 'flag' (const bool) +0:? 'c' (int) diff --git a/Test/baseResults/decls.frag.out b/Test/baseResults/decls.frag.out new file mode 100644 index 00000000..ad0ac0a8 --- /dev/null +++ b/Test/baseResults/decls.frag.out @@ -0,0 +1,151 @@ +ERROR: 0:19: 'vi4' : illegal use of type 'void' +ERROR: 0:20: 'vj' : illegal use of type 'void' +ERROR: 0:20: 'vk5' : illegal use of type 'void' +ERROR: 0:21: 'vm2' : illegal use of type 'void' +ERROR: 0:21: 'vm3' : illegal use of type 'void' +ERROR: 0:22: 'vn8' : illegal use of type 'void' +ERROR: 0:22: 'vp' : illegal use of type 'void' +ERROR: 0:24: 'gl_' : reserved built-in name +ERROR: 0:25: 'gl_' : reserved built-in name +ERROR: 0:25: 'gl_' : reserved built-in name +ERROR: 0:26: 'gl_' : reserved built-in name +ERROR: 0:26: 'gl_' : reserved built-in name +ERROR: 0:27: 'gl_' : reserved built-in name +ERROR: 0:27: 'gl_' : reserved built-in name +ERROR: 0:32: '' : boolean expression expected +ERROR: 0:33: 'gl_' : reserved built-in name +ERROR: 16 compilation errors. No code generated. + +ERROR: node is still EOpNull! +0:5 Sequence +0:5 move second child to first child (int) +0:5 'd1' (int) +0:5 1 (const int) +0:6 Sequence +0:6 move second child to first child (int) +0:6 'e2' (int) +0:6 2 (const int) +0:7 Sequence +0:7 move second child to first child (int) +0:7 'h3' (int) +0:7 3 (const int) +0:14 Sequence +0:14 move second child to first child (4-element array of int) +0:14 'ii4' (4-element array of int) +0:14 1 (const int) +0:14 2 (const int) +0:14 3 (const int) +0:14 4 (const int) +0:15 Sequence +0:15 move second child to first child (5-element array of int) +0:15 'ik5' (5-element array of int) +0:15 5 (const int) +0:15 6 (const int) +0:15 7 (const int) +0:15 8 (const int) +0:15 9 (const int) +0:16 Sequence +0:16 move second child to first child (2-element array of int) +0:16 'im2' (2-element array of int) +0:16 10 (const int) +0:16 11 (const int) +0:16 move second child to first child (3-element array of int) +0:16 'im3' (3-element array of int) +0:16 12 (const int) +0:16 13 (const int) +0:16 14 (const int) +0:17 Sequence +0:17 move second child to first child (4-element array of int) +0:17 'in8' (4-element array of int) +0:17 21 (const int) +0:17 22 (const int) +0:17 23 (const int) +0:17 24 (const int) +0:24 Sequence +0:24 move second child to first child (4-element array of int) +0:24 'gl_vi4' (4-element array of int) +0:24 1 (const int) +0:24 2 (const int) +0:24 3 (const int) +0:24 4 (const int) +0:25 Sequence +0:25 move second child to first child (5-element array of int) +0:25 'gl_vk5' (5-element array of int) +0:25 5 (const int) +0:25 6 (const int) +0:25 7 (const int) +0:25 8 (const int) +0:25 9 (const int) +0:26 Sequence +0:26 move second child to first child (2-element array of int) +0:26 'gl_vm2' (2-element array of int) +0:26 10 (const int) +0:26 11 (const int) +0:26 move second child to first child (3-element array of int) +0:26 'gl_vm3' (3-element array of int) +0:26 12 (const int) +0:26 13 (const int) +0:26 14 (const int) +0:27 Sequence +0:27 move second child to first child (4-element array of int) +0:27 'gl_vn8' (4-element array of int) +0:27 21 (const int) +0:27 22 (const int) +0:27 23 (const int) +0:27 24 (const int) +0:29 Function Definition: main( (void) +0:29 Function Parameters: +0:31 Sequence +0:31 Loop with condition tested first +0:31 Loop Condition +0:31 move second child to first child (bool) +0:31 'cond' (bool) +0:31 Compare Less Than (bool) +0:31 'b' (int) +0:31 'c' (int) +0:31 No loop body +0:32 Loop with condition tested first +0:32 Loop Condition +0:32 move second child to first child (int) +0:32 'icond' (int) +0:32 'b' (int) +0:32 No loop body +0:33 Loop with condition tested first +0:33 Loop Condition +0:33 move second child to first child (bool) +0:33 'gl_cond' (bool) +0:33 Compare Less Than (bool) +0:33 'b' (int) +0:33 'c' (int) +0:33 No loop body +0:? Linker Objects +0:? 'a' (int) +0:? 'b' (int) +0:? 'c' (int) +0:? 'd1' (int) +0:? 'e2' (int) +0:? 'f' (int) +0:? 'g' (int) +0:? 'h3' (int) +0:? 'i4' (4-element array of int) +0:? 'j' (int) +0:? 'k5' (5-element array of int) +0:? 'm6' (6-element array of int) +0:? 'm7' (7-element array of int) +0:? 'n8' (8-element array of int) +0:? 'p' (int) +0:? 'ii4' (4-element array of int) +0:? 'ij' (int) +0:? 'ik5' (5-element array of int) +0:? 'im2' (2-element array of int) +0:? 'im3' (3-element array of int) +0:? 'in8' (4-element array of int) +0:? 'ip' (int) +0:? 'gl_vi4' (4-element array of int) +0:? 'gl_vj' (int) +0:? 'gl_vk5' (5-element array of int) +0:? 'gl_vm2' (2-element array of int) +0:? 'gl_vm3' (3-element array of int) +0:? 'gl_vn8' (4-element array of int) +0:? 'gl_vp' (int) + diff --git a/Test/baseResults/deepRvalue.frag.out b/Test/baseResults/deepRvalue.frag.out index c7c5a7d9..1cda2df1 100644 --- a/Test/baseResults/deepRvalue.frag.out +++ b/Test/baseResults/deepRvalue.frag.out @@ -115,4 +115,8 @@ 0:35 'i' (float) 0:? Linker Objects 0:? 'sampler' (uniform sampler2D) +0:? 'v1' (4-component vector of float) +0:? 'v2' (4-component vector of float) +0:? 'v3' (4-component vector of float) +0:? 'v4' (4-component vector of float) diff --git a/Test/baseResults/functionCall.frag.out b/Test/baseResults/functionCall.frag.out index a1624450..3327c4cf 100644 --- a/Test/baseResults/functionCall.frag.out +++ b/Test/baseResults/functionCall.frag.out @@ -76,4 +76,5 @@ WARNING: 0:4: varying deprecated in version 130; may be removed in future releas 0:? 'bigColor' (uniform 4-component vector of float) 0:? 'BaseColor' (smooth in 4-component vector of float) 0:? 'd' (uniform float) +0:? 'h' (float) diff --git a/Test/baseResults/length.frag.out b/Test/baseResults/length.frag.out index 5deccaaf..4a354ae7 100644 --- a/Test/baseResults/length.frag.out +++ b/Test/baseResults/length.frag.out @@ -19,4 +19,6 @@ 0:17 30.000000 0:17 30.000000 0:? Linker Objects +0:? 'u' (uniform 3-element array of 4-component vector of float) +0:? 'v' (smooth in 2-element array of 2-component vector of float) diff --git a/Test/baseResults/link1.frag.out b/Test/baseResults/link1.frag.out index 5119acfc..47cfec21 100644 --- a/Test/baseResults/link1.frag.out +++ b/Test/baseResults/link1.frag.out @@ -33,8 +33,12 @@ link1.frag 0:? Linker Objects 0:? 'uv4' (uniform 4-component vector of float) 0:? 'glass' (uniform 3-component vector of float) +0:? 'ci' (const int) +0:? 'a' (4-component vector of float) 0:? 'iv3' (smooth in 3-component vector of float) 0:? 'cup' (smooth in 4-component vector of float) +0:? 'b' (4-component vector of float) +0:? 'c' (4-component vector of float) link2.frag @@ -66,8 +70,12 @@ link2.frag 0:? Linker Objects 0:? 'uv4' (uniform 4-component vector of float) 0:? 'glass' (uniform 2-component vector of float) +0:? 'ci' (const int) +0:? 'd' (4-component vector of float) 0:? 'iv3' (smooth in 3-component vector of float) 0:? 'cup' (flat in 4-component vector of float) +0:? 'e' (4-component vector of float) +0:? 'f' (4-component vector of float) link3.frag @@ -145,6 +153,13 @@ ERROR: Linking fragment stage: Precision qualifiers must match: 0:? Linker Objects 0:? 'uv4' (uniform 4-component vector of float) 0:? 'glass' (uniform 3-component vector of float) +0:? 'ci' (const int) +0:? 'a' (4-component vector of float) 0:? 'iv3' (smooth in 3-component vector of float) 0:? 'cup' (smooth in 4-component vector of float) +0:? 'b' (4-component vector of float) +0:? 'c' (4-component vector of float) +0:? 'd' (4-component vector of float) +0:? 'e' (4-component vector of float) +0:? 'f' (4-component vector of float) diff --git a/Test/baseResults/matrixError.vert.out b/Test/baseResults/matrixError.vert.out index 574ede51..0f014cf8 100644 --- a/Test/baseResults/matrixError.vert.out +++ b/Test/baseResults/matrixError.vert.out @@ -30,4 +30,5 @@ ERROR: node is still EOpNull! 0:? Linker Objects 0:? 'v3' (in 3-component vector of float) 0:? 'm32' (uniform 3X2 matrix of float) +0:? 'm24' (2X4 matrix of float) diff --git a/Test/baseResults/nonSquare.vert.out b/Test/baseResults/nonSquare.vert.out index 5ee5ea17..631fa591 100644 --- a/Test/baseResults/nonSquare.vert.out +++ b/Test/baseResults/nonSquare.vert.out @@ -59,4 +59,7 @@ 0:? 'v3' (in 3-component vector of float) 0:? 'v4' (in 4-component vector of float) 0:? 'm32' (uniform 3X2 matrix of float) +0:? 'cv2' (const 2-component vector of float) +0:? 'm24' (const 2X4 matrix of float) +0:? 'm42' (const 4X2 matrix of float) diff --git a/Test/baseResults/precision.frag.out b/Test/baseResults/precision.frag.out index 93f1cbab..38d1a200 100644 --- a/Test/baseResults/precision.frag.out +++ b/Test/baseResults/precision.frag.out @@ -109,4 +109,5 @@ ERROR: node is still EOpNull! 0:? 'samplerHigh' (uniform highp sampler2D) 0:? 'uint' (mediump 4-component vector of float) 0:? 'global_high' (highp int) +0:? 'b2' (mediump 2-component vector of bool) diff --git a/Test/baseResults/specExamples.frag.out b/Test/baseResults/specExamples.frag.out index 9bba5309..c776306b 100644 --- a/Test/baseResults/specExamples.frag.out +++ b/Test/baseResults/specExamples.frag.out @@ -3,7 +3,6 @@ ERROR: 0:20: '' : numeric literal too big ERROR: 0:21: '' : hexidecimal literal too big ERROR: 0:37: 'view' : redefinition ERROR: 0:68: 'lightPosition' : redefinition -ERROR: 0:69: 'uniform' : cannot initialize this type of qualifier ERROR: 0:71: 'Material' : only uniform interface blocks are supported ERROR: 0:79: 'Light' : only uniform interface blocks are supported ERROR: 0:83: 'ColoredTexture' : only uniform interface blocks are supported @@ -54,7 +53,7 @@ ERROR: 0:226: 'in' : only allowed at global scope ERROR: 0:227: 'in' : only allowed at global scope ERROR: 0:228: 'in' : only allowed at global scope ERROR: 0:232: 'out' : only allowed at global scope -ERROR: 56 compilation errors. No code generated. +ERROR: 55 compilation errors. No code generated. ERROR: node is still EOpNull! 0:5 Sequence @@ -109,6 +108,12 @@ ERROR: node is still EOpNull! 0:26 move second child to first child (double) 0:26 'fd' (double) 0:26 2.000000 +0:69 Sequence +0:69 move second child to first child (3-component vector of float) +0:69 'color' (uniform 3-component vector of float) +0:69 0.700000 +0:69 0.700000 +0:69 0.200000 0:127 Function Definition: foo(f1[5]; (5-element array of float) 0:127 Function Parameters: 0:127 '' (in 5-element array of float) @@ -196,8 +201,22 @@ ERROR: node is still EOpNull! 0:218 'c' (5-element array of float) 0:218 'a' (5-element array of float) 0:? Linker Objects +0:? 'a' (int) +0:? 'b' (int) +0:? 'c' (uint) +0:? 'd' (uint) +0:? 'e' (int) +0:? 'f' (uint) +0:? 'g' (int) +0:? 'h' (int) +0:? 'i' (int) +0:? 'j' (int) +0:? 'k' (int) +0:? 'l' (int) 0:? 'fa' (float) +0:? 'fb' (float) 0:? 'fc' (double) +0:? 'fd' (double) 0:? 'texcoord1' (2-component vector of float) 0:? 'texcoord2' (2-component vector of float) 0:? 'position' (3-component vector of float) @@ -212,14 +231,20 @@ ERROR: node is still EOpNull! 0:? 'highPrecisionMVP' (4X4 matrix of double) 0:? 'dm' (2X4 matrix of double) 0:? 'lightVar' (structure) +0:? 'frequencies' (3-element array of float) +0:? 'lightPosition' (uniform 4-element array of 4-component vector of float) +0:? 'lights' (2-element array of structure) +0:? 'numLights' (const int) 0:? 'normal' (smooth in 3-component vector of float) 0:? 'TexCoord' (centroid smooth in 2-component vector of float) 0:? 'Color' (invariant centroid smooth in 4-component vector of float) 0:? 'temperature' (noperspective in float) 0:? 'myColor' (flat in 3-component vector of float) 0:? 'myTexCoord' (centroid noperspective in 2-component vector of float) +0:? 'color' (uniform 3-component vector of float) 0:? 'gl_FragCoord' (gl_FragCoord 4-component vector of float) 0:? 'factor' (layout(location=3 ) out 4-component vector of float) +0:? 'colors' (layout(location=2 ) out 3-element array of 4-component vector of float) 0:? 'gl_FragDepth' (gl_FragDepth float) 0:? 'gl_Color' (smooth in 4-component vector of float) diff --git a/Test/baseResults/specExamples.vert.out b/Test/baseResults/specExamples.vert.out index f8b3a34c..3b9733a1 100644 --- a/Test/baseResults/specExamples.vert.out +++ b/Test/baseResults/specExamples.vert.out @@ -222,6 +222,8 @@ ERROR: node is still EOpNull! 0:? Linker Objects 0:? 'transforms' (layout(shared ) uniform 4-element array of block) 0:? 'normal' (layout(location=3 ) in 4-component vector of float) +0:? 'colors' (layout(location=6 ) in 3-element array of 4-component vector of float) +0:? 's' (layout(location=3 ) structure) 0:? 'var1' (smooth out 4-component vector of float) 0:? 'var5' (smooth out 4-component vector of float) 0:? 'var7' (smooth out 4-component vector of float) @@ -244,6 +246,7 @@ ERROR: node is still EOpNull! 0:? 'd' (in 4-component vector of float) 0:? 'v' (smooth out 4-component vector of float) 0:? '__anon__2' (layout(shared ) uniform block) +0:? 'shv' (shared 4-component vector of float) 0:? 'img1' (uniform image2D) 0:? 'img2' (coherent uniform image2D) 0:? 'gl_VertexID' (gl_VertexId int) diff --git a/Test/baseResults/structure.frag.out b/Test/baseResults/structure.frag.out index a9746621..9d035947 100644 --- a/Test/baseResults/structure.frag.out +++ b/Test/baseResults/structure.frag.out @@ -59,4 +59,5 @@ WARNING: 0:3: varying deprecated in version 130; may be removed in future releas 0:? 'sampler' (uniform sampler2D) 0:? 'coord' (smooth in 2-component vector of float) 0:? 'foo' (uniform structure) +0:? 'foo2' (uniform 5-element array of structure) diff --git a/Test/baseResults/tokenLength.vert.out b/Test/baseResults/tokenLength.vert.out index 613a81c9..f371596d 100644 --- a/Test/baseResults/tokenLength.vert.out +++ b/Test/baseResults/tokenLength.vert.out @@ -77,7 +77,19 @@ ERROR: node is still EOpNull! 0:? Linker Objects 0:? 'BCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789' (in highp float) 0:? 'ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789' (in highp float) +0:? 'E1' (highp int) +0:? 'E2' (highp int) +0:? 'B' (highp int) +0:? 'OE' (highp int) +0:? 'HE' (highp int) +0:? 'F' (highp float) +0:? 'G' (highp float) +0:? 'E3' (highp float) 0:? 'BCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789B' (highp float) +0:? 'superH' (highp int) +0:? 'superO' (highp int) +0:? 'superI' (highp int) +0:? 'superF' (highp float) 0:? 'gl_VertexID' (gl_VertexId highp int) 0:? 'gl_InstanceID' (gl_InstanceId highp int) diff --git a/Test/baseResults/uniformArray.frag.out b/Test/baseResults/uniformArray.frag.out index f734c29a..f67d80df 100644 --- a/Test/baseResults/uniformArray.frag.out +++ b/Test/baseResults/uniformArray.frag.out @@ -33,4 +33,6 @@ 0:? Linker Objects 0:? 'texSampler2D' (uniform sampler2D) 0:? 'inColor' (uniform 3-component vector of float) +0:? 'color' (uniform 6-element array of 4-component vector of float) +0:? 'alpha' (uniform 16-element array of float) diff --git a/Test/baseResults/variableArrayIndex.frag.out b/Test/baseResults/variableArrayIndex.frag.out index aa20e6ad..a217c280 100644 --- a/Test/baseResults/variableArrayIndex.frag.out +++ b/Test/baseResults/variableArrayIndex.frag.out @@ -86,6 +86,7 @@ WARNING: 0:3: varying deprecated in version 130; may be removed in future releas 0:? 'sampler' (uniform sampler2D) 0:? 'coord' (smooth in 2-component vector of float) 0:? 'foo' (uniform structure) +0:? 'foo2' (uniform 5-element array of structure) 0:? 'foo3' (uniform structure) 0:? 'Count' (uniform int) diff --git a/Test/baseResults/varyingArray.frag.out b/Test/baseResults/varyingArray.frag.out index 2e0245b5..57048da6 100644 --- a/Test/baseResults/varyingArray.frag.out +++ b/Test/baseResults/varyingArray.frag.out @@ -46,4 +46,6 @@ WARNING: 0:8: varying deprecated in version 130; may be removed in future releas 0:? 'texSampler2D' (uniform sampler2D) 0:? 'color' (smooth in 4-component vector of float) 0:? 'alpha' (smooth in float) +0:? 'gl_TexCoord' (smooth in 6-element array of 4-component vector of float) +0:? 'foo' (smooth in 3-element array of 4-component vector of float) diff --git a/Test/baseResults/varyingArrayIndirect.frag.out b/Test/baseResults/varyingArrayIndirect.frag.out index 5db8488c..8e60670d 100644 --- a/Test/baseResults/varyingArrayIndirect.frag.out +++ b/Test/baseResults/varyingArrayIndirect.frag.out @@ -50,6 +50,8 @@ WARNING: 0:8: varying deprecated in version 130; may be removed in future releas 0:? 'texSampler2D' (uniform sampler2D) 0:? 'color' (smooth in 4-component vector of float) 0:? 'alpha' (smooth in float) +0:? 'gl_TexCoord' (smooth in 6-element array of 4-component vector of float) +0:? 'userIn' (smooth in 2-element array of 4-component vector of float) 0:? 'a' (uniform int) 0:? 'b' (uniform int) diff --git a/Test/baseResults/voidFunction.frag.out b/Test/baseResults/voidFunction.frag.out index 4070c71f..3f8254a4 100644 --- a/Test/baseResults/voidFunction.frag.out +++ b/Test/baseResults/voidFunction.frag.out @@ -36,4 +36,5 @@ 0:? 'bigColor' (uniform 4-component vector of float) 0:? 'BaseColor' (smooth in 4-component vector of float) 0:? 'd' (uniform float) +0:? 'bar' (float) diff --git a/Test/decls.frag b/Test/decls.frag new file mode 100644 index 00000000..e76d3857 --- /dev/null +++ b/Test/decls.frag @@ -0,0 +1,34 @@ +#version 120 + +int a; +int b, c; +int d1 = 1; +int e2 = 2, f; +int g, h3 = 3; + +int i4[4]; +int j, k5[5]; +int m6[6], m7[7]; +int n8[8], p; + +int ii4[4] = int[](1, 2, 3, 4); +int ij, ik5[5] = int[](5, 6, 7, 8, 9); +int im2[2] = int[](10, 11), im3[3] = int[](12, 13, 14); +int in8[4] = int[](21, 22, 23, 24), ip; + +void vi4[4] = int[](1, 2, 3, 4); +void vj, vk5[5] = int[](5, 6, 7, 8, 9); +void vm2[2] = int[](10, 11), vm3[3] = int[](12, 13, 14); +void vn8[4] = int[](21, 22, 23, 24), vp; + +int gl_vi4[4] = int[](1, 2, 3, 4); +int gl_vj, gl_vk5[5] = int[](5, 6, 7, 8, 9); +int gl_vm2[2] = int[](10, 11), gl_vm3[3] = int[](12, 13, 14); +int gl_vn8[4] = int[](21, 22, 23, 24), gl_vp; + +void main() +{ + while (bool cond = b < c); + while (int icond = b); + while (bool gl_cond = b < c); +} diff --git a/Test/testlist b/Test/testlist index ef826951..24fd1e59 100644 --- a/Test/testlist +++ b/Test/testlist @@ -1,5 +1,6 @@ sample.frag sample.vert +decls.frag specExamples.frag specExamples.vert versionsClean.frag diff --git a/Todo.txt b/Todo.txt index 84784b27..3fbabcce 100644 --- a/Todo.txt +++ b/Todo.txt @@ -4,6 +4,7 @@ Link Validation + provide input config file for setting limits - also consider spitting out measures of complexity + ensure no static references thrown away + - generate static use of object even if the only use is to access the length of its array Cross-stage linking - type consistency check of uniform and ins <-> outs, both variables and blocks, stage-specific arrayness matching - location/binding/index check @@ -20,7 +21,6 @@ Link Validation Intra-stage linking + exactly one main + type consistency check of uniforms, globals, ins, and outs - - still need to cover arrays and the combinations of this rule with redeclarations of built-ins - value checking of global const initializers - value checking of uniform initializers + location match diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index feee5b94..c33e41bf 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -588,6 +588,7 @@ public: arraySizes = NewPoolTArraySizes(); *arraySizes = *s; } + void setArraySizes(const TType& type) { setArraySizes(type.arraySizes); } void changeArraySize(int s) { arraySizes->sizes.front() = s; } void setMaxArraySize (int s) { arraySizes->maxArraySize = s; } diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index 20212c94..ebf6d142 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -644,7 +644,8 @@ TIntermAggregate* TIntermediate::growAggregate(TIntermNode* left, TIntermNode* r TIntermAggregate* TIntermediate::growAggregate(TIntermNode* left, TIntermNode* right, TSourceLoc loc) { TIntermAggregate* aggNode = growAggregate(left, right); - aggNode->setLoc(loc); + if (aggNode) + aggNode->setLoc(loc); return aggNode; } diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index d41a31d4..c364c061 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -1325,13 +1325,13 @@ bool TParseContext::constructorError(TSourceLoc loc, TIntermNode* node, TFunctio return false; } -// This function checks to see if a void variable has been declared and raise an error message for such a case +// Checks to see if a void variable has been declared and raise an error message for such a case // // returns true in case of an error // -bool TParseContext::voidErrorCheck(TSourceLoc loc, const TString& identifier, const TPublicType& pubType) +bool TParseContext::voidErrorCheck(TSourceLoc loc, const TString& identifier, const TBasicType basicType) { - if (pubType.basicType == EbtVoid) { + if (basicType == EbtVoid) { error(loc, "illegal use of type 'void'", identifier.c_str(), ""); return true; } @@ -1646,12 +1646,12 @@ void TParseContext::arraySizeCheck(TSourceLoc loc, TIntermTyped* expr, int& size // // Returns true if there is an error. // -bool TParseContext::arrayQualifierError(TSourceLoc loc, const TPublicType& type) +bool TParseContext::arrayQualifierError(TSourceLoc loc, const TQualifier& qualifier) { - if (type.qualifier.storage == EvqConst) + if (qualifier.storage == EvqConst) profileRequires(loc, ENoProfile, 120, "GL_3DL_array_objects", "const array"); - if (type.qualifier.storage == EvqVaryingIn && language == EShLangVertex) { + if (qualifier.storage == EvqVaryingIn && language == EShLangVertex) { requireProfile(loc, (EProfileMask)~EEsProfileMask, "vertex input arrays"); profileRequires(loc, ENoProfile, 150, 0, "vertex input arrays"); } @@ -1698,7 +1698,7 @@ void TParseContext::arrayDimCheck(TSourceLoc loc, const TType* type, TArraySizes // // size == 0 means no specified size. // -void TParseContext::arrayCheck(TSourceLoc loc, TString& identifier, const TPublicType& type, TVariable*& variable) +void TParseContext::declareArray(TSourceLoc loc, TString& identifier, const TType& type, TVariable*& variable, bool& newDeclaration) { // // Don't check for reserved word use until after we know it's not in the symbol table, @@ -1710,46 +1710,39 @@ void TParseContext::arrayCheck(TSourceLoc loc, TString& identifier, const TPubli // Redeclarations have to take place at the same scope; otherwise they are hiding declarations // - bool currentScope; - TSymbol* symbol = symbolTable.find(identifier, 0, ¤tScope); - if (symbol == 0 || ! currentScope) { - if (reservedErrorCheck(loc, identifier)) - return; + if (! variable) { + bool currentScope; + TSymbol* symbol = symbolTable.find(identifier, 0, ¤tScope); + if (symbol == 0 || ! currentScope) { + variable = new TVariable(&identifier, type); + symbolTable.insert(*variable); + newDeclaration = true; - variable = new TVariable(&identifier, TType(type)); - symbolTable.insert(*variable); - } else { + return; + } variable = symbol->getAsVariable(); + } - if (! variable) { - error(loc, "array variable name expected", identifier.c_str(), ""); - return; - } + if (! variable) { + error(loc, "array variable name expected", identifier.c_str(), ""); + return; + } - if (! variable->getType().isArray()) { - error(loc, "redeclaring non-array as array", identifier.c_str(), ""); - return; - } - if (variable->getType().getArraySize() > 0) { - error(loc, "redeclaration of array with size", identifier.c_str(), ""); - return; - } + if (! variable->getType().isArray()) { + error(loc, "redeclaring non-array as array", identifier.c_str(), ""); + return; + } + if (variable->getType().getArraySize() > 0) { + error(loc, "redeclaration of array with size", identifier.c_str(), ""); + return; + } - if (! variable->getType().sameElementType(TType(type))) { - error(loc, "redeclaration of array with a different type", identifier.c_str(), ""); - return; - } - - // For read-only built-ins, add a new variable for holding the declared array size of an implicitly-sized shared array. - if (variable->isReadOnly()) - variable = symbolTable.copyUp(variable); - - // TODO: desktop unsized arrays: include modified built-in arrays (gl_TexCoord) in the linker objects subtree - - variable->getWritableType().setArraySizes(type.arraySizes); - } - - voidErrorCheck(loc, identifier, type); + if (! variable->getType().sameElementType(type)) { + error(loc, "redeclaration of array with a different type", identifier.c_str(), ""); + return; + } + + variable->getWritableType().setArraySizes(type); } bool TParseContext::arraySetMaxSize(TSourceLoc loc, TIntermSymbol *node, int size) @@ -1793,55 +1786,31 @@ bool TParseContext::arraySetMaxSize(TSourceLoc loc, TIntermSymbol *node, int siz // // Enforce non-initializer type/qualifier rules. // -void TParseContext::nonInitConstCheck(TSourceLoc loc, TString& identifier, TPublicType& type) +void TParseContext::nonInitConstCheck(TSourceLoc loc, TString& identifier, TType& type) { // // Make the qualifier make sense. // - if (type.qualifier.storage == EvqConst) { - type.qualifier.storage = EvqTemporary; + if (type.getQualifier().storage == EvqConst) { + type.getQualifier().storage = EvqTemporary; error(loc, "variables with qualifier 'const' must be initialized", identifier.c_str(), ""); } } // -// Do semantic checking for a variable declaration that has no initializer, -// and update the symbol table. +// See if the identifier is a built-in symbol that can be redeclared, and if so, +// copy the symbol table's read-only built-in variable to the current +// global level, where it can be modified based on the passed in type. // -void TParseContext::nonInitCheck(TSourceLoc loc, TString& identifier, TPublicType& publicType) +// Returns 0 if no redeclaration took place; meaning a normal declaration still +// needs to occur for it, not necessarily an error. +// +// Returns a redeclared and type-modified variable if a redeclarated occurred. +// +// Will emit +// +TVariable* TParseContext::redeclareBuiltin(TSourceLoc loc, const TString& identifier, const TType& type, bool& newDeclaration) { - TType type(publicType); - - bool newDeclaration; // true if a new entry gets added to the symbol table - TVariable* variable = redeclare(loc, identifier, type, newDeclaration); - - if (! variable) { - reservedErrorCheck(loc, identifier); - variable = new TVariable(&identifier, type); - if (! symbolTable.insert(*variable)) - error(loc, "redefinition", variable->getName().c_str(), ""); - else - newDeclaration = true; - } - - if (newDeclaration) { - voidErrorCheck(loc, identifier, publicType); - - // see if it's a linker-level object to track - if (type.getQualifier().isUniform() || type.getQualifier().isPipeInput() || type.getQualifier().isPipeOutput() || type.getQualifier().storage == EvqGlobal) - intermediate.addSymbolLinkageNode(linkage, *variable); - } -} - -// -// See if the identifier is a built-in symbol that can be redeclared, -// and if so, copy of the symbol table's read-only built-in to the current -// global level, so it can be modified. -// -TVariable* TParseContext::redeclare(TSourceLoc loc, const TString& identifier, const TType& type, bool& newDeclaration) -{ - newDeclaration = false; // true if a new entry gets added to the symbol table - if (profile == EEsProfile || identifier.substr(0, 3) != TString("gl_") || symbolTable.atBuiltInLevel()) return 0; @@ -1864,24 +1833,28 @@ TVariable* TParseContext::redeclare(TSourceLoc loc, const TString& identifier, c bool builtIn; TSymbol* symbol = symbolTable.find(identifier, &builtIn); - // If the symbol was not found, this must be a version/profile/stage + // If the symbol was not found, this must be a version/profile/stage // that doesn't have it. if (! symbol) return 0; TVariable* variable = symbol->getAsVariable(); - // If it wasn't at a built-in level, then it's already been redeclared - if (! builtIn) - return variable; + // If it wasn't at a built-in level, then it's already been redeclared; + // that is, this is a redeclaration of a redeclaration, reuse that initial + // redeclaration. Otherwise, make the new one. + if (builtIn) { + // Copy the symbol up to make a writable version + newDeclaration = true; + variable = symbolTable.copyUp(variable); + } - // Otherwise, time to copy the symbol up to make a writable version - newDeclaration = true; - variable = symbolTable.copyUp(variable); + // Now, modify the type of the copy, as per the type of the current redeclaration. + // TODO: functionality: verify type change is allowed and make the change in type + return variable; } - error(loc, "cannot redeclare this built-in variable", identifier.c_str(), ""); return 0; } @@ -2013,44 +1986,102 @@ const TFunction* TParseContext::findFunction(TSourceLoc loc, TFunction* call, bo } // -// Handle all types of initializers from the grammar. +// Do everything necessary to handle a variable (non-block) declaration. +// Either redeclaring a variable, or making a new one, updating the symbol +// table, and all error checking. // -bool TParseContext::executeInitializerError(TSourceLoc loc, TString& identifier, TPublicType& pType, - TIntermTyped* initializer, TIntermNode*& intermNode, TVariable* variable) +// Returns a subtree node that computes an initializer, if needed. +// Returns 0 if there is no code to execute for initialization. +// +TIntermNode* TParseContext::declareVariable(TSourceLoc loc, TString& identifier, TPublicType& publicType, TArraySizes* arraySizes, TIntermTyped* initializer) { - TType type(pType); + TType type(publicType); - if (variable == 0) { - if (reservedErrorCheck(loc, identifier)) - return true; + if (voidErrorCheck(loc, identifier, type.getBasicType())) + return 0; - if (voidErrorCheck(loc, identifier, pType)) - return true; + if (! initializer) + nonInitConstCheck(loc, identifier, type); - // - // add variable to symbol table - // - variable = new TVariable(&identifier, type); - if (! symbolTable.insert(*variable)) { - error(loc, "redefinition", variable->getName().c_str(), ""); - return true; - // don't delete variable, it's used by error recovery, and the pool - // pop will take care of the memory + // Check for redeclaration of built-ins and/or attempting to declare a reserved name + bool newDeclaration = false; // true if a new entry gets added to the symbol table + TVariable* variable = redeclareBuiltin(loc, identifier, type, newDeclaration); + if (! variable) + reservedErrorCheck(loc, identifier); + + // Declare the variable + if (arraySizes) { + // for ES, since size isn't coming from an initializer, it has to be explicitly declared now + if (profile == EEsProfile && ! initializer) + arraySizeRequiredCheck(loc, arraySizes->getSize()); + + arrayDimCheck(loc, &type, arraySizes); + if (! arrayQualifierError(loc, type.getQualifier())) { + type.setArraySizes(arraySizes); + declareArray(loc, identifier, type, variable, newDeclaration); } + + if (initializer) + profileRequires(loc, ENoProfile, 120, "GL_3DL_array_objects", "initializer"); + } else { + // non-array case + if (! variable) + variable = declareNonArray(loc, identifier, type, newDeclaration); } + // Deal with initializer + TIntermNode* initNode = 0; + if (variable && initializer) + initNode = executeInitializer(loc, identifier, type, initializer, variable); + + // see if it's a linker-level object to track + if (newDeclaration && symbolTable.atGlobalLevel()) + intermediate.addSymbolLinkageNode(linkage, *variable); + + return initNode; +} + +// +// Declare a non-array variable, the main point being there is no redeclaration +// for resizing allowed. +// +// Return the successfully declared variable. +// +TVariable* TParseContext::declareNonArray(TSourceLoc loc, TString& identifier, TType& type, bool& newDeclaration) +{ + // make a new variable + TVariable* variable = new TVariable(&identifier, type); + + // add variable to symbol table + if (! symbolTable.insert(*variable)) { + error(loc, "redefinition", variable->getName().c_str(), ""); + return 0; + } else { + newDeclaration = true; + return variable; + } +} + +// +// Handle all types of initializers from the grammar. +// +TIntermNode* TParseContext::executeInitializer(TSourceLoc loc, TString& identifier, TType& type, + TIntermTyped* initializer, TVariable* variable) +{ // - // identifier must be of type constant, a global, or a temporary + // Identifier must be of type constant, a global, or a temporary, and + // starting at version 120, desktop allows uniforms to have initializers. // TStorageQualifier qualifier = variable->getType().getQualifier().storage; - if ((qualifier != EvqTemporary) && (qualifier != EvqGlobal) && (qualifier != EvqConst)) { + if (! (qualifier == EvqTemporary || qualifier == EvqGlobal || qualifier == EvqConst || + qualifier == EvqUniform && profile != EEsProfile && version >= 120)) { error(loc, " cannot initialize this type of qualifier ", variable->getType().getStorageQualifierString(), ""); - return true; + return 0; } // Fix arrayness if variable is unsized, getting size for initializer if (initializer->getType().isArray() && initializer->getType().getArraySize() > 0 && - type.isArray() && type.getArraySize() == 0) + type.isArray() && type.getArraySize() == 0) type.changeArraySize(initializer->getType().getArraySize()); // @@ -2060,13 +2091,13 @@ bool TParseContext::executeInitializerError(TSourceLoc loc, TString& identifier, if (qualifier != initializer->getType().getQualifier().storage) { error(loc, " assigning non-constant to", "=", "'%s'", variable->getType().getCompleteString().c_str()); variable->getWritableType().getQualifier().storage = EvqTemporary; - return true; + return 0; } if (type != initializer->getType()) { error(loc, " non-matching types for const initializer ", variable->getType().getStorageQualifierString(), ""); variable->getWritableType().getQualifier().storage = EvqTemporary; - return true; + return 0; } if (initializer->getAsConstantUnion()) { TConstUnion* unionArray = variable->getConstUnionPointer(); @@ -2083,26 +2114,25 @@ bool TParseContext::executeInitializerError(TSourceLoc loc, TString& identifier, variable->shareConstPointer(constArray); } else { error(loc, "expected variable", initializer->getAsSymbolNode()->getName().c_str(), ""); - return true; + return 0; } } else { error(loc, " cannot assign to", "=", "'%s'", variable->getType().getCompleteString().c_str()); variable->getWritableType().getQualifier().storage = EvqTemporary; - return true; + return 0; } } if (qualifier != EvqConst) { TIntermSymbol* intermSymbol = intermediate.addSymbol(variable->getUniqueId(), variable->getName(), variable->getType(), loc); - intermNode = intermediate.addAssign(EOpAssign, intermSymbol, initializer, loc); - if (intermNode == 0) { + TIntermNode* initNode = intermediate.addAssign(EOpAssign, intermSymbol, initializer, loc); + if (! initNode) assignError(loc, "=", intermSymbol->getCompleteString(), initializer->getCompleteString()); - return true; - } - } else - intermNode = 0; - return false; + return initNode; + } + + return 0; } // This function is used to test for the correctness of the parameters passed to various constructor functions diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h index 2737553c..f40cd784 100644 --- a/glslang/MachineIndependent/ParseHelper.h +++ b/glslang/MachineIndependent/ParseHelper.h @@ -100,13 +100,12 @@ public: void globalCheck(TSourceLoc, bool global, const char* token); bool constructorError(TSourceLoc, TIntermNode*, TFunction&, TOperator, TType&); void arraySizeCheck(TSourceLoc, TIntermTyped* expr, int& size); - bool arrayQualifierError(TSourceLoc, const TPublicType&); + bool arrayQualifierError(TSourceLoc, const TQualifier&); void arraySizeRequiredCheck(TSourceLoc, int size); void arrayDimError(TSourceLoc); void arrayDimCheck(TSourceLoc, TArraySizes* sizes1, TArraySizes* sizes2); void arrayDimCheck(TSourceLoc, const TType*, TArraySizes*); - void arrayCheck(TSourceLoc, TString& identifier, const TPublicType&, TVariable*& variable); - bool voidErrorCheck(TSourceLoc, const TString&, const TPublicType&); + bool voidErrorCheck(TSourceLoc, const TString&, TBasicType); void boolCheck(TSourceLoc, const TIntermTyped*); void boolCheck(TSourceLoc, const TPublicType&); bool samplerErrorCheck(TSourceLoc, const TPublicType& pType, const char* reason); @@ -119,9 +118,7 @@ public: void precisionQualifierCheck(TSourceLoc, TPublicType&); void parameterSamplerCheck(TSourceLoc, TStorageQualifier qualifier, const TType& type); bool containsSampler(const TType& type); - void nonInitConstCheck(TSourceLoc, TString& identifier, TPublicType& type); - void nonInitCheck(TSourceLoc, TString& identifier, TPublicType& type); - TVariable* redeclare(TSourceLoc, const TString&, const TType&, bool& newDeclaration); + TVariable* redeclareBuiltin(TSourceLoc, const TString&, const TType&, bool& newDeclaration); void paramCheck(TSourceLoc, TStorageQualifier qualifier, TType* type); void nestedBlockCheck(TSourceLoc); void nestedStructCheck(TSourceLoc); @@ -131,8 +128,7 @@ public: void mergeLayoutQualifiers(TSourceLoc, TQualifier& dest, const TQualifier& src); const TFunction* findFunction(TSourceLoc, TFunction* pfnCall, bool *builtIn = 0); - bool executeInitializerError(TSourceLoc, TString& identifier, TPublicType& pType, - TIntermTyped* initializer, TIntermNode*& intermNode, TVariable* variable = 0); + TIntermNode* declareVariable(TSourceLoc, TString& identifier, TPublicType&, TArraySizes* typeArray = 0, TIntermTyped* initializer = 0); TIntermTyped* addConstructor(TIntermNode*, const TType&, TOperator, TFunction*, TSourceLoc); TIntermTyped* constructStruct(TIntermNode*, const TType&, int, TSourceLoc); TIntermTyped* constructBuiltIn(const TType&, TOperator, TIntermNode*, TSourceLoc, bool subset); @@ -170,6 +166,11 @@ public: protected: const char* getPreamble(); TBehavior getExtensionBehavior(const char* behavior); + void nonInitConstCheck(TSourceLoc, TString& identifier, TType& type); + TVariable* TParseContext::declareNonArray(TSourceLoc, TString& identifier, TType&, bool& newDeclaration); + void declareArray(TSourceLoc, TString& identifier, const TType&, TVariable*&, bool& newDeclaration); + TIntermNode* executeInitializer(TSourceLoc, TString& identifier, TType&, TIntermTyped* initializer, TVariable* variable); + public: // diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y index 73688db1..614bf419 100644 --- a/glslang/MachineIndependent/glslang.y +++ b/glslang/MachineIndependent/glslang.y @@ -972,61 +972,21 @@ init_declarator_list } | init_declarator_list COMMA IDENTIFIER { $$ = $1; - parseContext.nonInitConstCheck($3.loc, *$3.string, $$.type); - parseContext.nonInitCheck($3.loc, *$3.string, $$.type); + parseContext.declareVariable($3.loc, *$3.string, $1.type); } | init_declarator_list COMMA IDENTIFIER array_specifier { - parseContext.nonInitConstCheck($3.loc, *$3.string, $1.type); - if (parseContext.profile == EEsProfile) - parseContext.arraySizeRequiredCheck($4.loc, $4.arraySizes->getSize()); - parseContext.arrayDimCheck($3.loc, $1.type.arraySizes, $4.arraySizes); - $$ = $1; - - if (! parseContext.arrayQualifierError($4.loc, $1.type)) { - $1.type.arraySizes = $4.arraySizes; - TVariable* variable; - parseContext.arrayCheck($4.loc, *$3.string, $1.type, variable); - } + parseContext.declareVariable($3.loc, *$3.string, $1.type, $4.arraySizes); } | init_declarator_list COMMA IDENTIFIER array_specifier EQUAL initializer { - $$ = $1; - - TVariable* variable = 0; - if (! parseContext.arrayQualifierError($4.loc, $1.type)) { - $1.type.arraySizes = $4.arraySizes; - parseContext.arrayCheck($4.loc, *$3.string, $1.type, variable); - } - parseContext.arrayDimCheck($3.loc, $1.type.arraySizes, $4.arraySizes); - - parseContext.profileRequires($5.loc, ENoProfile, 120, "GL_3DL_array_objects", "initializer"); - - TIntermNode* intermNode; - if (! parseContext.executeInitializerError($3.loc, *$3.string, $1.type, $6, intermNode, variable)) { - // - // build the intermediate representation - // - if (intermNode) - $$.intermAggregate = parseContext.intermediate.growAggregate($1.intermNode, intermNode, $5.loc); - else - $$.intermAggregate = $1.intermAggregate; - } else - $$.intermAggregate = 0; + $$.type = $1.type; + TIntermNode* initNode = parseContext.declareVariable($3.loc, *$3.string, $1.type, $4.arraySizes, $6); + $$.intermAggregate = parseContext.intermediate.growAggregate($1.intermAggregate, initNode, $5.loc); } | init_declarator_list COMMA IDENTIFIER EQUAL initializer { - $$ = $1; - - TIntermNode* intermNode; - if (!parseContext.executeInitializerError($3.loc, *$3.string, $1.type, $5, intermNode)) { - // - // build the intermediate representation - // - if (intermNode) - $$.intermAggregate = parseContext.intermediate.growAggregate($1.intermNode, intermNode, $4.loc); - else - $$.intermAggregate = $1.intermAggregate; - } else - $$.intermAggregate = 0; + $$.type = $1.type; + TIntermNode* initNode = parseContext.declareVariable($3.loc, *$3.string, $1.type, 0, $5); + $$.intermAggregate = parseContext.intermediate.growAggregate($1.intermAggregate, initNode, $4.loc); } ; @@ -1037,70 +997,26 @@ single_declaration parseContext.updateTypedDefaults($1.loc, $$.type.qualifier, 0); } | fully_specified_type IDENTIFIER { - $$.intermAggregate = 0; $$.type = $1; - - parseContext.nonInitConstCheck($2.loc, *$2.string, $$.type); - parseContext.nonInitCheck($2.loc, *$2.string, $$.type); - + $$.intermAggregate = 0; + parseContext.declareVariable($2.loc, *$2.string, $1); parseContext.updateTypedDefaults($2.loc, $$.type.qualifier, $2.string); } | fully_specified_type IDENTIFIER array_specifier { - $$.intermAggregate = 0; - parseContext.nonInitConstCheck($2.loc, *$2.string, $1); - if (parseContext.profile == EEsProfile) - parseContext.arraySizeRequiredCheck($3.loc, $3.arraySizes->getSize()); - parseContext.arrayDimCheck($2.loc, $1.arraySizes, $3.arraySizes); - $$.type = $1; - - if (! parseContext.arrayQualifierError($3.loc, $1)) { - $1.arraySizes = $3.arraySizes; - TVariable* variable; - parseContext.arrayCheck($3.loc, *$2.string, $1, variable); - } + $$.intermAggregate = 0; + parseContext.declareVariable($2.loc, *$2.string, $1, $3.arraySizes); parseContext.updateTypedDefaults($2.loc, $$.type.qualifier, $2.string); } - | fully_specified_type IDENTIFIER array_specifier EQUAL initializer { - parseContext.arrayDimCheck($3.loc, $1.arraySizes, $3.arraySizes); - - $$.intermAggregate = 0; + | fully_specified_type IDENTIFIER array_specifier EQUAL initializer { $$.type = $1; - - TVariable* variable = 0; - if (! parseContext.arrayQualifierError($3.loc, $1)) { - $1.arraySizes = $3.arraySizes; - parseContext.arrayCheck($3.loc, *$2.string, $1, variable); - } - - parseContext.profileRequires($4.loc, ENoProfile, 120, "GL_3DL_array_objects", "initializer"); - - TIntermNode* intermNode; - if (!parseContext.executeInitializerError($2.loc, *$2.string, $1, $5, intermNode, variable)) { - // - // Build intermediate representation - // - if (intermNode) - $$.intermAggregate = parseContext.intermediate.makeAggregate(intermNode, $4.loc); - else - $$.intermAggregate = 0; - } else - $$.intermAggregate = 0; + TIntermNode* initNode = parseContext.declareVariable($2.loc, *$2.string, $1, $3.arraySizes, $5); + $$.intermAggregate = parseContext.intermediate.growAggregate(0, initNode, $4.loc); } | fully_specified_type IDENTIFIER EQUAL initializer { $$.type = $1; - - TIntermNode* intermNode; - if (!parseContext.executeInitializerError($2.loc, *$2.string, $1, $4, intermNode)) { - // - // Build intermediate representation - // - if (intermNode) - $$.intermAggregate = parseContext.intermediate.makeAggregate(intermNode, $3.loc); - else - $$.intermAggregate = 0; - } else - $$.intermAggregate = 0; + TIntermNode* initNode = parseContext.declareVariable($2.loc, *$2.string, $1, 0, $4); + $$.intermAggregate = parseContext.intermediate.growAggregate(0, initNode, $3.loc); } // Grammar Note: No 'enum', or 'typedef'. @@ -1128,7 +1044,7 @@ fully_specified_type parseContext.arraySizeRequiredCheck($2.loc, $2.arraySizes->getSize()); } - if ($2.arraySizes && parseContext.arrayQualifierError($2.loc, $1)) + if ($2.arraySizes && parseContext.arrayQualifierError($2.loc, $1.qualifier)) $2.arraySizes = 0; parseContext.mergeQualifiers($2.loc, $2.qualifier, $1.qualifier, true); @@ -2121,7 +2037,7 @@ struct_declaration $$ = $2; - parseContext.voidErrorCheck($1.loc, (*$2)[0].type->getFieldName(), $1); + parseContext.voidErrorCheck($1.loc, (*$2)[0].type->getFieldName(), $1.basicType); parseContext.precisionQualifierCheck($1.loc, $1); for (unsigned int i = 0; i < $$->size(); ++i) { @@ -2139,7 +2055,7 @@ struct_declaration $$ = $3; - parseContext.voidErrorCheck($2.loc, (*$3)[0].type->getFieldName(), $2); + parseContext.voidErrorCheck($2.loc, (*$3)[0].type->getFieldName(), $2.basicType); parseContext.mergeQualifiers($2.loc, $2.qualifier, $1.qualifier, true); parseContext.precisionQualifierCheck($2.loc, $2); @@ -2302,13 +2218,14 @@ condition parseContext.boolCheck($1->getLoc(), $1); } | fully_specified_type IDENTIFIER EQUAL initializer { - TIntermNode* intermNode; parseContext.boolCheck($2.loc, $1); - if (parseContext.executeInitializerError($2.loc, *$2.string, $1, $4, intermNode)) - $$ = 0; + TType type($1); + TIntermNode* initNode = parseContext.declareVariable($2.loc, *$2.string, $1, 0, $4); + if (initNode) + $$ = initNode->getAsTyped(); else - $$ = $4; + $$ = 0; } ;