From 8ec55cdcd2815a0d91e2d2c69e56b3300323f1b9 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Tue, 5 Nov 2013 18:07:25 +0000 Subject: [PATCH] Clean up/resolve a bunch of TODO, which included implementing pixel_center_integer and origin_upper_left and adjusting what versions see legacy texturing names. git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@23874 e7fa87d3-cd2b-0410-9028-fcbf551c1848 --- Install/Windows/glslangValidator.exe | Bin 369664 -> 375296 bytes Test/130.frag | 6 + Test/150.frag | 14 ++ Test/300.frag | 8 + Test/400.frag | 7 + Test/baseResults/130.frag.out | 7 +- Test/baseResults/150.frag.out | 21 ++ Test/baseResults/150.geom.out | 4 +- Test/baseResults/300.frag.out | 22 +- Test/baseResults/400.frag.out | 21 +- Test/baseResults/410.geom.out | 2 +- Test/baseResults/specExamples.frag.out | 10 +- Test/baseResults/specExamples.vert.out | 4 +- Test/testlist | 1 + Todo.txt | 63 +++--- glslang/Include/Types.h | 36 +++- glslang/MachineIndependent/Constant.cpp | 6 +- glslang/MachineIndependent/Initialize.cpp | 49 +++-- glslang/MachineIndependent/Intermediate.cpp | 2 +- glslang/MachineIndependent/ParseHelper.cpp | 191 ++++++++++++------ glslang/MachineIndependent/ParseHelper.h | 10 +- glslang/MachineIndependent/glslang.y | 21 +- glslang/MachineIndependent/intermOut.cpp | 6 + glslang/MachineIndependent/linkValidate.cpp | 9 +- .../MachineIndependent/localintermediate.h | 8 +- .../preprocessor/PpScanner.cpp | 2 +- .../preprocessor/PpTokens.cpp | 2 +- glslang/OSDependent/Linux/ossource.cpp | 2 +- 28 files changed, 374 insertions(+), 160 deletions(-) create mode 100644 Test/150.frag create mode 100644 Test/baseResults/150.frag.out diff --git a/Install/Windows/glslangValidator.exe b/Install/Windows/glslangValidator.exe index 248a1e4ffc51d0c8599c60ae77c5b9afb6118d37..24272a3983d2c18fbde74f02f0de81d3ab33e40c 100644 GIT binary patch delta 143714 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

