Require l-value patch-out indexing to be gl_InvocationID.
authorJohn Kessenich <cepheus@frii.com>
Sat, 28 Nov 2015 22:19:11 +0000 (15:19 -0700)
committerJohn Kessenich <cepheus@frii.com>
Sat, 28 Nov 2015 23:52:25 +0000 (16:52 -0700)
Also, generally allow ES variable indexing of in/out blocks.

16 files changed:
Test/150.tesc
Test/310.frag
Test/310.tesc
Test/400.tesc
Test/420.tesc
Test/450.tesc
Test/baseResults/150.tesc.out
Test/baseResults/310.frag.out
Test/baseResults/310.tesc.out
Test/baseResults/400.tesc.out
Test/baseResults/420.tesc.out
Test/baseResults/450.tesc.out
Test/baseResults/spv.400.tesc.out
Test/spv.400.tesc
glslang/Include/revision.h
glslang/MachineIndependent/ParseHelper.cpp

index b72f0de..66c0f3e 100644 (file)
@@ -25,9 +25,9 @@ void main()
     int pid = gl_PrimitiveID;\r
     int iid = gl_InvocationID;\r
 \r
-    gl_out[1].gl_Position = p;\r
-    gl_out[1].gl_PointSize = ps;\r
-    gl_out[1].gl_ClipDistance[1] = cd;\r
+    gl_out[gl_InvocationID].gl_Position = p;\r
+    gl_out[gl_InvocationID].gl_PointSize = ps;\r
+    gl_out[gl_InvocationID].gl_ClipDistance[1] = cd;\r
 \r
     gl_TessLevelOuter[3] = 3.2;\r
     gl_TessLevelInner[1] = 1.3;\r
index 78f13f6..b08391a 100644 (file)
@@ -166,7 +166,7 @@ void fooIO()
 {\r
     vec4 v = inbinst.v + vAnon;\r
     v *= arrayedInst[2].f;\r
-    v *= arrayedInst[i].f;       // ERROR, not constant\r
+    v *= arrayedInst[i].f;\r
 }\r
 \r
 in vec4 gl_FragCoord;\r
index 8220021..29c3932 100644 (file)
@@ -3,7 +3,7 @@
 #extension GL_OES_tessellation_shader : enable\r
 \r
 layout(vertices = 4) out;\r
-int outa[gl_out.length()];\r
+out int outa[gl_out.length()];\r
 \r
 layout(quads) in;                   // ERROR\r
 layout(ccw) out;                    // ERROR\r
@@ -30,9 +30,9 @@ void main()
     int pid = gl_PrimitiveID;\r
     int iid = gl_InvocationID;\r
 \r
-    gl_out[1].gl_Position = p;\r
-    gl_out[1].gl_PointSize = ps;        // ERROR, need point_size extension\r
-    gl_out[1].gl_ClipDistance[1] = cd;  // ERROR, not in ES\r
+    gl_out[gl_InvocationID].gl_Position = p;\r
+    gl_out[gl_InvocationID].gl_PointSize = ps;        // ERROR, need point_size extension\r
+    gl_out[gl_InvocationID].gl_ClipDistance[1] = cd;  // ERROR, not in ES\r
 \r
     gl_TessLevelOuter[3] = 3.2;\r
     gl_TessLevelInner[1] = 1.3;\r
@@ -112,7 +112,7 @@ out float okaySize[4];
 void pointSize2()\r
 {\r
     float ps = gl_in[1].gl_PointSize;\r
-    gl_out[1].gl_PointSize = ps;\r
+    gl_out[gl_InvocationID].gl_PointSize = ps;\r
 }\r
 \r
 #extension GL_OES_gpu_shader5 : enable\r
@@ -141,3 +141,29 @@ void bb()
     gl_BoundingBoxOES[1] = vec4(1.0);\r
     gl_BoundingBoxOES[2] = vec4(2.0);  // ERROR, overflow\r
 }\r
+\r
+out patch badpatchBName {  // ERROR, array size required\r
+    float f;\r
+} badpatchIName[];\r
+\r
+out patch patchBName {\r
+    float f;\r
+} patchIName[4];\r
+\r
+void outputtingOutparam(out int a)\r
+{\r
+    a = 2;\r
+}\r
+\r
+void outputting()\r
+{\r
+    outa[gl_InvocationID] = 2;\r
+    outa[1] = 2;                         // ERROR, not gl_InvocationID\r
+    gl_out[0].gl_Position = vec4(1.0);   // ERROR, not gl_InvocationID\r
+    outa[1];\r
+    gl_out[0];\r
+    outputtingOutparam(outa[0]);         // ERROR, not gl_InvocationID\r
+    outputtingOutparam(outa[gl_InvocationID]);\r
+    patchIName[1].f = 3.14;\r
+    outa[(gl_InvocationID)] = 2;\r
+}\r
index cf9ba51..950f5de 100644 (file)
@@ -28,9 +28,9 @@ void main()
     int pid = gl_PrimitiveID;\r
     int iid = gl_InvocationID;\r
 \r
-    gl_out[1].gl_Position = p;\r
-    gl_out[1].gl_PointSize = ps;\r
-    gl_out[1].gl_ClipDistance[1] = cd;\r
+    gl_out[gl_InvocationID].gl_Position = p;\r
+    gl_out[gl_InvocationID].gl_PointSize = ps;\r
+    gl_out[gl_InvocationID].gl_ClipDistance[1] = cd;\r
 \r
     gl_TessLevelOuter[3] = 3.2;\r
     gl_TessLevelInner[1] = 1.3;\r
index 93f2386..04ac443 100644 (file)
@@ -22,8 +22,8 @@ void main()
     int pid = gl_PrimitiveID;\r
     int iid = gl_InvocationID;\r
 \r
-    gl_out[1].gl_Position = p;\r
-    gl_out[1].gl_PointSize = ps;        // ERROR\r
+    gl_out[gl_InvocationID].gl_Position = p;\r
+    gl_out[gl_InvocationID].gl_PointSize = ps;        // ERROR\r
 }\r
 \r
 out float outf;  // ERROR, no array\r
index 9cbf71c..75a9bf4 100644 (file)
@@ -6,9 +6,9 @@ in gl_PerVertex {
 \r
 out gl_PerVertex {\r
     float gl_CullDistance[3];\r
-} gl_out[];\r
+} gl_out[4];\r
 \r
 void main()\r
 {\r
-    gl_out[0].gl_CullDistance[2] = gl_in[1].gl_CullDistance[2];\r
+    gl_out[gl_InvocationID].gl_CullDistance[2] = gl_in[1].gl_CullDistance[2];\r
 }\r
index 8e50b81..185789c 100644 (file)
@@ -59,29 +59,26 @@ vertices = 4
 0:26          'gl_InvocationID' (in int InvocationID)\r
 0:28      move second child to first child (temp 4-component vector of float)\r
 0:28        gl_Position: direct index for structure (out 4-component vector of float Position)\r
-0:28          direct index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})\r
+0:28          indirect index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})\r
 0:28            'gl_out' (out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})\r
-0:28            Constant:\r
-0:28              1 (const int)\r
+0:28            'gl_InvocationID' (in int InvocationID)\r
 0:28          Constant:\r
 0:28            0 (const int)\r
 0:28        'p' (temp 4-component vector of float)\r
 0:29      move second child to first child (temp float)\r
 0:29        gl_PointSize: direct index for structure (out float PointSize)\r
-0:29          direct index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})\r
+0:29          indirect index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})\r
 0:29            'gl_out' (out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})\r
-0:29            Constant:\r
-0:29              1 (const int)\r
+0:29            'gl_InvocationID' (in int InvocationID)\r
 0:29          Constant:\r
 0:29            1 (const int)\r
 0:29        'ps' (temp float)\r
 0:30      move second child to first child (temp float)\r
 0:30        direct index (temp float ClipDistance)\r
 0:30          gl_ClipDistance: direct index for structure (out implicitly-sized array of float ClipDistance)\r
-0:30            direct index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})\r
+0:30            indirect index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})\r
 0:30              'gl_out' (out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})\r
-0:30              Constant:\r
-0:30                1 (const int)\r
+0:30              'gl_InvocationID' (in int InvocationID)\r
 0:30            Constant:\r
 0:30              2 (const int)\r
 0:30          Constant:\r
@@ -295,29 +292,26 @@ ERROR: node is still EOpNull!
 0:29          'gl_InvocationID' (in int InvocationID)\r
 0:31      move second child to first child (temp 4-component vector of float)\r
 0:31        gl_Position: direct index for structure (out 4-component vector of float Position)\r
-0:31          direct index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})\r
+0:31          indirect index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})\r
 0:31            'gl_out' (out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})\r
-0:31            Constant:\r
-0:31              1 (const int)\r
+0:31            'gl_InvocationID' (in int InvocationID)\r
 0:31          Constant:\r
 0:31            0 (const int)\r
 0:31        'p' (temp 4-component vector of float)\r
 0:32      move second child to first child (temp float)\r
 0:32        gl_PointSize: direct index for structure (out float PointSize)\r
-0:32          direct index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})\r
+0:32          indirect index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})\r
 0:32            'gl_out' (out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})\r
-0:32            Constant:\r
-0:32              1 (const int)\r
+0:32            'gl_InvocationID' (in int InvocationID)\r
 0:32          Constant:\r
 0:32            1 (const int)\r
 0:32        'ps' (temp float)\r
 0:33      move second child to first child (temp float)\r
 0:33        direct index (temp float ClipDistance)\r
 0:33          gl_ClipDistance: direct index for structure (out implicitly-sized array of float ClipDistance)\r
-0:33            direct index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})\r
+0:33            indirect index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})\r
 0:33              'gl_out' (out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})\r
-0:33              Constant:\r
-0:33                1 (const int)\r
+0:33              'gl_InvocationID' (in int InvocationID)\r
 0:33            Constant:\r
 0:33              2 (const int)\r
 0:33          Constant:\r
@@ -666,17 +660,15 @@ ERROR: node is still EOpNull!
 0:23          'gl_InvocationID' (in int InvocationID)\r
 0:25      move second child to first child (temp 4-component vector of float)\r
 0:25        gl_Position: direct index for structure (out 4-component vector of float Position)\r
-0:25          direct index (temp block{out 4-component vector of float Position gl_Position})\r
+0:25          indirect index (temp block{out 4-component vector of float Position gl_Position})\r
 0:25            'gl_out' (out 3-element array of block{out 4-component vector of float Position gl_Position})\r
-0:25            Constant:\r
-0:25              1 (const int)\r
+0:25            'gl_InvocationID' (in int InvocationID)\r
 0:25          Constant:\r
 0:25            0 (const int)\r
 0:25        'p' (temp 4-component vector of float)\r
-0:26      direct index (temp block{out 4-component vector of float Position gl_Position})\r
+0:26      indirect index (temp block{out 4-component vector of float Position gl_Position})\r
 0:26        'gl_out' (out 3-element array of block{out 4-component vector of float Position gl_Position})\r
-0:26        Constant:\r
-0:26          1 (const int)\r
+0:26        'gl_InvocationID' (in int InvocationID)\r
 0:34  Function Definition: foo( (global void)\r
 0:34    Function Parameters: \r
 0:36    Sequence\r
@@ -982,29 +974,26 @@ vertices = 4
 0:26          'gl_InvocationID' (in int InvocationID)\r
 0:28      move second child to first child (temp 4-component vector of float)\r
 0:28        gl_Position: direct index for structure (out 4-component vector of float Position)\r
-0:28          direct index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})\r
+0:28          indirect index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})\r
 0:28            'gl_out' (out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})\r
-0:28            Constant:\r
-0:28              1 (const int)\r
+0:28            'gl_InvocationID' (in int InvocationID)\r
 0:28          Constant:\r
 0:28            0 (const int)\r
 0:28        'p' (temp 4-component vector of float)\r
 0:29      move second child to first child (temp float)\r
 0:29        gl_PointSize: direct index for structure (out float PointSize)\r
-0:29          direct index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})\r
+0:29          indirect index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})\r
 0:29            'gl_out' (out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})\r
-0:29            Constant:\r
-0:29              1 (const int)\r
+0:29            'gl_InvocationID' (in int InvocationID)\r
 0:29          Constant:\r
 0:29            1 (const int)\r
 0:29        'ps' (temp float)\r
 0:30      move second child to first child (temp float)\r
 0:30        direct index (temp float ClipDistance)\r
 0:30          gl_ClipDistance: direct index for structure (out 1-element array of float ClipDistance)\r
-0:30            direct index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})\r
+0:30            indirect index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})\r
 0:30              'gl_out' (out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})\r