G|Y07Us;C- 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 delta 138487 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 E56*~Co&W#< diff --git a/Test/130.frag b/Test/130.frag index c65cd0ef..3099a47b 100644 --- a/Test/130.frag +++ b/Test/130.frag @@ -31,3 +31,9 @@ void bar() { vec4 s = textureGather(sampC, vec3(0.2)); } + +flat in vec3 gl_Color; // ERROR, type +in vec4 gl_Color; +flat in vec4 gl_Color; +flat in vec4 gl_Color[2]; // ERROR, array +vec4 gl_Color; // ERROR, storage diff --git a/Test/150.frag b/Test/150.frag new file mode 100644 index 00000000..fb15a00f --- /dev/null +++ b/Test/150.frag @@ -0,0 +1,14 @@ +#version 150 core + +in vec4 gl_FragCoord; +layout(origin_upper_left, pixel_center_integer) in vec4 gl_FragCoord; // ERROR +layout(pixel_center_integer) in vec4 gl_FragCoord; // ERROR +layout(origin_upper_left) in vec4 foo; // ERROR +layout(origin_upper_left, pixel_center_integer) in vec4 gl_FragCoord; + +void main() +{ + vec4 c = gl_FragCoord; +} + +layout(origin_upper_left, pixel_center_integer) in vec4 gl_FragCoord; diff --git a/Test/300.frag b/Test/300.frag index 88539cb5..d63c81e2 100644 --- a/Test/300.frag +++ b/Test/300.frag @@ -103,5 +103,13 @@ uniform multi { int c[2][3]; // ERROR } multiInst[2][3]; // ERROR +out vec4 colors[4]; + +void foo() +{ + colors[2] = c4D; + colors[ic1D] = c4D; +} + float imageBuffer; // ERROR, reserved float uimage2DRect; // ERROR, reserved diff --git a/Test/400.frag b/Test/400.frag index b2d83989..82cd3ab0 100644 --- a/Test/400.frag +++ b/Test/400.frag @@ -21,6 +21,8 @@ void main() iv4 = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(1), 4); // ERROR, last argument out of range iv4 = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(1), 1+2); iv4 = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(i)); + + vec4 c = gl_FragCoord; } layout(location = 4) in vec4 vl; // ERROR, not supported @@ -32,3 +34,8 @@ layout(location = 4) in vec4 vl; // ERROR, not supported layout(location = 4) in vec4 vl2; layout(location = 3) uniform vec3 uv3; + +layout(location = 5) in vec4 gl_Color; // ERROR, layout +noperspective in float gl_ClipDistance[4]; // ERROR, can't change qualifier + +layout(origin_upper_left, pixel_center_integer) in vec4 gl_FragCoord; diff --git a/Test/baseResults/130.frag.out b/Test/baseResults/130.frag.out index f6120e9b..55d7e528 100644 --- a/Test/baseResults/130.frag.out +++ b/Test/baseResults/130.frag.out @@ -1,6 +1,9 @@ Warning, version 130 is not yet complete; most features are present, but a few are missing. ERROR: 0:25: 'texture gather function' : not supported for this version or the enabled extensions -ERROR: 1 compilation errors. No code generated. +ERROR: 0:35: 'redeclaration' : cannot change the type of gl_Color +ERROR: 0:38: 'gl_Color' : redeclaring non-array as array +ERROR: 0:39: 'redeclaration' : cannot change storage, memory, or auxiliary qualification of gl_Color +ERROR: 4 compilation errors. No code generated. ERROR: node is still EOpNull! 0:16 Function Definition: main( (void) @@ -48,4 +51,6 @@ ERROR: node is still EOpNull! 0:? 'fnop' (noperspective in float) 0:? 'gl_ClipDistance' (smooth in unsized array of float) 0:? 'sampC' (uniform samplerCube) +0:? 'gl_Color' (smooth in 4-component vector of float) +0:? 'gl_Color' (flat in 4-component vector of float) diff --git a/Test/baseResults/150.frag.out b/Test/baseResults/150.frag.out new file mode 100644 index 00000000..9d98ddfa --- /dev/null +++ b/Test/baseResults/150.frag.out @@ -0,0 +1,21 @@ +Warning, version 150 is not yet complete; some version-specific features are present, but many are missing. +ERROR: 0:4: 'redeclaration' : cannot redeclare with different qualification: gl_FragCoord +ERROR: 0:5: 'redeclaration' : cannot redeclare with different qualification: gl_FragCoord +ERROR: 0:6: 'layout qualifier' : can only apply origin_upper_left and pixel_center_origin to gl_FragCoord +ERROR: 3 compilation errors. No code generated. + +gl_FragCoord pixel center is integer +gl_FragCoord origin is upper left +ERROR: node is still EOpNull! +0:9 Function Definition: main( (void) +0:9 Function Parameters: +0:11 Sequence +0:11 Sequence +0:11 move second child to first child (4-component vector of float) +0:11 'c' (4-component vector of float) +0:11 'gl_FragCoord' (gl_FragCoord 4-component vector of float) +0:? Linker Objects +0:? 'gl_FragCoord' (gl_FragCoord 4-component vector of float) +0:? 'gl_FragCoord' (gl_FragCoord 4-component vector of float) +0:? 'foo' (smooth in 4-component vector of float) + diff --git a/Test/baseResults/150.geom.out b/Test/baseResults/150.geom.out index 186e4a49..0da9b61d 100644 --- a/Test/baseResults/150.geom.out +++ b/Test/baseResults/150.geom.out @@ -71,7 +71,7 @@ ERROR: node is still EOpNull! 0:33 Constant: 0:33 2 (const int) 0:34 move second child to first child (4-component vector of float) -0:34 gl_Position: direct index for structure (layout(stream=0 ) 4-component vector of float) +0:34 gl_Position: direct index for structure (layout(stream=0 ) gl_Position 4-component vector of float) 0:34 '__anon__1' (layout(stream=0 ) out block{gl_Position,gl_PointSize,gl_ClipDistance}) 0:34 Constant: 0:34 0 (const uint) @@ -83,7 +83,7 @@ ERROR: node is still EOpNull! 0:34 Constant: 0:34 0 (const int) 0:35 move second child to first child (float) -0:35 gl_PointSize: direct index for structure (layout(stream=0 ) float) +0:35 gl_PointSize: direct index for structure (layout(stream=0 ) gl_PointSize float) 0:35 '__anon__1' (layout(stream=0 ) out block{gl_Position,gl_PointSize,gl_ClipDistance}) 0:35 Constant: 0:35 1 (const uint) diff --git a/Test/baseResults/300.frag.out b/Test/baseResults/300.frag.out index 670ce24d..2e0d6575 100644 --- a/Test/baseResults/300.frag.out +++ b/Test/baseResults/300.frag.out @@ -17,9 +17,10 @@ ERROR: 0:102: 'arrays of arrays' : not supported with this profile: es ERROR: 0:102: 'arrays of arrays' : not supported with this profile: es ERROR: 0:103: 'arrays of arrays' : not supported with this profile: es ERROR: 0:100: 'arrays of arrays' : not supported with this profile: es -ERROR: 0:106: 'imageBuffer' : Reserved word. -ERROR: 0:106: '' : syntax error -ERROR: 21 compilation errors. No code generated. +ERROR: 0:111: 'variable indexing fragment shader ouput array' : not supported with this profile: es +ERROR: 0:114: 'imageBuffer' : Reserved word. +ERROR: 0:114: '' : syntax error +ERROR: 22 compilation errors. No code generated. ERROR: node is still EOpNull! 0:53 Function Definition: main( (void) @@ -208,6 +209,20 @@ ERROR: node is still EOpNull! 0:96 'c4D' (smooth lowp 4-component vector of float) 0:97 arc hyp. tangent (lowp 3-component vector of float) 0:97 'c3D' (smooth in lowp 3-component vector of float) +0:108 Function Definition: foo( (void) +0:108 Function Parameters: +0:110 Sequence +0:110 move second child to first child (lowp 4-component vector of float) +0:110 direct index (lowp 4-component vector of float) +0:110 'colors' (out 4-element array of lowp 4-component vector of float) +0:110 Constant: +0:110 2 (const int) +0:110 'c4D' (smooth lowp 4-component vector of float) +0:111 move second child to first child (lowp 4-component vector of float) +0:111 indirect index (lowp 4-component vector of float) +0:111 'colors' (out 4-element array of lowp 4-component vector of float) +0:111 'ic1D' (flat in mediump int) +0:111 'c4D' (smooth lowp 4-component vector of float) 0:? Linker Objects 0:? 's2D' (uniform lowp sampler2D) 0:? 's3D' (uniform lowp sampler3D) @@ -240,4 +255,5 @@ ERROR: node is still EOpNull! 0:? 'sf' (out lowp float) 0:? 'arrayedSampler' (uniform 5-element array of lowp sampler2D) 0:? 'multiInst' (layout(column_major shared ) uniform 2-element array of block{a,b,c}) +0:? 'colors' (out 4-element array of lowp 4-component vector of float) diff --git a/Test/baseResults/400.frag.out b/Test/baseResults/400.frag.out index 89396d27..6f478f64 100644 --- a/Test/baseResults/400.frag.out +++ b/Test/baseResults/400.frag.out @@ -1,10 +1,15 @@ Warning, version 400 is not yet complete; some version-specific features are present, but many are missing. ERROR: 0:20: 'texture gather component' : must be a constant ERROR: 0:21: 'texture gather component' : must be 0, 1, 2, or 3 -ERROR: 0:26: 'location qualifier on input' : not supported for this version or the enabled extensions -ERROR: 0:34: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions -ERROR: 4 compilation errors. No code generated. +ERROR: 0:28: 'location qualifier on input' : not supported for this version or the enabled extensions +ERROR: 0:36: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions +ERROR: 0:38: 'redeclaration' : cannot apply layout qualifier to gl_Color +ERROR: 0:39: 'redeclaration' : cannot change qualification of gl_ClipDistance +ERROR: 0:41: 'gl_FragCoord' : cannot redeclare after use +ERROR: 7 compilation errors. No code generated. +gl_FragCoord pixel center is integer +gl_FragCoord origin is upper left ERROR: node is still EOpNull! 0:10 Function Definition: main( (void) 0:10 Function Parameters: @@ -105,6 +110,10 @@ ERROR: node is still EOpNull! 0:23 0.100000 0:23 Construct ivec2 (2-component vector of int) 0:23 'i' (flat in int) +0:25 Sequence +0:25 move second child to first child (4-component vector of float) +0:25 'c' (4-component vector of float) +0:25 'gl_FragCoord' (gl_FragCoord 4-component vector of float) 0:? Linker Objects 0:? 'c2D' (smooth in 2-component vector of float) 0:? 'i' (flat in int) @@ -112,8 +121,12 @@ ERROR: node is still EOpNull! 0:? 'arrayedSampler' (uniform 5-element array of sampler2D) 0:? 'samp2dr' (uniform usampler2DRect) 0:? 'isamp2DA' (uniform isampler2DArray) -0:? 'gl_ClipDistance' (smooth in unsized array of float) +0:? 'gl_ClipDistance' (smooth in 4-element array of float) 0:? 'vl' (layout(location=4 ) smooth in 4-component vector of float) 0:? 'vl2' (layout(location=4 ) smooth in 4-component vector of float) 0:? 'uv3' (layout(location=3 ) uniform 3-component vector of float) +0:? '__anon__0' (in block{gl_FogFragCoord,gl_TexCoord,gl_Color,gl_SecondaryColor}) +0:? '__anon__0' (in block{gl_FogFragCoord,gl_TexCoord,gl_Color,gl_SecondaryColor}) +0:? 'gl_FragCoord' (gl_FragCoord 4-component vector of float) +0:? 'gl_FragCoord' (gl_FragCoord 4-component vector of float) diff --git a/Test/baseResults/410.geom.out b/Test/baseResults/410.geom.out index 5a01691c..0b3acd85 100644 --- a/Test/baseResults/410.geom.out +++ b/Test/baseResults/410.geom.out @@ -32,7 +32,7 @@ ERROR: node is still EOpNull! 0:30 Constant: 0:30 0 (const int) 0:31 move second child to first child (float) -0:31 gl_PointSize: direct index for structure (layout(stream=0 ) float) +0:31 gl_PointSize: direct index for structure (layout(stream=0 ) gl_PointSize float) 0:31 '__anon__0' (layout(stream=0 ) out block{gl_PointSize}) 0:31 Constant: 0:31 0 (const uint) diff --git a/Test/baseResults/specExamples.frag.out b/Test/baseResults/specExamples.frag.out index de312ae8..19a1c155 100644 --- a/Test/baseResults/specExamples.frag.out +++ b/Test/baseResults/specExamples.frag.out @@ -6,10 +6,8 @@ ERROR: 0:37: 'view' : redefinition ERROR: 0:68: 'lightPosition' : redefinition ERROR: 0:75: 'Atten' : member storage qualifier cannot contradict block storage qualifier ERROR: 0:87: 'Color' : redefinition -ERROR: 0:92: 'origin_upper_left' : unrecognized layout identifier, or qualifier requires assignemnt (e.g., binding = 4) -ERROR: 0:93: 'pixel_center_integer' : unrecognized layout identifier, or qualifier requires assignemnt (e.g., binding = 4) -ERROR: 0:94: 'origin_upper_left' : unrecognized layout identifier, or qualifier requires assignemnt (e.g., binding = 4) -ERROR: 0:94: 'pixel_center_integer' : unrecognized layout identifier, or qualifier requires assignemnt (e.g., binding = 4) +ERROR: 0:92: 'redeclaration' : cannot redeclare with different qualification: gl_FragCoord +ERROR: 0:93: 'redeclaration' : cannot redeclare with different qualification: gl_FragCoord ERROR: 0:96: 'early_fragment_tests' : unrecognized layout identifier, or qualifier requires assignemnt (e.g., binding = 4) ERROR: 0:99: 'local_size_x' : there is no such layout identifier for this stage taking an assigned value ERROR: 0:99: 'local_size_y' : there is no such layout identifier for this stage taking an assigned value @@ -48,8 +46,10 @@ ERROR: 0:226: 'in' : not allowed in nested scope ERROR: 0:227: 'in' : not allowed in nested scope ERROR: 0:228: 'in' : not allowed in nested scope ERROR: 0:232: 'out' : not allowed in nested scope -ERROR: 49 compilation errors. No code generated. +ERROR: 47 compilation errors. No code generated. +gl_FragCoord pixel center is integer +gl_FragCoord origin is upper left ERROR: node is still EOpNull! 0:5 Sequence 0:5 move second child to first child (int) diff --git a/Test/baseResults/specExamples.vert.out b/Test/baseResults/specExamples.vert.out index 030d42ef..28039033 100644 --- a/Test/baseResults/specExamples.vert.out +++ b/Test/baseResults/specExamples.vert.out @@ -30,6 +30,8 @@ ERROR: 0:95: 'binding' : requires block, or sampler/image, or atomic-counter typ ERROR: 0:96: 'binding' : requires block, or sampler/image, or atomic-counter type ERROR: 0:97: 'binding' : requires block, or sampler/image, or atomic-counter type ERROR: 0:106: '' : vertex input cannot be further qualified +ERROR: 0:106: 'redeclaration' : cannot change storage, memory, or auxiliary qualification of gl_FrontColor +ERROR: 0:107: 'redeclaration' : cannot change storage, memory, or auxiliary qualification of gl_FrontColor ERROR: 0:112: 'ColorIvn' : identifier not previously declared ERROR: 0:132: 'shared' : not supported in this stage: vertex ERROR: 0:134: '' : function does not return a value: funcA @@ -40,7 +42,7 @@ ERROR: 0:153: '' : function does not return a value: func3 ERROR: 0:192: 'constructor' : constructing from a non-dereferenced array ERROR: 0:193: 'constructor' : constructing from a non-dereferenced array ERROR: 0:194: 'constructor' : constructing from a non-dereferenced array -ERROR: 40 compilation errors. No code generated. +ERROR: 42 compilation errors. No code generated. ERROR: node is still EOpNull! 0:134 Function Definition: funcA(I21; (4-component vector of float) diff --git a/Test/testlist b/Test/testlist index aebde4a5..74d5d84b 100644 --- a/Test/testlist +++ b/Test/testlist @@ -14,6 +14,7 @@ versionsErrors.vert 140.frag 150.vert 150.geom +150.frag precision.frag precision.vert nonSquare.vert diff --git a/Todo.txt b/Todo.txt index f3ce5b49..29ed8c1c 100644 --- a/Todo.txt +++ b/Todo.txt @@ -12,40 +12,49 @@ Link Validation - statically consumed input not produced by previous stage - give error for sharing a packed block - 1.2: matching initializers for uniforms + - 1.3: only statically used built-ins have to be redeclared as flat - 1.5: matching between gl_PerVertex blocks and gl_PerFragment blocks - 1.3: deprecated mixing fixed vertex/fragment stage with programmable fragment/vertex stage. - 4.3: compute shader not combined with any other stages - 4.3: remove cross-version linking restrictions. - 4.3: Allow mismatches in interpolation and auxiliary qualification across stages. - 4.4: A stage contains two different blocks, each with no instance name, where the blocks contain a member with the same name. - Intra-stage linking - - ES 3.0: location aliasing/overlap (except desktop vertex shader inputs) - + ES 3.0: fragment outputs all have locations, if more than one + Intra-stage linking, single shader + - limits checking: + - number of texture image units + - texel offsets (or compile-time?) + - number of input/output compononents + - tessellation limits + - ... + exactly one main - + Non ES: type consistency check of uniforms, globals, ins, and outs - + Non ES: value checking of global const initializers - + Non ES: value checking of uniform initializers - + Non ES: location match + + ES 3.0: fragment outputs all have locations, if more than one + - ES 3.0: location aliasing/overlap (except desktop vertex shader inputs) + - Non ES: binding overlap? - Non ES: gl_TexCoord can only have a max array size of up to gl_MaxTextureCoords - + recursion for functions - - Non ES: block matching - - Non ES: component/binding/index/offset match check - - Non ES: geometry shader input array sizes and input layout qualifier declaration - - Non ES: compute shader layout(local_size_*) matching - + mixed es/non-es profiles are an error - - Non ES: Even the potential for recursion through subroutine uniforms is an error. - - Non ES: matching redeclarations of interface blocks + + Non ES: geometry shader input array sizes and input layout qualifier declaration - Non ES: read or write to both gl_ClipVertex and gl_ClipDistance - Non ES: write to only one of gl_FragColor, gl_FragData, or user-declared - 1.50: at least one geometry shader says input primitive and at least one says output primitive... - 1.50: at least one geometry shader says max_vertices... - - 1.50: match between all explicit input array sizes and input primitive - - 4.3: Be clear that early_fragment_tests is only needed in one fragment-stage compilation unit. - - 4.3: Be clear that implicit array sizing is only within a stage, not cross stage. - - 4.4: overlapping transform/feedback offsets, offset/stride overflow checks, and stride matching - - 4.4: If gl_FragCoord is redeclared in any fragment shader in a program, it must be redeclared in all the fragment shaders in that program that have a static use gl_FragCoord - 4.4: An interface contains two different blocks, each with no instance name, where the blocks contain a member with the same name. - 4.4: component aliasing (except desktop vertex shader inputs) + Intra-stage linking, multiple shader + + Non ES: type consistency check of uniforms, globals, ins, and outs + + Non ES: value checking of global const initializers + + Non ES: value checking of uniform initializers + + Non ES: location match + + recursion for functions + - Non ES: block matching + - Non ES: component/binding/index/offset match check + - Non ES: compute shader layout(local_size_*) matching + + mixed es/non-es profiles are an error + - Non ES: Even the potential for recursion through subroutine uniforms is an error. + - Non ES: matching redeclarations of interface blocks + - 1.50: match between all explicit input array sizes and input primitive + - 4.3: early_fragment_tests contradictions + - 4.3: implicit array sizing is cross shader within a stage + - 4.4: overlapping transform/feedback offsets, offset/stride overflow checks, and stride matching + - 4.4: If gl_FragCoord is redeclared in any fragment shader in a program, it must be redeclared in all the fragment shaders in that program that have a static use gl_FragCoord Shader Functionality to Implement/Finish ESSL 2.0 (#version 100) @@ -53,19 +62,16 @@ Shader Functionality to Implement/Finish + implement non-inductive array accesses limitation detection ESSL 3.0 - "const" compile-time constant propagation in the front-end has to be complete, for all built-in functions - - add limitation around #define GL_FRAGMENT_PRECISION_HIGH 1 ? GLSL 1.2 + Handle multiple compilation units per stage + Allow initializers on uniform declarations + signature matching takes type conversions into account, ambiguity is an error - - allow constructors to contain non-dereferenced arrays? + - bug: allow constructors to contain non-dereferenced arrays? GLSL 1.3 - . flat is for both user and predeclared built-in in/out variables - GLSL 1.3 (Non-ES) + + flat redeclaration of built-in variables - Preprocessor token pasting (##), ## does macro expansion after pasting not before - - non-perspective (linear) interpolation (noperspective) + + non-perspective (linear) interpolation (noperspective) + add gl_ClipDistance[] to both vertex and fragment shaders - - only statically used built-ins have to be redeclared as flat + Deprecated gl_ClipVertex + deprecate almost all built-in state + ftransform() is deprecated @@ -163,7 +169,7 @@ Shader Functionality to Implement/Finish - Add built-in functions to pack/unpack 16 bit floating-point numbers (ARB_shading_language_pack2f). - packHalf2x16 and unpackHalf2x16 - packSnorm2x16and unpackSnorm2x16 - - Add gl_FragDepthlayout qualifiers to communicate what kind of changes will be made to gl_FragDepth(GL_AMD_conservative depth). + - Add gl_FragDepth layout qualifiers to communicate what kind of changes will be made to gl_FragDepth (GL_AMD_conservative depth). + Add C-style curly brace initializer lists syntax for initializers. Full initialization of aggregates is required when these are used. - Allow .length() to be applied to vectors and matrices, returning the number of components or columns. + Clarify that .length() returns an int type and can be used as a constant integer expression. @@ -188,7 +194,7 @@ Shader Functionality to Implement/Finish member, so that must a have valid index. - Arrays of other objects (uniform blocks) containing implicitly sized arrays will have the same implicit size for all elements of the array. - - Arrays of arrays are now supported, as per the GL_ARB_arrays_of_arraysextension. + - Arrays of arrays are now supported, as per the GL_ARB_arrays_of_arrays extension. - Compute shaders are now supported, as per the GL_ARB_compute_shader extension. - Added imageSize() built-ins to query the dimensions of an image. - Define robust out-of-bounds access behavior when enabled, as per the GL_ARB_robust_buffer_access_behavior extension. @@ -232,3 +238,4 @@ Shader Functionality to Implement/Finish transform feedback buffering. + Bug 10530: To be consistent with ES, include sample types as valid in a precision statement. Note the defaults are irrelevant, as precision qualifiers are not required or have any meaning. + diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index 9ca44076..8edf8bd9 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -386,6 +386,25 @@ public: } }; +// Qualifiers that don't need to be keep per object. They have shader scope, not object scope. +// So, they will not be part of TType, TQualifier, etc. +struct TShaderQualifiers { + TLayoutGeometry geometry; // geometry shader in/out primitives + bool pixelCenterInteger; // fragment shader + bool originUpperLeft; // fragment shader + int invocations; // 0 means no declaration + int maxVertices; + + void init() + { + geometry = ElgNone; + originUpperLeft = false; + pixelCenterInteger = false; + invocations = 0; // 0 means no declaration + maxVertices = 0; + } +}; + // // TPublicType is just temporarily used while parsing and not quite the same // information kept per node in TType. Due to the bison stack, it can't have @@ -399,9 +418,7 @@ public: TBasicType basicType; TSampler sampler; TQualifier qualifier; - TLayoutGeometry geometry; // don't keep this in the qualifier; it's more a per shader than per type - int invocations; // 0 means no declaration - int maxVertices; + TShaderQualifiers shaderQualifiers; int vectorSize : 4; int matrixCols : 4; int matrixRows : 4; @@ -432,9 +449,7 @@ public: initType(loc); sampler.clear(); initQualifiers(global); - geometry = ElgNone; - invocations = 0; // 0 means no declaration - maxVertices = 0; + shaderQualifiers.init(); } void setVector(int s) @@ -793,10 +808,11 @@ public: else totalSize = vectorSize; - if (isArray()) - totalSize *= Max(getArraySize(), getMaxArraySize()); - - // TODO: desktop arrays: it should be ill-defined to get object size if the array is not sized, so the max() above maybe should be an assert + if (isArray()) { + // this function can only be used in paths that don't allow unsized arrays + assert(getArraySize() > 0); + totalSize *= getArraySize(); + } return totalSize; } diff --git a/glslang/MachineIndependent/Constant.cpp b/glslang/MachineIndependent/Constant.cpp index 3559a921..67b90c8e 100644 --- a/glslang/MachineIndependent/Constant.cpp +++ b/glslang/MachineIndependent/Constant.cpp @@ -297,7 +297,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) // but not always. int resultSize; switch (op) { - // TODO: functionality: constant folding: finish listing exceptions to size here + // TODO: 3.0 functionality: constant folding: finish listing exceptions to size here case EOpDeterminant: case EOpAny: case EOpAll: @@ -481,7 +481,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) break; } - // TODO: Functionality: constant folding: the rest of the ops have to be fleshed out + // TODO: 3.0 Functionality: constant folding: the rest of the ops have to be fleshed out case EOpSinh: case EOpCosh: @@ -665,7 +665,7 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode) switch (aggrNode->getOp()) { - // TODO: Functionality: constant folding: the rest of the ops have to be fleshed out + // TODO: 3.0 Functionality: constant folding: the rest of the ops have to be fleshed out case EOpModf: case EOpDistance: diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index f59a1dfc..02311151 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -621,8 +621,9 @@ void TBuiltIns::initialize(int version, EProfile profile) // (Per-stage functions below.) // if ((profile == EEsProfile && version == 100) || - profile == ECompatibilityProfile || - version < 150) { + profile == ECompatibilityProfile || + (profile == ECoreProfile && version < 420) || + profile == ENoProfile) { commonBuiltins.append( "vec4 texture2D(sampler2D, vec2);" @@ -634,8 +635,9 @@ void TBuiltIns::initialize(int version, EProfile profile) "\n"); } - if (profile != EEsProfile && - (profile == ECompatibilityProfile || version < 150)) { + if ( profile == ECompatibilityProfile || + (profile == ECoreProfile && version < 420) || + profile == ENoProfile) { commonBuiltins.append( "vec4 texture1D(sampler1D, float);" @@ -651,8 +653,6 @@ void TBuiltIns::initialize(int version, EProfile profile) "vec4 shadow2DProj(sampler2DShadow, vec4);" "\n"); - - // TODO: functionality: non-ES legacy texturing for Lod, others? } // @@ -686,6 +686,8 @@ void TBuiltIns::initialize(int version, EProfile profile) //============================================================================ // // Prototypes for built-in functions seen by vertex shaders only. + // (Except legacy lod functions, where it depends which release they are + // vertex only.) // //============================================================================ @@ -698,8 +700,16 @@ void TBuiltIns::initialize(int version, EProfile profile) // // Original-style texture Functions with lod. // - if (profile != EEsProfile || version == 100) { - stageBuiltins[EShLangVertex].append( + TString* s; + if (version < 130) + s = &stageBuiltins[EShLangVertex]; + else + s = &commonBuiltins; + if ((profile == EEsProfile && version == 100) || + profile == ECompatibilityProfile || + (profile == ECoreProfile && version < 420) || + profile == ENoProfile) { + s->append( "vec4 texture2DLod(sampler2D, vec2, float);" "vec4 texture2DProjLod(sampler2D, vec3, float);" "vec4 texture2DProjLod(sampler2D, vec4, float);" @@ -707,8 +717,10 @@ void TBuiltIns::initialize(int version, EProfile profile) "\n"); } - if (profile != EEsProfile && version > 100) { - stageBuiltins[EShLangVertex].append( + if ( profile == ECompatibilityProfile || + (profile == ECoreProfile && version < 420) || + profile == ENoProfile) { + s->append( "vec4 texture1DLod(sampler1D, float, float);" "vec4 texture1DProjLod(sampler1D, vec2, float);" "vec4 texture1DProjLod(sampler1D, vec4, float);" @@ -982,7 +994,7 @@ void TBuiltIns::initialize(int version, EProfile profile) if (version >= 430) { stageBuiltins[EShLangCompute].append( "in uvec3 gl_NumWorkGroups;" - // TODO: compute shader: constant with no initializer "const uvec3 gl_WorkGroupSize;" + // TODO: 4.3 functionality: compute shader: constant with no initializer "const uvec3 gl_WorkGroupSize;" "in uvec3 gl_WorkGroupID;" "in uvec3 gl_LocalInvocationID;" @@ -1184,7 +1196,7 @@ void TBuiltIns::initialize(int version, EProfile profile) //============================================================================ if (version >= 400) { - // TODO: tessellation: gl_MaxPatchVertices below needs to move to resources mechanism + // TODO: 4.0 tessellation: gl_MaxPatchVertices below needs to move to resources mechanism stageBuiltins[EShLangTessControl].append( "const int gl_MaxPatchVertices = 32;" ); @@ -1242,7 +1254,7 @@ void TBuiltIns::initialize(int version, EProfile profile) //============================================================================ if (version >= 400) { - // TODO: tessellation: gl_MaxPatchVertices below needs to move to resources mechanism + // TODO: 4.0 tessellation: gl_MaxPatchVertices below needs to move to resources mechanism stageBuiltins[EShLangTessEvaluation].append( "const int gl_MaxPatchVertices = 32;" ); @@ -2084,6 +2096,9 @@ void IdentifyBuiltIns(int version, EProfile profile, EShLanguage language, TSymb // switch(language) { case EShLangVertex: + case EShLangTessControl: + case EShLangTessEvaluation: + case EShLangGeometry: SpecialQualifier("gl_Position", EvqPosition, symbolTable); SpecialQualifier("gl_PointSize", EvqPointSize, symbolTable); SpecialQualifier("gl_ClipVertex", EvqClipVertex, symbolTable); @@ -2091,12 +2106,6 @@ void IdentifyBuiltIns(int version, EProfile profile, EShLanguage language, TSymb SpecialQualifier("gl_InstanceID", EvqInstanceId, symbolTable); break; - case EShLangTessControl: - case EShLangTessEvaluation: - case EShLangGeometry: - // TODO: desktop functionality: support new stages: note it is probably best to stop adding/using special qualifiers, given the passthrough nature of these stages - break; - case EShLangFragment: SpecialQualifier("gl_FrontFacing", EvqFace, symbolTable); SpecialQualifier("gl_FragCoord", EvqFragCoord, symbolTable); @@ -2106,7 +2115,7 @@ void IdentifyBuiltIns(int version, EProfile profile, EShLanguage language, TSymb break; case EShLangCompute: - // TODO: desktop functionality: support new stages + // TODO: 4.3 desktop functionality: compute special variables break; default: diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index d2179451..de1280da 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -867,7 +867,7 @@ void TIntermediate::addSymbolLinkageNodes(TIntermAggregate*& linkage, EShLanguag // //if (ftransformUsed) { - // TODO: desktop: track ftransform() usage + // TODO: 1.1 lowering functionality: track ftransform() usage // addSymbolLinkageNode(root, symbolTable, "gl_Vertex"); // addSymbolLinkageNode(root, symbolTable, "gl_ModelViewProjectionMatrix"); //} diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index a9fc2e2d..d21d95dd 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -54,7 +54,7 @@ TParseContext::TParseContext(TSymbolTable& symt, TIntermediate& interm, bool pb, contextPragma(true, false), loopNestingLevel(0), structNestingLevel(0), tokensBeforeEOF(false), currentScanner(0), numErrors(0), parsingBuiltins(pb), afterEOF(false), - anyIndexLimits(false) + anyIndexLimits(false), fragCoordUsedBeforeRedeclaration(false) { // ensure we always have a linkage node, even if empty, to simplify tree topology algorithms linkage = new TIntermAggregate; @@ -412,11 +412,15 @@ TIntermTyped* TParseContext::handleVariable(TSourceLoc loc, TSymbol* symbol, TSt if (variable->getType().getQualifier().storage == EvqConst) node = intermediate.addConstantUnion(variable->getConstArray(), variable->getType(), loc); else { - // break sharing with built-ins TType* type; if (variable->isReadOnly()) { type = new TType; + // break sharing with built-ins type->deepCopy(variable->getType()); + + // track use of unredeclared gl_FragCoord + if (variable->getName() == "gl_FragCoord") + fragCoordUsedBeforeRedeclaration = true; } else type = &variable->getWritableType(); node = intermediate.addSymbol(variable->getUniqueId(), variable->getName(), *type, loc); @@ -473,6 +477,8 @@ TIntermTyped* TParseContext::handleBracketDereference(TSourceLoc loc, TIntermTyp error(loc, "", "[", "array must be redeclared with a size before being indexed with a variable"); if (base->getBasicType() == EbtBlock) requireProfile(base->getLoc(), ~EEsProfile, "variable indexing block array"); + else if (language == EShLangFragment && base->getQualifier().storage == EvqVaryingOut) + requireProfile(base->getLoc(), ~EEsProfile, "variable indexing fragment shader ouput array"); else if (base->getBasicType() == EbtSampler && version >= 130) { const char* explanation = "variable indexing sampler array"; requireProfile(base->getLoc(), ECoreProfile | ECompatibilityProfile, explanation); @@ -923,7 +929,7 @@ TIntermTyped* TParseContext::handleFunctionCall(TSourceLoc loc, TFunction* fnCal } // generic error recovery - // TODO: coding: localize all the error recoveries that look like this + // TODO: simplification: localize all the error recoveries that look like this, and taking type into account to reduce cascades if (result == 0) { TConstUnionArray unionArray(1); unionArray[0].setDConst(0.0); @@ -1895,19 +1901,18 @@ void TParseContext::declareArray(TSourceLoc loc, TString& identifier, const TTyp void TParseContext::updateMaxArraySize(TSourceLoc loc, TIntermNode *node, int index) { - TIntermSymbol* symbolNode = node->getAsSymbolNode(); - if (! symbolNode) { - // TODO: functionality: unsized arrays: handle members of blocks - return; - } - // maybe there is nothing to do... - // TODO: functionality: unsized arrays: is the node sharing the array type with the symbol table? - if (symbolNode->getType().getMaxArraySize() > index) + TIntermTyped* typedNode = node->getAsTyped(); + if (typedNode->getType().getMaxArraySize() > index) return; // something to do... + // TODO: 1.50 linker: unsized block member array: 'node' could be an expression for a dereference + TIntermSymbol* symbolNode = node->getAsSymbolNode(); + if (! symbolNode) + return; + TSymbol* symbol = symbolTable.find(symbolNode->getName()); assert(symbol); if (symbol == 0) @@ -1919,7 +1924,7 @@ void TParseContext::updateMaxArraySize(TSourceLoc loc, TIntermNode *node, int in } // For read-only built-ins, add a new variable for holding the maximum array size of an implicitly-sized shared array. - // TODO: functionality: unsized arrays: is this new array type shared with the node? + // TODO: desktop linker: unsized arrays: is this new array type shared with the node? if (symbol->isReadOnly()) { symbol = symbolTable.copyUp(symbol); @@ -1959,7 +1964,7 @@ void TParseContext::nonInitConstCheck(TSourceLoc loc, TString& identifier, TType // // Returns a redeclared and type-modified variable if a redeclarated occurred. // -TSymbol* TParseContext::redeclareBuiltinVariable(TSourceLoc loc, const TString& identifier, bool& newDeclaration) +TSymbol* TParseContext::redeclareBuiltinVariable(TSourceLoc loc, const TString& identifier, const TQualifier& qualifier, const TShaderQualifiers& publicType, bool& newDeclaration) { if (profile == EEsProfile || ! builtInName(identifier) || symbolTable.atBuiltInLevel()) return 0; @@ -2003,7 +2008,53 @@ TSymbol* TParseContext::redeclareBuiltinVariable(TSourceLoc loc, const TString& } // 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 + + TQualifier& symbolQualifier = symbol->getWritableType().getQualifier(); + if (identifier == "gl_FrontColor" || + identifier == "gl_BackColor" || + identifier == "gl_FrontSecondaryColor" || + identifier == "gl_BackSecondaryColor" || + identifier == "gl_SecondaryColor" || + identifier == "gl_Color") { + symbolQualifier.flat = qualifier.flat; + symbolQualifier.smooth = qualifier.smooth; + symbolQualifier.nopersp = qualifier.nopersp; + if (qualifier.hasLayout()) + error(loc, "cannot apply layout qualifier to", "redeclaration", symbol->getName().c_str()); + if (qualifier.isMemory() || qualifier.isAuxiliary() || symbol->getType().getQualifier().storage != qualifier.storage) + error(loc, "cannot change storage, memory, or auxiliary qualification of", "redeclaration", symbol->getName().c_str()); + } else if (identifier == "gl_TexCoord" || + identifier == "gl_ClipDistance") { + if (qualifier.hasLayout() || qualifier.isMemory() || qualifier.isAuxiliary() || + qualifier.nopersp != symbolQualifier.nopersp || qualifier.flat != symbolQualifier.flat || + symbolQualifier.storage != qualifier.storage) + error(loc, "cannot change qualification of", "redeclaration", symbol->getName().c_str()); + } else if (identifier == "gl_FragCoord") { + if (fragCoordUsedBeforeRedeclaration) + error(loc, "cannot redeclare after use", "gl_FragCoord", ""); + // Note: this did not catch the case of 1) declare, 2) use, 3) declare again, because the "use" was of a redeclaration, and so didn't set fragCoordUsedBeforeRedeclaration. + // (and that's what the rules are too, as long as #3 matches #1) + if (qualifier.nopersp != symbolQualifier.nopersp || qualifier.flat != symbolQualifier.flat || + qualifier.isMemory() || qualifier.isAuxiliary()) + error(loc, "can only change layout qualification of", "redeclaration", symbol->getName().c_str()); + if (identifier == "gl_FragCoord" && qualifier.storage != EvqVaryingIn) + error(loc, "cannot change input storage qualification of", "redeclaration", symbol->getName().c_str()); + if (! builtIn && (publicType.pixelCenterInteger != intermediate.getPixelCenterInteger() || + publicType.originUpperLeft != intermediate.getOriginUpperLeft())) + error(loc, "cannot redeclare with different qualification:", "redeclaration", symbol->getName().c_str()); + if (publicType.pixelCenterInteger) + intermediate.setPixelCenterInteger(); + if (publicType.originUpperLeft) + intermediate.setOriginUpperLeft(); + } else if (identifier == "gl_FragDepth") { + if (qualifier.nopersp != symbolQualifier.nopersp || qualifier.flat != symbolQualifier.flat || + qualifier.isMemory() || qualifier.isAuxiliary()) + error(loc, "can only change layout qualification of", "redeclaration", symbol->getName().c_str()); + if (qualifier.storage != EvqVaryingOut) + error(loc, "cannot change output storage qualification of", "redeclaration", symbol->getName().c_str()); + // TODO 4.2: gl_FragDepth redeclaration + } + // TODO: semantics quality: separate smooth from nothing declared, then use IsInterpolation for several tests above return symbol; } @@ -2062,7 +2113,7 @@ bool TParseContext::redeclareBuiltinBlock(TSourceLoc loc, TTypeList& typeList, c if (language == EShLangGeometry && block->getType().isArray() && block->getType().getQualifier().storage == EvqVaryingIn) inputArraySymbolResizeList.push_back(block); - // TODO: semantics: block redeclaration: instance array size matching? + // TODO: SSO/4.10 semantics: block redeclaration: instance array size matching // Edit and error check the container against the redeclaration // - remove unused members @@ -2085,7 +2136,7 @@ bool TParseContext::redeclareBuiltinBlock(TSourceLoc loc, TTypeList& typeList, c else member = type.getStruct()->erase(member); - // TODO: semantics: block redeclaration: member type/qualifier matching + // TODO: SSO/4.10 semantics: block redeclaration: member type/qualifier matching } symbolTable.insert(*block); @@ -2306,36 +2357,48 @@ void TParseContext::setLayoutQualifier(TSourceLoc loc, TPublicType& publicType, } if (language == EShLangGeometry || language == EShLangTessEvaluation) { if (id == TQualifier::getGeometryString(ElgTriangles)) { - publicType.geometry = ElgTriangles; + publicType.shaderQualifiers.geometry = ElgTriangles; return; } if (language == EShLangGeometry) { if (id == TQualifier::getGeometryString(ElgPoints)) { - publicType.geometry = ElgPoints; + publicType.shaderQualifiers.geometry = ElgPoints; return; } if (id == TQualifier::getGeometryString(ElgLineStrip)) { - publicType.geometry = ElgLineStrip; + publicType.shaderQualifiers.geometry = ElgLineStrip; return; } if (id == TQualifier::getGeometryString(ElgLines)) { - publicType.geometry = ElgLines; + publicType.shaderQualifiers.geometry = ElgLines; return; } if (id == TQualifier::getGeometryString(ElgLinesAdjacency)) { - publicType.geometry = ElgLinesAdjacency; + publicType.shaderQualifiers.geometry = ElgLinesAdjacency; return; } if (id == TQualifier::getGeometryString(ElgTrianglesAdjacency)) { - publicType.geometry = ElgTrianglesAdjacency; + publicType.shaderQualifiers.geometry = ElgTrianglesAdjacency; return; } if (id == TQualifier::getGeometryString(ElgTriangleStrip)) { - publicType.geometry = ElgTriangleStrip; + publicType.shaderQualifiers.geometry = ElgTriangleStrip; return; } } else { - // TODO: tessellation evaluation + // TODO: 4.0 tessellation evaluation + } + } + if (language == EShLangFragment) { + if (id == "origin_upper_left") { + requireProfile(loc, ECoreProfile | ECompatibilityProfile, "origin_upper_left"); + publicType.shaderQualifiers.originUpperLeft = true; + return; + } + if (id == "pixel_center_integer") { + requireProfile(loc, ECoreProfile | ECompatibilityProfile, "pixel_center_integer"); + publicType.shaderQualifiers.pixelCenterInteger = true; + return; } } error(loc, "unrecognized layout identifier, or qualifier requires assignemnt (e.g., binding = 4)", id.c_str(), ""); @@ -2345,6 +2408,12 @@ void TParseContext::setLayoutQualifier(TSourceLoc loc, TPublicType& publicType, // type information for error checking. void TParseContext::setLayoutQualifier(TSourceLoc loc, TPublicType& publicType, TString& id, int value) { + if (value < 0) { + error(loc, "cannot be negative", "layout qualifier value", ""); + return; + // TODO: 4.4: test the above, once expressions are allowed; until then, can't even express a negative location + } + std::transform(id.begin(), id.end(), id.begin(), ::tolower); if (id == "location") { requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, "location"); @@ -2367,11 +2436,11 @@ void TParseContext::setLayoutQualifier(TSourceLoc loc, TPublicType& publicType, if (language == EShLangGeometry) { if (id == "invocations") { profileRequires(loc, ECompatibilityProfile | ECoreProfile, 400, 0, "invocations"); - publicType.invocations = value; + publicType.shaderQualifiers.invocations = value; return; } if (id == "max_vertices") { - publicType.maxVertices = value; + publicType.shaderQualifiers.maxVertices = value; return; } if (id == "stream") { @@ -2380,16 +2449,13 @@ void TParseContext::setLayoutQualifier(TSourceLoc loc, TPublicType& publicType, } } error(loc, "there is no such layout identifier for this stage taking an assigned value", id.c_str(), ""); - - // TODO: semantics: error check: make sure locations are non-overlapping across the whole stage - // TODO: semantics: error check: output arrays can only be indexed with a constant (es 300) } // // Merge characteristics of the 'src' qualifier into the 'dst', at the TPublicType level, // which means for layout-qualifier information not kept per qualifier. // -void TParseContext::mergeShaderLayoutQualifiers(TSourceLoc loc, TPublicType& dst, const TPublicType& src) +void TParseContext::mergeShaderLayoutQualifiers(TSourceLoc loc, TShaderQualifiers& dst, const TShaderQualifiers& src) { if (src.geometry != ElgNone) dst.geometry = src.geometry; @@ -2397,6 +2463,10 @@ void TParseContext::mergeShaderLayoutQualifiers(TSourceLoc loc, TPublicType& dst dst.invocations = src.invocations; if (src.maxVertices != 0) dst.maxVertices = src.maxVertices; + if (src.pixelCenterInteger) + dst.pixelCenterInteger = src.pixelCenterInteger; + if (src.originUpperLeft) + dst.originUpperLeft = src.originUpperLeft; } // Merge any layout qualifier information from src into dst, leaving everything else in dst alone @@ -2464,11 +2534,11 @@ void TParseContext::layoutTypeCheck(TSourceLoc loc, const TSymbol& symbol) // an array of size N, all elements of the array from binding through binding + N – 1 must be within this // range." // - // TODO: binding error checking against limits, arrays + // TODO: 4.2 binding limits: binding error checking against limits, arrays // if (type.getBasicType() != EbtSampler && type.getBasicType() != EbtBlock) error(loc, "requires block, or sampler/image, or atomic-counter type", "binding", ""); - // TODO: atomic counter functionality: include in test above + // TODO: 4.2 functionality: atomic counter: include in test above } } @@ -2527,15 +2597,15 @@ void TParseContext::layoutQualifierCheck(TSourceLoc loc, const TQualifier& quali } // For places that can't have shader-level layout qualifiers -void TParseContext::checkNoShaderLayouts(TSourceLoc loc, const TPublicType& publicType) +void TParseContext::checkNoShaderLayouts(TSourceLoc loc, const TShaderQualifiers& shaderQualifiers) { const char* message = "can only apply to a standalone qualifier"; - if (publicType.geometry != ElgNone) - error(loc, message, TQualifier::getGeometryString(publicType.geometry), ""); - if (publicType.invocations > 0) + if (shaderQualifiers.geometry != ElgNone) + error(loc, message, TQualifier::getGeometryString(shaderQualifiers.geometry), ""); + if (shaderQualifiers.invocations > 0) error(loc, message, "invocations", ""); - if (publicType.maxVertices > 0) + if (shaderQualifiers.maxVertices > 0) error(loc, message, "max_vertices", ""); } @@ -2658,7 +2728,7 @@ const TFunction* TParseContext::findFunction400(TSourceLoc loc, const TFunction& // 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) +TIntermNode* TParseContext::declareVariable(TSourceLoc loc, TString& identifier, const TPublicType& publicType, TArraySizes* arraySizes, TIntermTyped* initializer) { TType type(publicType); @@ -2672,9 +2742,12 @@ TIntermNode* TParseContext::declareVariable(TSourceLoc loc, TString& identifier, if (! type.getQualifier().hasStream() && language == EShLangGeometry && type.getQualifier().storage == EvqVaryingOut) type.getQualifier().layoutStream = globalOutputDefaults.layoutStream; + if (identifier != "gl_FragCoord" && (publicType.shaderQualifiers.originUpperLeft || publicType.shaderQualifiers.pixelCenterInteger)) + error(loc, "can only apply origin_upper_left and pixel_center_origin to gl_FragCoord", "layout qualifier", ""); + // 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 - TSymbol* symbol = redeclareBuiltinVariable(loc, identifier, newDeclaration); + TSymbol* symbol = redeclareBuiltinVariable(loc, identifier, type.getQualifier(), publicType.shaderQualifiers, newDeclaration); if (! symbol) reservedErrorCheck(loc, identifier); @@ -2698,6 +2771,8 @@ TIntermNode* TParseContext::declareVariable(TSourceLoc loc, TString& identifier, // non-array case if (! symbol) symbol = declareNonArray(loc, identifier, type, newDeclaration); + else if (type != symbol->getType()) + error(loc, "cannot change the type of", "redeclaration", symbol->getName().c_str()); } // Deal with initializer @@ -2859,7 +2934,7 @@ TIntermTyped* TParseContext::convertInitializerList(TSourceLoc loc, const TType& arrayType.setArraySizes(type); arrayType.changeArraySize(initList->getSequence().size()); TType elementType; - elementType.shallowCopy(arrayType); // TODO: arrays of arrays: combine this with deref. + elementType.shallowCopy(arrayType); // TODO: 4.3 simplification: arrays of arrays: combine this with deref. elementType.dereference(); for (size_t i = 0; i < initList->getSequence().size(); ++i) { initList->getSequence()[i] = convertInitializerList(loc, elementType, initList->getSequence()[i]->getAsTyped()); @@ -2884,7 +2959,7 @@ TIntermTyped* TParseContext::convertInitializerList(TSourceLoc loc, const TType& return 0; } TType vectorType; - vectorType.shallowCopy(type); // TODO: arrays of arrays: combine this with deref. + vectorType.shallowCopy(type); // TODO: 4.3 simplification: arrays of arrays: combine this with deref. vectorType.dereference(); for (int i = 0; i < type.getMatrixCols(); ++i) { initList->getSequence()[i] = convertInitializerList(loc, vectorType, initList->getSequence()[i]->getAsTyped()); @@ -2925,7 +3000,7 @@ TIntermTyped* TParseContext::addConstructor(TSourceLoc loc, TIntermNode* node, c TType elementType; elementType.shallowCopy(type); if (type.isArray()) - elementType.dereference(); // TODO: arrays of arrays: combine this with shallowCopy + elementType.dereference(); // TODO: 4.3 simplification: arrays of arrays: combine this with deref. bool singleArg; if (aggrNode) { @@ -3280,43 +3355,43 @@ void TParseContext::addQualifierToExisting(TSourceLoc loc, TQualifier qualifier, // void TParseContext::updateStandaloneQualifierDefaults(TSourceLoc loc, const TPublicType& publicType) { - if (publicType.maxVertices) { - if (! intermediate.setMaxVertices(publicType.maxVertices)) + if (publicType.shaderQualifiers.maxVertices) { + if (! intermediate.setMaxVertices(publicType.shaderQualifiers.maxVertices)) error(loc, "cannot change previously set layout value", "max_vertices", ""); } - if (publicType.invocations) { - if (! intermediate.setInvocations(publicType.invocations)) + if (publicType.shaderQualifiers.invocations) { + if (! intermediate.setInvocations(publicType.shaderQualifiers.invocations)) error(loc, "cannot change previously set layout value", "invocations", ""); } - if (publicType.geometry != ElgNone) { + if (publicType.shaderQualifiers.geometry != ElgNone) { if (publicType.qualifier.storage == EvqVaryingIn) { - switch (publicType.geometry) { + switch (publicType.shaderQualifiers.geometry) { case ElgPoints: case ElgLines: case ElgLinesAdjacency: case ElgTriangles: case ElgTrianglesAdjacency: - if (intermediate.setInputPrimitive(publicType.geometry)) + if (intermediate.setInputPrimitive(publicType.shaderQualifiers.geometry)) checkInputArrayConsistency(loc); else - error(loc, "cannot change previously set input primitive", TQualifier::getGeometryString(publicType.geometry), ""); + error(loc, "cannot change previously set input primitive", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), ""); break; default: - error(loc, "does not apply to input", TQualifier::getGeometryString(publicType.geometry), ""); + error(loc, "does not apply to input", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), ""); } } else if (publicType.qualifier.storage == EvqVaryingOut) { - switch (publicType.geometry) { + switch (publicType.shaderQualifiers.geometry) { case ElgPoints: case ElgLineStrip: case ElgTriangleStrip: - if (! intermediate.setOutputPrimitive(publicType.geometry)) - error(loc, "cannot change previously set output primitive", TQualifier::getGeometryString(publicType.geometry), ""); + if (! intermediate.setOutputPrimitive(publicType.shaderQualifiers.geometry)) + error(loc, "cannot change previously set output primitive", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), ""); break; default: - error(loc, "does not only apply to output", TQualifier::getGeometryString(publicType.geometry), ""); + error(loc, "does not only apply to output", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), ""); } } else - error(loc, "cannot be used here", TQualifier::getGeometryString(publicType.geometry), ""); + error(loc, "cannot be used here", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), ""); } const TQualifier& qualifier = publicType.qualifier; @@ -3472,7 +3547,7 @@ TIntermNode* TParseContext::addSwitch(TSourceLoc loc, TIntermTyped* expression, return switchNode; } -// TODO: constant folding: these should use a follow a fully folded model now, and probably move to Constant.cpp scheme. +// TODO: simplification: constant folding: these should use a follow a fully folded model now, and probably move to Constant.cpp scheme. // // This function returns the tree representation for the vector field(s) being accessed from a constant vector. @@ -3552,7 +3627,7 @@ TIntermTyped* TParseContext::addConstArrayNode(int index, TIntermTyped* node, TS TIntermTyped* typedNode; TIntermConstantUnion* tempConstantNode = node->getAsConstantUnion(); TType arrayElementType; - arrayElementType.shallowCopy(node->getType()); // TODO: arrays of arrays: combine this with deref. + arrayElementType.shallowCopy(node->getType()); // TODO: 4.3 simplification: arrays of arrays: combine this with deref. arrayElementType.dereference(); if (index >= node->getType().getArraySize() || index < 0) { diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h index 7e499e7d..7ff225d7 100644 --- a/glslang/MachineIndependent/ParseHelper.h +++ b/glslang/MachineIndependent/ParseHelper.h @@ -122,7 +122,7 @@ public: void precisionQualifierCheck(TSourceLoc, TPublicType&); void parameterSamplerCheck(TSourceLoc, TStorageQualifier qualifier, const TType& type); bool containsSampler(const TType& type); - TSymbol* redeclareBuiltinVariable(TSourceLoc, const TString&, bool& newDeclaration); + TSymbol* redeclareBuiltinVariable(TSourceLoc, const TString&, const TQualifier&, const TShaderQualifiers&, bool& newDeclaration); bool redeclareBuiltinBlock(TSourceLoc, TTypeList& typeList, const TString& blockName, const TString* instanceName, TArraySizes* arraySizes); void paramCheck(TSourceLoc, const TStorageQualifier&, TType* type); void nestedBlockCheck(TSourceLoc); @@ -134,17 +134,17 @@ public: void setLayoutQualifier(TSourceLoc, TPublicType&, TString&); void setLayoutQualifier(TSourceLoc, TPublicType&, TString&, int); - void mergeShaderLayoutQualifiers(TSourceLoc, TPublicType& dst, const TPublicType& src); + void mergeShaderLayoutQualifiers(TSourceLoc, TShaderQualifiers& dst, const TShaderQualifiers& src); void mergeObjectLayoutQualifiers(TSourceLoc, TQualifier& dest, const TQualifier& src); void layoutTypeCheck(TSourceLoc, const TSymbol&); void layoutQualifierCheck(TSourceLoc, const TQualifier&); - void checkNoShaderLayouts(TSourceLoc, const TPublicType&); + void checkNoShaderLayouts(TSourceLoc, const TShaderQualifiers&); const TFunction* findFunction(TSourceLoc loc, const TFunction& call, bool& builtIn); const TFunction* findFunctionExact(TSourceLoc loc, const TFunction& call, bool& builtIn); const TFunction* findFunction120(TSourceLoc loc, const TFunction& call, bool& builtIn); const TFunction* findFunction400(TSourceLoc loc, const TFunction& call, bool& builtIn); - TIntermNode* declareVariable(TSourceLoc, TString& identifier, TPublicType&, TArraySizes* typeArray = 0, TIntermTyped* initializer = 0); + TIntermNode* declareVariable(TSourceLoc, TString& identifier, const TPublicType&, TArraySizes* typeArray = 0, TIntermTyped* initializer = 0); TIntermTyped* addConstructor(TSourceLoc, TIntermNode*, const TType&, TOperator); TIntermTyped* constructStruct(TIntermNode*, const TType&, int, TSourceLoc); TIntermTyped* constructBuiltIn(const TType&, TOperator, TIntermNode*, TSourceLoc, bool subset); @@ -241,7 +241,7 @@ protected: TIdSetType inductiveLoopIds; bool anyIndexLimits; TVector needsIndexLimitationChecking; - // TODO: desktop functionality: track use of gl_FragDepth before redeclaration + bool fragCoordUsedBeforeRedeclaration; // // Geometry shader input arrays: diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y index 56bb3a51..cd1966a2 100644 --- a/glslang/MachineIndependent/glslang.y +++ b/glslang/MachineIndependent/glslang.y @@ -779,13 +779,13 @@ declaration } | type_qualifier IDENTIFIER SEMICOLON { parseContext.pipeInOutFix($1.loc, $1.qualifier); - parseContext.checkNoShaderLayouts($1.loc, $1); + parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers); parseContext.addQualifierToExisting($1.loc, $1.qualifier, *$2.string); $$ = 0; } | type_qualifier IDENTIFIER identifier_list SEMICOLON { parseContext.pipeInOutFix($1.loc, $1.qualifier); - parseContext.checkNoShaderLayouts($1.loc, $1); + parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers); $3->push_back($2.string); parseContext.addQualifierToExisting($1.loc, $1.qualifier, *$3); $$ = 0; @@ -797,7 +797,7 @@ block_structure --parseContext.structNestingLevel; parseContext.blockName = $2.string; parseContext.pipeInOutFix($1.loc, $1.qualifier); - parseContext.checkNoShaderLayouts($1.loc, $1); + parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers); parseContext.currentBlockQualifier = $1.qualifier; $$.loc = $1.loc; $$.typeList = $5; @@ -919,7 +919,7 @@ parameter_declaration if ($1.qualifier.precision != EpqNone) $$.param.type->getQualifier().precision = $1.qualifier.precision; - parseContext.checkNoShaderLayouts($1.loc, $1); + parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers); parseContext.parameterSamplerCheck($2.loc, $1.qualifier.storage, *$$.param.type); parseContext.paramCheck($1.loc, $1.qualifier.storage, $$.param.type); } @@ -937,7 +937,7 @@ parameter_declaration if ($1.qualifier.precision != EpqNone) $$.param.type->getQualifier().precision = $1.qualifier.precision; - parseContext.checkNoShaderLayouts($1.loc, $1); + parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers); parseContext.parameterSamplerCheck($2.loc, $1.qualifier.storage, *$$.param.type); parseContext.paramCheck($1.loc, $1.qualifier.storage, $$.param.type); } @@ -1038,7 +1038,8 @@ fully_specified_type if ($2.arraySizes && parseContext.arrayQualifierError($2.loc, $1.qualifier)) $2.arraySizes = 0; - parseContext.checkNoShaderLayouts($2.loc, $1); + parseContext.checkNoShaderLayouts($2.loc, $1.shaderQualifiers); + parseContext.mergeShaderLayoutQualifiers($2.loc, $2.shaderQualifiers, $1.shaderQualifiers); parseContext.mergeQualifiers($2.loc, $2.qualifier, $1.qualifier, true); parseContext.precisionQualifierCheck($2.loc, $2); @@ -1095,7 +1096,7 @@ layout_qualifier_id_list } | layout_qualifier_id_list COMMA layout_qualifier_id { $$ = $1; - parseContext.mergeShaderLayoutQualifiers($2.loc, $$, $3); + parseContext.mergeShaderLayoutQualifiers($2.loc, $$.shaderQualifiers, $3.shaderQualifiers); parseContext.mergeObjectLayoutQualifiers($2.loc, $$.qualifier, $3.qualifier); } @@ -1134,7 +1135,7 @@ type_qualifier if ($$.basicType == EbtVoid) $$.basicType = $2.basicType; - parseContext.mergeShaderLayoutQualifiers($$.loc, $$, $2); + parseContext.mergeShaderLayoutQualifiers($$.loc, $$.shaderQualifiers, $2.shaderQualifiers); parseContext.mergeQualifiers($$.loc, $$.qualifier, $2.qualifier, false); } ; @@ -1569,7 +1570,7 @@ type_specifier_nonarray $$.setMatrix(4, 4); } | ATOMIC_UINT { - // TODO: 4.2 functionality: add type + // TODO: 4.2 functionality: add atomic_uint type $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); $$.basicType = EbtInt; } @@ -2051,7 +2052,7 @@ struct_declaration $$ = $3; - parseContext.checkNoShaderLayouts($1.loc, $1); + parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers); parseContext.voidErrorCheck($2.loc, (*$3)[0].type->getFieldName(), $2.basicType); parseContext.mergeQualifiers($2.loc, $2.qualifier, $1.qualifier, true); parseContext.precisionQualifierCheck($2.loc, $2); diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp index e16d9705..e5543c96 100644 --- a/glslang/MachineIndependent/intermOut.cpp +++ b/glslang/MachineIndependent/intermOut.cpp @@ -585,6 +585,12 @@ void TIntermediate::outputTree(TInfoSink& infoSink) infoSink.debug << "input primitive = " << TQualifier::getGeometryString(inputPrimitive) << "\n"; infoSink.debug << "output primitive = " << TQualifier::getGeometryString(outputPrimitive) << "\n"; } + if (language == EShLangFragment) { + if (pixelCenterInteger) + infoSink.debug << "gl_FragCoord pixel center is integer\n"; + if (originUpperLeft) + infoSink.debug << "gl_FragCoord origin is upper left\n"; + } if (treeRoot == 0) return; diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index 47d8cb1e..0c1fb7bb 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -73,6 +73,9 @@ void TIntermediate::merge(TInfoSink& infoSink, TIntermediate& unit) (profile == EEsProfile && unit.profile != EEsProfile)) error(infoSink, "Cannot mix ES profile with non-ES profile shaders\n"); + if (originUpperLeft != unit.originUpperLeft || pixelCenterInteger != unit.pixelCenterInteger) + error(infoSink, "gl_FragCoord redeclarations must match across shaders\n"); + if (unit.treeRoot == 0) return; @@ -101,7 +104,7 @@ void TIntermediate::merge(TInfoSink& infoSink, TIntermediate& unit) // void TIntermediate::mergeBodies(TInfoSink& infoSink, TIntermSequence& globals, const TIntermSequence& unitGlobals) { - // TODO: Performance: Processing in alphabetical order will be faster + // TODO: link-time performance: Processing in alphabetical order will be faster // Error check the global objects, not including the linker objects for (unsigned int child = 0; child < globals.size() - 1; ++child) { @@ -157,8 +160,6 @@ void TIntermediate::mergeLinkerObjects(TInfoSink& infoSink, TIntermSequence& lin // // This function only does one of intra- or cross-stage matching per call. // -// TODO: Linker Functionality: this function is under active development -// void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& symbol, const TIntermSymbol& unitSymbol, bool crossStage) { bool writeTypeComparison = false; @@ -340,7 +341,7 @@ void TIntermediate::inOutLocationCheck(TInfoSink& infoSink) bool fragOutWithNoLocation = false; int numFragOut = 0; - // TODO: maps for location collision checking + // TODO: linker functionality: location collision checking TIntermSequence& linkObjects = findLinkerObjects(); for (size_t i = 0; i < linkObjects.size(); ++i) { diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index 7617d9e3..5657fca1 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -57,7 +57,7 @@ class TSymbol; class TIntermediate { public: explicit TIntermediate(EShLanguage l, int v = 0, EProfile p = ENoProfile) : language(l), treeRoot(0), profile(p), version(v), numMains(0), numErrors(0), - invocations(0), maxVertices(0), inputPrimitive(ElgNone), outputPrimitive(ElgNone) { } + invocations(0), maxVertices(0), inputPrimitive(ElgNone), outputPrimitive(ElgNone), pixelCenterInteger(false), originUpperLeft(false) { } void setVersion(int v) { version = v; } int getVersion() const { return version; } @@ -129,6 +129,10 @@ public: outputPrimitive = p; return true; } + void setOriginUpperLeft() { originUpperLeft = true; } + bool getOriginUpperLeft() const { return originUpperLeft; } + void setPixelCenterInteger() { pixelCenterInteger = true; } + bool getPixelCenterInteger() const { return pixelCenterInteger; } void addToCallGraph(TInfoSink&, const TString& caller, const TString& callee); void merge(TInfoSink&, TIntermediate&); @@ -157,6 +161,8 @@ protected: int maxVertices; TLayoutGeometry inputPrimitive; TLayoutGeometry outputPrimitive; + bool pixelCenterInteger; + bool originUpperLeft; // for detecting recursion: pair is struct TCall { diff --git a/glslang/MachineIndependent/preprocessor/PpScanner.cpp b/glslang/MachineIndependent/preprocessor/PpScanner.cpp index 1352deb3..b241ff13 100644 --- a/glslang/MachineIndependent/preprocessor/PpScanner.cpp +++ b/glslang/MachineIndependent/preprocessor/PpScanner.cpp @@ -627,7 +627,7 @@ int TPpContext::byte_scan(TPpContext* pp, InputSrc *in, TPpToken * ppToken) return '.'; } case '/': - // TODO: preprocessor: use the Scan.cpp comment scanner + // TODO: preprocessor simplification: use the Scan.cpp comment scanner ch = pp->currentInput->getch(pp, pp->currentInput, ppToken); if (ch == '/') { do { diff --git a/glslang/MachineIndependent/preprocessor/PpTokens.cpp b/glslang/MachineIndependent/preprocessor/PpTokens.cpp index 00a47a2b..6451e3eb 100644 --- a/glslang/MachineIndependent/preprocessor/PpTokens.cpp +++ b/glslang/MachineIndependent/preprocessor/PpTokens.cpp @@ -299,7 +299,7 @@ void TPpContext::RewindTokenStream(TokenStream *pTok) int TPpContext::ReadToken(TokenStream *pTok, TPpToken *ppToken) { - //TODO: PP: why is this different than byte_scan + //TODO: preprocessor simplification: why is this different than byte_scan char tokenText[TPpToken::maxTokenLength + 1]; int ltoken, len; diff --git a/glslang/OSDependent/Linux/ossource.cpp b/glslang/OSDependent/Linux/ossource.cpp index 03e7b05b..0cef0d1e 100644 --- a/glslang/OSDependent/Linux/ossource.cpp +++ b/glslang/OSDependent/Linux/ossource.cpp @@ -137,7 +137,7 @@ bool OS_FreeTLSIndex(OS_TLSIndex nIndex) return false; } -// TODO: if we need these on linux, flesh them out +// TODO: non-windows: if we need these on linux, flesh them out void InitGlobalLock() { } void GetGlobalLock() { } void ReleaseGlobalLock() { }