-0:30              Constant:\r
-0:30                1 (const int)\r
+0:30              'gl_InvocationID' (in int InvocationID)\r
 0:30            Constant:\r
 0:30              2 (const int)\r
 0:30          Constant:\r
@@ -1080,29 +1069,26 @@ vertices = 4
 0:29          'gl_InvocationID' (in int InvocationID)\r
 0:31      move second child to first child (temp 4-component vector of float)\r
 0:31        gl_Position: direct index for structure (out 4-component vector of float Position)\r
-0:31          direct index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})\r
+0:31          indirect index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})\r
 0:31            'gl_out' (out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})\r
-0:31            Constant:\r
-0:31              1 (const int)\r
+0:31            'gl_InvocationID' (in int InvocationID)\r
 0:31          Constant:\r
 0:31            0 (const int)\r
 0:31        'p' (temp 4-component vector of float)\r
 0:32      move second child to first child (temp float)\r
 0:32        gl_PointSize: direct index for structure (out float PointSize)\r
-0:32          direct index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})\r
+0:32          indirect index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})\r
 0:32            'gl_out' (out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})\r
-0:32            Constant:\r
-0:32              1 (const int)\r
+0:32            'gl_InvocationID' (in int InvocationID)\r
 0:32          Constant:\r
 0:32            1 (const int)\r
 0:32        'ps' (temp float)\r
 0:33      move second child to first child (temp float)\r
 0:33        direct index (temp float ClipDistance)\r
 0:33          gl_ClipDistance: direct index for structure (out 1-element array of float ClipDistance)\r
-0:33            direct index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})\r
+0:33            indirect index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})\r
 0:33              'gl_out' (out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})\r
-0:33              Constant:\r
-0:33                1 (const int)\r
+0:33              'gl_InvocationID' (in int InvocationID)\r
 0:33            Constant:\r
 0:33              2 (const int)\r
 0:33          Constant:\r
@@ -1248,17 +1234,15 @@ vertices = 4
 0:23          'gl_InvocationID' (in int InvocationID)\r
 0:25      move second child to first child (temp 4-component vector of float)\r
 0:25        gl_Position: direct index for structure (out 4-component vector of float Position)\r
-0:25          direct index (temp block{out 4-component vector of float Position gl_Position})\r
+0:25          indirect index (temp block{out 4-component vector of float Position gl_Position})\r
 0:25            'gl_out' (out 3-element array of block{out 4-component vector of float Position gl_Position})\r
-0:25            Constant:\r
-0:25              1 (const int)\r
+0:25            'gl_InvocationID' (in int InvocationID)\r
 0:25          Constant:\r
 0:25            0 (const int)\r
 0:25        'p' (temp 4-component vector of float)\r
-0:26      direct index (temp block{out 4-component vector of float Position gl_Position})\r
+0:26      indirect index (temp block{out 4-component vector of float Position gl_Position})\r
 0:26        'gl_out' (out 3-element array of block{out 4-component vector of float Position gl_Position})\r
-0:26        Constant:\r
-0:26          1 (const int)\r
+0:26        'gl_InvocationID' (in int InvocationID)\r
 0:34  Function Definition: foo( (global void)\r
 0:34    Function Parameters: \r
 0:36    Sequence\r
index 9769eb6..9cfd0ef 100644 (file)
@@ -49,7 +49,6 @@ ERROR: 0:148: 'inbname2' : Cannot reuse block name within the same interface: in
 ERROR: 0:153: 'badmember' : nameless block contains a member that already has a name at global scope \r
 ERROR: 0:157: 'inbname' : redefinition \r
 ERROR: 0:159: 'vAnon' : redefinition \r
-ERROR: 0:169: 'variable indexing in/out block array' : not supported with this profile: es\r
 ERROR: 0:173: 'origin_upper_left' : not supported with this profile: es\r
 ERROR: 0:173: 'pixel_center_integer' : not supported with this profile: es\r
 ERROR: 0:173: 'redeclaration' : cannot redeclare with different qualification: gl_FragCoord\r
@@ -130,7 +129,7 @@ ERROR: 0:427: 'blend equation' : can only apply to a standalone qualifier
 ERROR: 0:428: 'blend equation' : can only apply to a standalone qualifier \r
 ERROR: 0:429: 'blend_support' : unknown blend equation \r
 ERROR: 0:431: 'fragment-shader array-of-array output' : not supported with this profile: es\r
-ERROR: 122 compilation errors.  No code generated.\r
+ERROR: 121 compilation errors.  No code generated.\r
 \r
 \r
 Shader version: 310\r
index 9bf8ab5..a498674 100644 (file)
@@ -41,7 +41,11 @@ ERROR: 0:133: 'gl_BoundingBoxOES' : required extension not requested: Possible e
 GL_EXT_primitive_bounding_box\r
 GL_OES_primitive_bounding_box\r
 ERROR: 0:142: '[' :  array index out of range '2'\r
-ERROR: 33 compilation errors.  No code generated.\r
+ERROR: 0:145: '' : array size required \r
+ERROR: 0:161: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID \r
+ERROR: 0:162: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID \r
+ERROR: 0:165: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID \r
+ERROR: 37 compilation errors.  No code generated.\r
 \r
 \r
 Shader version: 310\r
@@ -101,19 +105,17 @@ ERROR: node is still EOpNull!
 0:31          'gl_InvocationID' (in highp int InvocationID)\r
 0:33      move second child to first child (temp highp 4-component vector of float)\r
 0:33        gl_Position: direct index for structure (out highp 4-component vector of float Position)\r
-0:33          direct index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
+0:33          indirect index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
 0:33            'gl_out' (out 4-element array of block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
-0:33            Constant:\r
-0:33              1 (const int)\r
+0:33            'gl_InvocationID' (in highp int InvocationID)\r
 0:33          Constant:\r
 0:33            0 (const int)\r
 0:33        'p' (temp highp 4-component vector of float)\r
 0:34      move second child to first child (temp highp float)\r
 0:34        gl_PointSize: direct index for structure (out highp float PointSize)\r
-0:34          direct index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
+0:34          indirect index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
 0:34            'gl_out' (out 4-element array of block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
-0:34            Constant:\r
-0:34              1 (const int)\r
+0:34            'gl_InvocationID' (in highp int InvocationID)\r
 0:34          Constant:\r
 0:34            1 (const int)\r
 0:34        'ps' (temp highp float)\r
@@ -215,10 +217,9 @@ ERROR: node is still EOpNull!
 0:114              1 (const int)\r
 0:115      move second child to first child (temp highp float)\r
 0:115        gl_PointSize: direct index for structure (out highp float PointSize)\r
-0:115          direct index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
+0:115          indirect index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
 0:115            'gl_out' (out 4-element array of block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
-0:115            Constant:\r
-0:115              1 (const int)\r
+0:115            'gl_InvocationID' (in highp int InvocationID)\r
 0:115          Constant:\r
 0:115            1 (const int)\r
 0:115        'ps' (temp highp float)\r
@@ -277,9 +278,79 @@ ERROR: node is still EOpNull!
 0:142          2.000000\r
 0:142          2.000000\r
 0:142          2.000000\r
+0:153  Function Definition: outputtingOutparam(i1; (global void)\r
+0:153    Function Parameters: \r
+0:153      'a' (out highp int)\r
+0:155    Sequence\r
+0:155      move second child to first child (temp highp int)\r
+0:155        'a' (out highp int)\r
+0:155        Constant:\r
+0:155          2 (const int)\r
+0:158  Function Definition: outputting( (global void)\r
+0:158    Function Parameters: \r
+0:160    Sequence\r
+0:160      move second child to first child (temp highp int)\r
+0:160        indirect index (temp highp int)\r
+0:160          'outa' (out 4-element array of highp int)\r
+0:160          'gl_InvocationID' (in highp int InvocationID)\r
+0:160        Constant:\r
+0:160          2 (const int)\r
+0:161      move second child to first child (temp highp int)\r
+0:161        direct index (temp highp int)\r
+0:161          'outa' (out 4-element array of highp int)\r
+0:161          Constant:\r
+0:161            1 (const int)\r
+0:161        Constant:\r
+0:161          2 (const int)\r
+0:162      move second child to first child (temp highp 4-component vector of float)\r
+0:162        gl_Position: direct index for structure (out highp 4-component vector of float Position)\r
+0:162          direct index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
+0:162            'gl_out' (out 4-element array of block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
+0:162            Constant:\r
+0:162              0 (const int)\r
+0:162          Constant:\r
+0:162            0 (const int)\r
+0:162        Constant:\r
+0:162          1.000000\r
+0:162          1.000000\r
+0:162          1.000000\r
+0:162          1.000000\r
+0:163      direct index (temp highp int)\r
+0:163        'outa' (out 4-element array of highp int)\r
+0:163        Constant:\r
+0:163          1 (const int)\r
+0:164      direct index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
+0:164        'gl_out' (out 4-element array of block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
+0:164        Constant:\r
+0:164          0 (const int)\r
+0:165      Function Call: outputtingOutparam(i1; (global void)\r
+0:165        direct index (temp highp int)\r
+0:165          'outa' (out 4-element array of highp int)\r
+0:165          Constant:\r
+0:165            0 (const int)\r
+0:166      Function Call: outputtingOutparam(i1; (global void)\r
+0:166        indirect index (temp highp int)\r
+0:166          'outa' (out 4-element array of highp int)\r
+0:166          'gl_InvocationID' (in highp int InvocationID)\r
+0:167      move second child to first child (temp highp float)\r
+0:167        f: direct index for structure (out highp float)\r
+0:167          direct index (patch temp block{out highp float f})\r
+0:167            'patchIName' (patch out 4-element array of block{out highp float f})\r
+0:167            Constant:\r
+0:167              1 (const int)\r
+0:167          Constant:\r
+0:167            0 (const int)\r
+0:167        Constant:\r
+0:167          3.140000\r
+0:168      move second child to first child (temp highp int)\r
+0:168        indirect index (temp highp int)\r
+0:168          'outa' (out 4-element array of highp int)\r
+0:168          'gl_InvocationID' (in highp int InvocationID)\r
+0:168        Constant:\r
+0:168          2 (const int)\r
 0:?   Linker Objects\r
 0:?     'gl_out' (out 4-element array of block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
-0:?     'outa' (global 4-element array of highp int)\r
+0:?     'outa' (out 4-element array of highp int)\r
 0:?     'patchIn' (patch in highp 4-component vector of float)\r
 0:?     'patchOut' (patch out highp 4-component vector of float)\r
 0:?     'ina' (in highp 2-component vector of float)\r
@@ -301,6 +372,8 @@ ERROR: node is still EOpNull!
 0:?     'misSized' (out 5-element array of highp float)\r
 0:?     'okaySize' (out 4-element array of highp float)\r
 0:?     'pv3' (temp highp 3-component vector of float)\r
+0:?     'badpatchIName' (patch out implicitly-sized array of block{out highp float f})\r
+0:?     'patchIName' (patch out 4-element array of block{out highp float f})\r
 \r
 \r
 Linked tessellation control stage:\r
@@ -363,19 +436,17 @@ ERROR: node is still EOpNull!
 0:31          'gl_InvocationID' (in highp int InvocationID)\r
 0:33      move second child to first child (temp highp 4-component vector of float)\r
 0:33        gl_Position: direct index for structure (out highp 4-component vector of float Position)\r
-0:33          direct index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
+0:33          indirect index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
 0:33            'gl_out' (out 4-element array of block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
-0:33            Constant:\r
-0:33              1 (const int)\r
+0:33            'gl_InvocationID' (in highp int InvocationID)\r
 0:33          Constant:\r
 0:33            0 (const int)\r
 0:33        'p' (temp highp 4-component vector of float)\r
 0:34      move second child to first child (temp highp float)\r
 0:34        gl_PointSize: direct index for structure (out highp float PointSize)\r
-0:34          direct index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
+0:34          indirect index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
 0:34            'gl_out' (out 4-element array of block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
-0:34            Constant:\r
-0:34              1 (const int)\r
+0:34            'gl_InvocationID' (in highp int InvocationID)\r
 0:34          Constant:\r
 0:34            1 (const int)\r
 0:34        'ps' (temp highp float)\r
@@ -477,10 +548,9 @@ ERROR: node is still EOpNull!
 0:114              1 (const int)\r
 0:115      move second child to first child (temp highp float)\r
 0:115        gl_PointSize: direct index for structure (out highp float PointSize)\r
-0:115          direct index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
+0:115          indirect index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
 0:115            'gl_out' (out 4-element array of block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
-0:115            Constant:\r
-0:115              1 (const int)\r
+0:115            'gl_InvocationID' (in highp int InvocationID)\r
 0:115          Constant:\r
 0:115            1 (const int)\r
 0:115        'ps' (temp highp float)\r
@@ -539,9 +609,79 @@ ERROR: node is still EOpNull!
 0:142          2.000000\r
 0:142          2.000000\r
 0:142          2.000000\r
+0:153  Function Definition: outputtingOutparam(i1; (global void)\r
+0:153    Function Parameters: \r
+0:153      'a' (out highp int)\r
+0:155    Sequence\r
+0:155      move second child to first child (temp highp int)\r
+0:155        'a' (out highp int)\r
+0:155        Constant:\r
+0:155          2 (const int)\r
+0:158  Function Definition: outputting( (global void)\r
+0:158    Function Parameters: \r
+0:160    Sequence\r
+0:160      move second child to first child (temp highp int)\r
+0:160        indirect index (temp highp int)\r
+0:160          'outa' (out 4-element array of highp int)\r
+0:160          'gl_InvocationID' (in highp int InvocationID)\r
+0:160        Constant:\r
+0:160          2 (const int)\r
+0:161      move second child to first child (temp highp int)\r
+0:161        direct index (temp highp int)\r
+0:161          'outa' (out 4-element array of highp int)\r
+0:161          Constant:\r
+0:161            1 (const int)\r
+0:161        Constant:\r
+0:161          2 (const int)\r
+0:162      move second child to first child (temp highp 4-component vector of float)\r
+0:162        gl_Position: direct index for structure (out highp 4-component vector of float Position)\r
+0:162          direct index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
+0:162            'gl_out' (out 4-element array of block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
+0:162            Constant:\r
+0:162              0 (const int)\r
+0:162          Constant:\r
+0:162            0 (const int)\r
+0:162        Constant:\r
+0:162          1.000000\r
+0:162          1.000000\r
+0:162          1.000000\r
+0:162          1.000000\r
+0:163      direct index (temp highp int)\r
+0:163        'outa' (out 4-element array of highp int)\r
+0:163        Constant:\r
+0:163          1 (const int)\r
+0:164      direct index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
+0:164        'gl_out' (out 4-element array of block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
+0:164        Constant:\r
+0:164          0 (const int)\r
+0:165      Function Call: outputtingOutparam(i1; (global void)\r
+0:165        direct index (temp highp int)\r
+0:165          'outa' (out 4-element array of highp int)\r
+0:165          Constant:\r
+0:165            0 (const int)\r
+0:166      Function Call: outputtingOutparam(i1; (global void)\r
+0:166        indirect index (temp highp int)\r
+0:166          'outa' (out 4-element array of highp int)\r
+0:166          'gl_InvocationID' (in highp int InvocationID)\r
+0:167      move second child to first child (temp highp float)\r
+0:167        f: direct index for structure (out highp float)\r
+0:167          direct index (patch temp block{out highp float f})\r
+0:167            'patchIName' (patch out 4-element array of block{out highp float f})\r
+0:167            Constant:\r
+0:167              1 (const int)\r
+0:167          Constant:\r
+0:167            0 (const int)\r
+0:167        Constant:\r
+0:167          3.140000\r
+0:168      move second child to first child (temp highp int)\r
+0:168        indirect index (temp highp int)\r
+0:168          'outa' (out 4-element array of highp int)\r
+0:168          'gl_InvocationID' (in highp int InvocationID)\r
+0:168        Constant:\r
+0:168          2 (const int)\r
 0:?   Linker Objects\r
 0:?     'gl_out' (out 4-element array of block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
-0:?     'outa' (global 4-element array of highp int)\r
+0:?     'outa' (out 4-element array of highp int)\r
 0:?     'patchIn' (patch in highp 4-component vector of float)\r
 0:?     'patchOut' (patch out highp 4-component vector of float)\r
 0:?     'ina' (in highp 2-component vector of float)\r
@@ -563,4 +703,6 @@ ERROR: node is still EOpNull!
 0:?     'misSized' (out 5-element array of highp float)\r
 0:?     'okaySize' (out 4-element array of highp float)\r
 0:?     'pv3' (temp highp 3-component vector of float)\r
+0:?     'badpatchIName' (patch out 1-element array of block{out highp float f})\r
+0:?     'patchIName' (patch out 4-element array of block{out highp float f})\r
 \r
index 7430cff..a1401d3 100644 (file)
@@ -81,29 +81,26 @@ ERROR: node is still EOpNull!
 0:29          'gl_InvocationID' (in int InvocationID)\r
 0:31      move second child to first child (temp 4-component vector of float)\r
 0:31        gl_Position: direct index for structure (out 4-component vector of float Position)\r
-0:31          direct index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})\r
+0:31          indirect index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})\r
 0:31            'gl_out' (out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})\r
-0:31            Constant:\r
-0:31              1 (const int)\r
+0:31            'gl_InvocationID' (in int InvocationID)\r
 0:31          Constant:\r
 0:31            0 (const int)\r
 0:31        'p' (temp 4-component vector of float)\r
 0:32      move second child to first child (temp float)\r
 0:32        gl_PointSize: direct index for structure (out float PointSize)\r
-0:32          direct index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})\r
+0:32          indirect index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})\r
 0:32            'gl_out' (out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})\r
-0:32            Constant:\r
-0:32              1 (const int)\r
+0:32            'gl_InvocationID' (in int InvocationID)\r
 0:32          Constant:\r
 0:32            1 (const int)\r
 0:32        'ps' (temp float)\r
 0:33      move second child to first child (temp float)\r
 0:33        direct index (temp float ClipDistance)\r
 0:33          gl_ClipDistance: direct index for structure (out implicitly-sized array of float ClipDistance)\r
-0:33            direct index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})\r
+0:33            indirect index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})\r
 0:33              'gl_out' (out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance})\r
-0:33              Constant:\r
-0:33                1 (const int)\r
+0:33              'gl_InvocationID' (in int InvocationID)\r
 0:33            Constant:\r
 0:33              2 (const int)\r
 0:33          Constant:\r
@@ -279,29 +276,26 @@ ERROR: node is still EOpNull!
 0:29          'gl_InvocationID' (in int InvocationID)\r
 0:31      move second child to first child (temp 4-component vector of float)\r
 0:31        gl_Position: direct index for structure (out 4-component vector of float Position)\r
-0:31          direct index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})\r
+0:31          indirect index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})\r
 0:31            'gl_out' (out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})\r
-0:31            Constant:\r
-0:31              1 (const int)\r
+0:31            'gl_InvocationID' (in int InvocationID)\r
 0:31          Constant:\r
 0:31            0 (const int)\r
 0:31        'p' (temp 4-component vector of float)\r
 0:32      move second child to first child (temp float)\r
 0:32        gl_PointSize: direct index for structure (out float PointSize)\r
-0:32          direct index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})\r
+0:32          indirect index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})\r
 0:32            'gl_out' (out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})\r
-0:32            Constant:\r
-0:32              1 (const int)\r
+0:32            'gl_InvocationID' (in int InvocationID)\r
 0:32          Constant:\r
 0:32            1 (const int)\r
 0:32        'ps' (temp float)\r
 0:33      move second child to first child (temp float)\r
 0:33        direct index (temp float ClipDistance)\r
 0:33          gl_ClipDistance: direct index for structure (out 1-element array of float ClipDistance)\r
-0:33            direct index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})\r
+0:33            indirect index (temp block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})\r
 0:33              'gl_out' (out 4-element array of block{out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})\r
-0:33              Constant:\r
-0:33                1 (const int)\r
+0:33              'gl_InvocationID' (in int InvocationID)\r
 0:33            Constant:\r
 0:33              2 (const int)\r
 0:33          Constant:\r
index 999c1c6..c087513 100644 (file)
@@ -63,17 +63,15 @@ ERROR: node is still EOpNull!
 0:23          'gl_InvocationID' (in int InvocationID)\r
 0:25      move second child to first child (temp 4-component vector of float)\r
 0:25        gl_Position: direct index for structure (out 4-component vector of float Position)\r
-0:25          direct index (temp block{out 4-component vector of float Position gl_Position})\r
+0:25          indirect index (temp block{out 4-component vector of float Position gl_Position})\r
 0:25            'gl_out' (out 3-element array of block{out 4-component vector of float Position gl_Position})\r
-0:25            Constant:\r
-0:25              1 (const int)\r
+0:25            'gl_InvocationID' (in int InvocationID)\r
 0:25          Constant:\r
 0:25            0 (const int)\r
 0:25        'p' (temp 4-component vector of float)\r
-0:26      direct index (temp block{out 4-component vector of float Position gl_Position})\r
+0:26      indirect index (temp block{out 4-component vector of float Position gl_Position})\r
 0:26        'gl_out' (out 3-element array of block{out 4-component vector of float Position gl_Position})\r
-0:26        Constant:\r
-0:26          1 (const int)\r
+0:26        'gl_InvocationID' (in int InvocationID)\r
 0:34  Function Definition: foo( (global void)\r
 0:34    Function Parameters: \r
 0:36    Sequence\r
@@ -176,17 +174,15 @@ ERROR: node is still EOpNull!
 0:23          'gl_InvocationID' (in int InvocationID)\r
 0:25      move second child to first child (temp 4-component vector of float)\r
 0:25        gl_Position: direct index for structure (out 4-component vector of float Position)\r
-0:25          direct index (temp block{out 4-component vector of float Position gl_Position})\r
+0:25          indirect index (temp block{out 4-component vector of float Position gl_Position})\r
 0:25            'gl_out' (out 3-element array of block{out 4-component vector of float Position gl_Position})\r
-0:25            Constant:\r
-0:25              1 (const int)\r
+0:25            'gl_InvocationID' (in int InvocationID)\r
 0:25          Constant:\r
 0:25            0 (const int)\r
 0:25        'p' (temp 4-component vector of float)\r
-0:26      direct index (temp block{out 4-component vector of float Position gl_Position})\r
+0:26      indirect index (temp block{out 4-component vector of float Position gl_Position})\r
 0:26        'gl_out' (out 3-element array of block{out 4-component vector of float Position gl_Position})\r
-0:26        Constant:\r
-0:26          1 (const int)\r
+0:26        'gl_InvocationID' (in int InvocationID)\r
 0:34  Function Definition: foo( (global void)\r
 0:34    Function Parameters: \r
 0:36    Sequence\r
index 6eaf6f9..26d9307 100644 (file)
@@ -10,10 +10,9 @@ vertices = 0
 0:13      move second child to first child (temp float)\r
 0:13        direct index (temp float CullDistance)\r
 0:13          gl_CullDistance: direct index for structure (out implicitly-sized array of float CullDistance)\r
-0:13            direct index (temp block{out implicitly-sized array of float CullDistance gl_CullDistance})\r
-0:13              'gl_out' (out implicitly-sized array of block{out implicitly-sized array of float CullDistance gl_CullDistance})\r
-0:13              Constant:\r
-0:13                0 (const int)\r
+0:13            indirect index (temp block{out implicitly-sized array of float CullDistance gl_CullDistance})\r
+0:13              'gl_out' (out 4-element array of block{out implicitly-sized array of float CullDistance gl_CullDistance})\r
+0:13              'gl_InvocationID' (in int InvocationID)\r
 0:13            Constant:\r
 0:13              0 (const int)\r
 0:13          Constant:\r
@@ -30,7 +29,7 @@ vertices = 0
 0:13            2 (const int)\r
 0:?   Linker Objects\r
 0:?     'gl_in' (in 32-element array of block{in implicitly-sized array of float CullDistance gl_CullDistance})\r
-0:?     'gl_out' (out implicitly-sized array of block{out implicitly-sized array of float CullDistance gl_CullDistance})\r
+0:?     'gl_out' (out 4-element array of block{out implicitly-sized array of float CullDistance gl_CullDistance})\r
 \r
 \r
 Linked tessellation control stage:\r
@@ -46,10 +45,9 @@ vertices = 0
 0:13      move second child to first child (temp float)\r
 0:13        direct index (temp float CullDistance)\r
 0:13          gl_CullDistance: direct index for structure (out 1-element array of float CullDistance)\r
-0:13            direct index (temp block{out 1-element array of float CullDistance gl_CullDistance})\r
-0:13              'gl_out' (out 1-element array of block{out 1-element array of float CullDistance gl_CullDistance})\r
-0:13              Constant:\r
-0:13                0 (const int)\r
+0:13            indirect index (temp block{out 1-element array of float CullDistance gl_CullDistance})\r
+0:13              'gl_out' (out 4-element array of block{out 1-element array of float CullDistance gl_CullDistance})\r
+0:13              'gl_InvocationID' (in int InvocationID)\r
 0:13            Constant:\r
 0:13              0 (const int)\r
 0:13          Constant:\r
@@ -66,5 +64,5 @@ vertices = 0
 0:13            2 (const int)\r
 0:?   Linker Objects\r
 0:?     'gl_in' (in 32-element array of block{in 1-element array of float CullDistance gl_CullDistance})\r
-0:?     'gl_out' (out 1-element array of block{out 1-element array of float CullDistance gl_CullDistance})\r
+0:?     'gl_out' (out 4-element array of block{out 1-element array of float CullDistance gl_CullDistance})\r
 \r
index c1bee83..dee214d 100755 (executable)
@@ -7,12 +7,12 @@ Linked tessellation control stage:
 \r
 // Module Version 10000\r
 // Generated by (magic number): 80001\r
-// Id's are bound by 90\r
+// Id's are bound by 93\r
 \r
                               Capability Tessellation\r
                1:             ExtInstImport  "GLSL.std.450"\r
                               MemoryModel Logical GLSL450\r
-                              EntryPoint TessellationControl 4  "main" 52 76 80 81 84 85 88 89\r
+                              EntryPoint TessellationControl 4  "main" 52 79 83 84 87 88 91 92\r
                               ExecutionMode 4 OutputVertices 4\r
                               Source GLSL 400\r
                               SourceExtension  "GL_ARB_separate_shader_objects"\r
@@ -37,16 +37,16 @@ Linked tessellation control stage:
                               MemberName 48(gl_PerVertex) 1  "gl_PointSize"\r
                               MemberName 48(gl_PerVertex) 2  "gl_ClipDistance"\r
                               Name 52  "gl_out"\r
-                              Name 63  "gl_TessLevelOuter"\r
-                              Name 70  "gl_TessLevelInner"\r
-                              Name 75  "outa"\r
-                              Name 76  "patchOut"\r
-                              Name 80  "inb"\r
-                              Name 81  "ind"\r
-                              Name 84  "ivla"\r
-                              Name 85  "ivlb"\r
-                              Name 88  "ovla"\r
-                              Name 89  "ovlb"\r
+                              Name 66  "gl_TessLevelOuter"\r
+                              Name 73  "gl_TessLevelInner"\r
+                              Name 78  "outa"\r
+                              Name 79  "patchOut"\r
+                              Name 83  "inb"\r
+                              Name 84  "ind"\r
+                              Name 87  "ivla"\r
+                              Name 88  "ivlb"\r
+                              Name 91  "ovla"\r
+                              Name 92  "ovlb"\r
                               MemberDecorate 19(gl_PerVertex) 0 BuiltIn Position\r
                               MemberDecorate 19(gl_PerVertex) 1 BuiltIn PointSize\r
                               MemberDecorate 19(gl_PerVertex) 2 BuiltIn ClipDistance\r
@@ -58,15 +58,15 @@ Linked tessellation control stage:
                               MemberDecorate 48(gl_PerVertex) 1 BuiltIn PointSize\r
                               MemberDecorate 48(gl_PerVertex) 2 BuiltIn ClipDistance\r
                               Decorate 48(gl_PerVertex) Block\r
-                              Decorate 63(gl_TessLevelOuter) Patch\r
-                              Decorate 63(gl_TessLevelOuter) BuiltIn TessLevelOuter\r
-                              Decorate 70(gl_TessLevelInner) Patch\r
-                              Decorate 70(gl_TessLevelInner) BuiltIn TessLevelInner\r
-                              Decorate 76(patchOut) Patch\r
-                              Decorate 84(ivla) Location 3\r
-                              Decorate 85(ivlb) Location 4\r
-                              Decorate 88(ovla) Location 3\r
-                              Decorate 89(ovlb) Location 4\r
+                              Decorate 66(gl_TessLevelOuter) Patch\r
+                              Decorate 66(gl_TessLevelOuter) BuiltIn TessLevelOuter\r
+                              Decorate 73(gl_TessLevelInner) Patch\r
+                              Decorate 73(gl_TessLevelInner) BuiltIn TessLevelInner\r
+                              Decorate 79(patchOut) Patch\r
+                              Decorate 87(ivla) Location 3\r
+                              Decorate 88(ivlb) Location 4\r
+                              Decorate 91(ovla) Location 3\r
+                              Decorate 92(ovlb) Location 4\r
                2:             TypeVoid\r
                3:             TypeFunction 2\r
                6:             TypeInt 32 0\r
@@ -100,35 +100,35 @@ Linked tessellation control stage:
               50:             TypeArray 48(gl_PerVertex) 49\r
               51:             TypePointer Output 50\r
       52(gl_out):     51(ptr) Variable Output\r
-              54:             TypePointer Output 15(fvec4)\r
-              57:             TypePointer Output 14(float)\r
-              61:             TypeArray 14(float) 49\r
-              62:             TypePointer Output 61\r
-63(gl_TessLevelOuter):     62(ptr) Variable Output\r
-              64:     10(int) Constant 3\r
-              65:   14(float) Constant 1078774989\r
-              67:      6(int) Constant 2\r
-              68:             TypeArray 14(float) 67\r
-              69:             TypePointer Output 68\r
-70(gl_TessLevelInner):     69(ptr) Variable Output\r
-              71:   14(float) Constant 1067869798\r
-              73:             TypeArray 10(int) 49\r
-              74:             TypePointer Private 73\r
-        75(outa):     74(ptr) Variable Private\r
-    76(patchOut):     54(ptr) Variable Output\r
-              77:             TypeVector 14(float) 2\r
-              78:             TypeArray 77(fvec2) 20\r
-              79:             TypePointer Input 78\r
-         80(inb):     79(ptr) Variable Input\r
-         81(ind):     79(ptr) Variable Input\r
-              82:             TypeArray 15(fvec4) 20\r
-              83:             TypePointer Input 82\r
-        84(ivla):     83(ptr) Variable Input\r
-        85(ivlb):     83(ptr) Variable Input\r
-              86:             TypeArray 15(fvec4) 49\r
-              87:             TypePointer Output 86\r
-        88(ovla):     87(ptr) Variable Output\r
-        89(ovlb):     87(ptr) Variable Output\r
+              55:             TypePointer Output 15(fvec4)\r
+              59:             TypePointer Output 14(float)\r
+              64:             TypeArray 14(float) 49\r
+              65:             TypePointer Output 64\r
+66(gl_TessLevelOuter):     65(ptr) Variable Output\r
+              67:     10(int) Constant 3\r
+              68:   14(float) Constant 1078774989\r
+              70:      6(int) Constant 2\r
+              71:             TypeArray 14(float) 70\r
+              72:             TypePointer Output 71\r
+73(gl_TessLevelInner):     72(ptr) Variable Output\r
+              74:   14(float) Constant 1067869798\r
+              76:             TypeArray 10(int) 49\r
+              77:             TypePointer Private 76\r
+        78(outa):     77(ptr) Variable Private\r
+    79(patchOut):     55(ptr) Variable Output\r
+              80:             TypeVector 14(float) 2\r
+              81:             TypeArray 80(fvec2) 20\r
+              82:             TypePointer Input 81\r
+         83(inb):     82(ptr) Variable Input\r
+         84(ind):     82(ptr) Variable Input\r
+              85:             TypeArray 15(fvec4) 20\r
+              86:             TypePointer Input 85\r
+        87(ivla):     86(ptr) Variable Input\r
+        88(ivlb):     86(ptr) Variable Input\r
+              89:             TypeArray 15(fvec4) 49\r
+              90:             TypePointer Output 89\r
+        91(ovla):     90(ptr) Variable Output\r
+        92(ovlb):     90(ptr) Variable Output\r
          4(main):           2 Function None 3\r
                5:             Label\r
            12(a):     11(ptr) Variable Function\r
@@ -156,18 +156,21 @@ Linked tessellation control stage:
                               Store 42(pid) 44\r
               47:     10(int) Load 46(gl_InvocationID)\r
                               Store 45(iid) 47\r
-              53:   15(fvec4) Load 17(p)\r
-              55:     54(ptr) AccessChain 52(gl_out) 24 25\r
-                              Store 55 53\r
-              56:   14(float) Load 30(ps)\r
-              58:     57(ptr) AccessChain 52(gl_out) 24 24\r
-                              Store 58 56\r
-              59:   14(float) Load 34(cd)\r
-              60:     57(ptr) AccessChain 52(gl_out) 24 35 24\r
-                              Store 60 59\r
-              66:     57(ptr) AccessChain 63(gl_TessLevelOuter) 64\r
-                              Store 66 65\r
-              72:     57(ptr) AccessChain 70(gl_TessLevelInner) 24\r
-                              Store 72 71\r
+              53:     10(int) Load 46(gl_InvocationID)\r
+              54:   15(fvec4) Load 17(p)\r
+              56:     55(ptr) AccessChain 52(gl_out) 53 25\r
+                              Store 56 54\r
+              57:     10(int) Load 46(gl_InvocationID)\r
+              58:   14(float) Load 30(ps)\r
+              60:     59(ptr) AccessChain 52(gl_out) 57 24\r
+                              Store 60 58\r
+              61:     10(int) Load 46(gl_InvocationID)\r
+              62:   14(float) Load 34(cd)\r
+              63:     59(ptr) AccessChain 52(gl_out) 61 35 24\r
+                              Store 63 62\r
+              69:     59(ptr) AccessChain 66(gl_TessLevelOuter) 67\r
+                              Store 69 68\r
+              75:     59(ptr) AccessChain 73(gl_TessLevelInner) 24\r
+                              Store 75 74\r
                               Return\r
                               FunctionEnd\r
index 348e621..1c926d0 100644 (file)
@@ -23,9 +23,9 @@ void main()
     int pid = gl_PrimitiveID;\r
     int iid = gl_InvocationID;\r
 \r
-    gl_out[1].gl_Position = p;\r
-    gl_out[1].gl_PointSize = ps;\r
-    gl_out[1].gl_ClipDistance[1] = cd;\r
+    gl_out[gl_InvocationID].gl_Position = p;\r
+    gl_out[gl_InvocationID].gl_PointSize = ps;\r
+    gl_out[gl_InvocationID].gl_ClipDistance[1] = cd;\r
 \r
     gl_TessLevelOuter[3] = 3.2;\r
     gl_TessLevelInner[1] = 1.3;\r
index 7f6f677..90b2697 100644 (file)
@@ -2,5 +2,5 @@
 // For the version, it uses the latest git tag followed by the number of commits.
 // For the date, it uses the current date (when then script is run).
 
-#define GLSLANG_REVISION "SPIRV99.807"
+#define GLSLANG_REVISION "SPIRV99.809"
 #define GLSLANG_DATE "28-Nov-2015"
index 6d50cbe..55c0ee0 100644 (file)
@@ -518,8 +518,9 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn
                     requireProfile(base->getLoc(), ~EEsProfile, "variable indexing buffer block array");
                 else if (base->getQualifier().storage == EvqUniform)
                     profileRequires(base->getLoc(), EEsProfile, 0, Num_AEP_gpu_shader5, AEP_gpu_shader5, "variable indexing uniform block array");
-                else
-                    requireProfile(base->getLoc(), ~EEsProfile, "variable indexing in/out block array");
+                else {
+                    // input/output blocks either don't exist or can be variable indexed
+                }
             } else if (language == EShLangFragment && base->getQualifier().isPipeOutput())
                 requireProfile(base->getLoc(), ~EEsProfile, "variable indexing fragment shader ouput array");
             else if (base->getBasicType() == EbtSampler && version >= 130) {
@@ -1871,6 +1872,21 @@ bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TInt
         switch(binaryNode->getOp()) {
         case EOpIndexDirect:
         case EOpIndexIndirect:
+            // ...  tessellation control shader ...
+            // If a per-vertex output variable is used as an l-value, it is a
+            // compile-time or link-time error if the expression indicating the
+            // vertex index is not the identifier gl_InvocationID.
+            if (language == EShLangTessControl) {
+                const TType& leftType = binaryNode->getLeft()->getType();
+                if (leftType.getQualifier().storage == EvqVaryingOut && ! leftType.getQualifier().patch && binaryNode->getLeft()->getAsSymbolNode()) {
+                    // we have a per-vertex output
+                    const TIntermSymbol* rightSymbol = binaryNode->getRight()->getAsSymbolNode();
+                    if (! rightSymbol || rightSymbol->getQualifier().builtIn != EbvInvocationId)
+                        error(loc, "tessellation-control per-vertex output l-value must be indexed with gl_InvocationID", "[]", "");
+                }
+            }
+
+            // fall through
         case EOpIndexDirectStruct:
             return lValueErrorCheck(loc, op, binaryNode->getLeft());
         case EOpVectorSwizzle: