Require l-value patch-out indexing to be gl_InvocationID.

Also, generally allow ES variable indexing of in/out blocks.
This commit is contained in:
John Kessenich 2015-11-28 15:19:11 -07:00
parent 989df85dcd
commit 1be8063e01
16 changed files with 354 additions and 196 deletions

View File

@ -25,9 +25,9 @@ void main()
int pid = gl_PrimitiveID;
int iid = gl_InvocationID;
gl_out[1].gl_Position = p;
gl_out[1].gl_PointSize = ps;
gl_out[1].gl_ClipDistance[1] = cd;
gl_out[gl_InvocationID].gl_Position = p;
gl_out[gl_InvocationID].gl_PointSize = ps;
gl_out[gl_InvocationID].gl_ClipDistance[1] = cd;
gl_TessLevelOuter[3] = 3.2;
gl_TessLevelInner[1] = 1.3;

View File

@ -166,7 +166,7 @@ void fooIO()
{
vec4 v = inbinst.v + vAnon;
v *= arrayedInst[2].f;
v *= arrayedInst[i].f; // ERROR, not constant
v *= arrayedInst[i].f;
}
in vec4 gl_FragCoord;

View File

@ -3,7 +3,7 @@
#extension GL_OES_tessellation_shader : enable
layout(vertices = 4) out;
int outa[gl_out.length()];
out int outa[gl_out.length()];
layout(quads) in; // ERROR
layout(ccw) out; // ERROR
@ -30,9 +30,9 @@ void main()
int pid = gl_PrimitiveID;
int iid = gl_InvocationID;
gl_out[1].gl_Position = p;
gl_out[1].gl_PointSize = ps; // ERROR, need point_size extension
gl_out[1].gl_ClipDistance[1] = cd; // ERROR, not in ES
gl_out[gl_InvocationID].gl_Position = p;
gl_out[gl_InvocationID].gl_PointSize = ps; // ERROR, need point_size extension
gl_out[gl_InvocationID].gl_ClipDistance[1] = cd; // ERROR, not in ES
gl_TessLevelOuter[3] = 3.2;
gl_TessLevelInner[1] = 1.3;
@ -112,7 +112,7 @@ out float okaySize[4];
void pointSize2()
{
float ps = gl_in[1].gl_PointSize;
gl_out[1].gl_PointSize = ps;
gl_out[gl_InvocationID].gl_PointSize = ps;
}
#extension GL_OES_gpu_shader5 : enable
@ -141,3 +141,29 @@ void bb()
gl_BoundingBoxOES[1] = vec4(1.0);
gl_BoundingBoxOES[2] = vec4(2.0); // ERROR, overflow
}
out patch badpatchBName { // ERROR, array size required
float f;
} badpatchIName[];
out patch patchBName {
float f;
} patchIName[4];
void outputtingOutparam(out int a)
{
a = 2;
}
void outputting()
{
outa[gl_InvocationID] = 2;
outa[1] = 2; // ERROR, not gl_InvocationID
gl_out[0].gl_Position = vec4(1.0); // ERROR, not gl_InvocationID
outa[1];
gl_out[0];
outputtingOutparam(outa[0]); // ERROR, not gl_InvocationID
outputtingOutparam(outa[gl_InvocationID]);
patchIName[1].f = 3.14;
outa[(gl_InvocationID)] = 2;
}

View File

@ -28,9 +28,9 @@ void main()
int pid = gl_PrimitiveID;
int iid = gl_InvocationID;
gl_out[1].gl_Position = p;
gl_out[1].gl_PointSize = ps;
gl_out[1].gl_ClipDistance[1] = cd;
gl_out[gl_InvocationID].gl_Position = p;
gl_out[gl_InvocationID].gl_PointSize = ps;
gl_out[gl_InvocationID].gl_ClipDistance[1] = cd;
gl_TessLevelOuter[3] = 3.2;
gl_TessLevelInner[1] = 1.3;

View File

@ -22,8 +22,8 @@ void main()
int pid = gl_PrimitiveID;
int iid = gl_InvocationID;
gl_out[1].gl_Position = p;
gl_out[1].gl_PointSize = ps; // ERROR
gl_out[gl_InvocationID].gl_Position = p;
gl_out[gl_InvocationID].gl_PointSize = ps; // ERROR
}
out float outf; // ERROR, no array

View File

@ -6,9 +6,9 @@ in gl_PerVertex {
out gl_PerVertex {
float gl_CullDistance[3];
} gl_out[];
} gl_out[4];
void main()
{
gl_out[0].gl_CullDistance[2] = gl_in[1].gl_CullDistance[2];
gl_out[gl_InvocationID].gl_CullDistance[2] = gl_in[1].gl_CullDistance[2];
}

View File

@ -59,29 +59,26 @@ vertices = 4
0:26 'gl_InvocationID' (in int InvocationID)
0:28 move second child to first child (temp 4-component vector of float)
0:28 gl_Position: direct index for structure (out 4-component vector of float Position)
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})
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})
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})
0:28 Constant:
0:28 1 (const int)
0:28 'gl_InvocationID' (in int InvocationID)
0:28 Constant:
0:28 0 (const int)
0:28 'p' (temp 4-component vector of float)
0:29 move second child to first child (temp float)
0:29 gl_PointSize: direct index for structure (out float PointSize)
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})
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})
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})
0:29 Constant:
0:29 1 (const int)
0:29 'gl_InvocationID' (in int InvocationID)
0:29 Constant:
0:29 1 (const int)
0:29 'ps' (temp float)
0:30 move second child to first child (temp float)
0:30 direct index (temp float ClipDistance)
0:30 gl_ClipDistance: direct index for structure (out implicitly-sized array of float ClipDistance)
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})
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})
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})
0:30 Constant:
0:30 1 (const int)
0:30 'gl_InvocationID' (in int InvocationID)
0:30 Constant:
0:30 2 (const int)
0:30 Constant:
@ -295,29 +292,26 @@ ERROR: node is still EOpNull!
0:29 'gl_InvocationID' (in int InvocationID)
0:31 move second child to first child (temp 4-component vector of float)
0:31 gl_Position: direct index for structure (out 4-component vector of float Position)
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})
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})
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})
0:31 Constant:
0:31 1 (const int)
0:31 'gl_InvocationID' (in int InvocationID)
0:31 Constant:
0:31 0 (const int)
0:31 'p' (temp 4-component vector of float)
0:32 move second child to first child (temp float)
0:32 gl_PointSize: direct index for structure (out float PointSize)
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})
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})
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})
0:32 Constant:
0:32 1 (const int)
0:32 'gl_InvocationID' (in int InvocationID)
0:32 Constant:
0:32 1 (const int)
0:32 'ps' (temp float)
0:33 move second child to first child (temp float)
0:33 direct index (temp float ClipDistance)
0:33 gl_ClipDistance: direct index for structure (out implicitly-sized array of float ClipDistance)
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})
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})
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})
0:33 Constant:
0:33 1 (const int)
0:33 'gl_InvocationID' (in int InvocationID)
0:33 Constant:
0:33 2 (const int)
0:33 Constant:
@ -666,17 +660,15 @@ ERROR: node is still EOpNull!
0:23 'gl_InvocationID' (in int InvocationID)
0:25 move second child to first child (temp 4-component vector of float)
0:25 gl_Position: direct index for structure (out 4-component vector of float Position)
0:25 direct index (temp block{out 4-component vector of float Position gl_Position})
0:25 indirect index (temp block{out 4-component vector of float Position gl_Position})
0:25 'gl_out' (out 3-element array of block{out 4-component vector of float Position gl_Position})
0:25 Constant:
0:25 1 (const int)
0:25 'gl_InvocationID' (in int InvocationID)
0:25 Constant:
0:25 0 (const int)
0:25 'p' (temp 4-component vector of float)
0:26 direct index (temp block{out 4-component vector of float Position gl_Position})
0:26 indirect index (temp block{out 4-component vector of float Position gl_Position})
0:26 'gl_out' (out 3-element array of block{out 4-component vector of float Position gl_Position})
0:26 Constant:
0:26 1 (const int)
0:26 'gl_InvocationID' (in int InvocationID)
0:34 Function Definition: foo( (global void)
0:34 Function Parameters:
0:36 Sequence
@ -982,29 +974,26 @@ vertices = 4
0:26 'gl_InvocationID' (in int InvocationID)
0:28 move second child to first child (temp 4-component vector of float)
0:28 gl_Position: direct index for structure (out 4-component vector of float Position)
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})
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})
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})
0:28 Constant:
0:28 1 (const int)
0:28 'gl_InvocationID' (in int InvocationID)
0:28 Constant:
0:28 0 (const int)
0:28 'p' (temp 4-component vector of float)
0:29 move second child to first child (temp float)
0:29 gl_PointSize: direct index for structure (out float PointSize)
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})
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})
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})
0:29 Constant:
0:29 1 (const int)
0:29 'gl_InvocationID' (in int InvocationID)
0:29 Constant:
0:29 1 (const int)
0:29 'ps' (temp float)
0:30 move second child to first child (temp float)
0:30 direct index (temp float ClipDistance)
0:30 gl_ClipDistance: direct index for structure (out 1-element array of float ClipDistance)
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})
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})
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})
0:30 Constant:
0:30 1 (const int)
0:30 'gl_InvocationID' (in int InvocationID)
0:30 Constant:
0:30 2 (const int)
0:30 Constant:
@ -1080,29 +1069,26 @@ vertices = 4
0:29 'gl_InvocationID' (in int InvocationID)
0:31 move second child to first child (temp 4-component vector of float)
0:31 gl_Position: direct index for structure (out 4-component vector of float Position)
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})
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})
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})
0:31 Constant:
0:31 1 (const int)
0:31 'gl_InvocationID' (in int InvocationID)
0:31 Constant:
0:31 0 (const int)
0:31 'p' (temp 4-component vector of float)
0:32 move second child to first child (temp float)
0:32 gl_PointSize: direct index for structure (out float PointSize)
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})
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})
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})
0:32 Constant:
0:32 1 (const int)
0:32 'gl_InvocationID' (in int InvocationID)
0:32 Constant:
0:32 1 (const int)
0:32 'ps' (temp float)
0:33 move second child to first child (temp float)
0:33 direct index (temp float ClipDistance)
0:33 gl_ClipDistance: direct index for structure (out 1-element array of float ClipDistance)
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})
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})
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})
0:33 Constant:
0:33 1 (const int)
0:33 'gl_InvocationID' (in int InvocationID)
0:33 Constant:
0:33 2 (const int)
0:33 Constant:
@ -1248,17 +1234,15 @@ vertices = 4
0:23 'gl_InvocationID' (in int InvocationID)
0:25 move second child to first child (temp 4-component vector of float)
0:25 gl_Position: direct index for structure (out 4-component vector of float Position)
0:25 direct index (temp block{out 4-component vector of float Position gl_Position})
0:25 indirect index (temp block{out 4-component vector of float Position gl_Position})
0:25 'gl_out' (out 3-element array of block{out 4-component vector of float Position gl_Position})
0:25 Constant:
0:25 1 (const int)
0:25 'gl_InvocationID' (in int InvocationID)
0:25 Constant:
0:25 0 (const int)
0:25 'p' (temp 4-component vector of float)
0:26 direct index (temp block{out 4-component vector of float Position gl_Position})
0:26 indirect index (temp block{out 4-component vector of float Position gl_Position})
0:26 'gl_out' (out 3-element array of block{out 4-component vector of float Position gl_Position})
0:26 Constant:
0:26 1 (const int)
0:26 'gl_InvocationID' (in int InvocationID)
0:34 Function Definition: foo( (global void)
0:34 Function Parameters:
0:36 Sequence

View 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
ERROR: 0:157: 'inbname' : redefinition
ERROR: 0:159: 'vAnon' : redefinition
ERROR: 0:169: 'variable indexing in/out block array' : not supported with this profile: es
ERROR: 0:173: 'origin_upper_left' : not supported with this profile: es
ERROR: 0:173: 'pixel_center_integer' : not supported with this profile: es
ERROR: 0:173: 'redeclaration' : cannot redeclare with different qualification: gl_FragCoord
@ -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
ERROR: 0:429: 'blend_support' : unknown blend equation
ERROR: 0:431: 'fragment-shader array-of-array output' : not supported with this profile: es
ERROR: 122 compilation errors. No code generated.
ERROR: 121 compilation errors. No code generated.
Shader version: 310

View File

@ -41,7 +41,11 @@ ERROR: 0:133: 'gl_BoundingBoxOES' : required extension not requested: Possible e
GL_EXT_primitive_bounding_box
GL_OES_primitive_bounding_box
ERROR: 0:142: '[' : array index out of range '2'
ERROR: 33 compilation errors. No code generated.
ERROR: 0:145: '' : array size required
ERROR: 0:161: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID
ERROR: 0:162: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID
ERROR: 0:165: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID
ERROR: 37 compilation errors. No code generated.
Shader version: 310
@ -101,19 +105,17 @@ ERROR: node is still EOpNull!
0:31 'gl_InvocationID' (in highp int InvocationID)
0:33 move second child to first child (temp highp 4-component vector of float)
0:33 gl_Position: direct index for structure (out highp 4-component vector of float Position)
0:33 direct index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
0:33 indirect index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
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})
0:33 Constant:
0:33 1 (const int)
0:33 'gl_InvocationID' (in highp int InvocationID)
0:33 Constant:
0:33 0 (const int)
0:33 'p' (temp highp 4-component vector of float)
0:34 move second child to first child (temp highp float)
0:34 gl_PointSize: direct index for structure (out highp float PointSize)
0:34 direct index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
0:34 indirect index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
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})
0:34 Constant:
0:34 1 (const int)
0:34 'gl_InvocationID' (in highp int InvocationID)
0:34 Constant:
0:34 1 (const int)
0:34 'ps' (temp highp float)
@ -215,10 +217,9 @@ ERROR: node is still EOpNull!
0:114 1 (const int)
0:115 move second child to first child (temp highp float)
0:115 gl_PointSize: direct index for structure (out highp float PointSize)
0:115 direct index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
0:115 indirect index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
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})
0:115 Constant:
0:115 1 (const int)
0:115 'gl_InvocationID' (in highp int InvocationID)
0:115 Constant:
0:115 1 (const int)
0:115 'ps' (temp highp float)
@ -277,9 +278,79 @@ ERROR: node is still EOpNull!
0:142 2.000000
0:142 2.000000
0:142 2.000000
0:153 Function Definition: outputtingOutparam(i1; (global void)
0:153 Function Parameters:
0:153 'a' (out highp int)
0:155 Sequence
0:155 move second child to first child (temp highp int)
0:155 'a' (out highp int)
0:155 Constant:
0:155 2 (const int)
0:158 Function Definition: outputting( (global void)
0:158 Function Parameters:
0:160 Sequence
0:160 move second child to first child (temp highp int)
0:160 indirect index (temp highp int)
0:160 'outa' (out 4-element array of highp int)
0:160 'gl_InvocationID' (in highp int InvocationID)
0:160 Constant:
0:160 2 (const int)
0:161 move second child to first child (temp highp int)
0:161 direct index (temp highp int)
0:161 'outa' (out 4-element array of highp int)
0:161 Constant:
0:161 1 (const int)
0:161 Constant:
0:161 2 (const int)
0:162 move second child to first child (temp highp 4-component vector of float)
0:162 gl_Position: direct index for structure (out highp 4-component vector of float Position)
0:162 direct index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
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})
0:162 Constant:
0:162 0 (const int)
0:162 Constant:
0:162 0 (const int)
0:162 Constant:
0:162 1.000000
0:162 1.000000
0:162 1.000000
0:162 1.000000
0:163 direct index (temp highp int)
0:163 'outa' (out 4-element array of highp int)
0:163 Constant:
0:163 1 (const int)
0:164 direct index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
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})
0:164 Constant:
0:164 0 (const int)
0:165 Function Call: outputtingOutparam(i1; (global void)
0:165 direct index (temp highp int)
0:165 'outa' (out 4-element array of highp int)
0:165 Constant:
0:165 0 (const int)
0:166 Function Call: outputtingOutparam(i1; (global void)
0:166 indirect index (temp highp int)
0:166 'outa' (out 4-element array of highp int)
0:166 'gl_InvocationID' (in highp int InvocationID)
0:167 move second child to first child (temp highp float)
0:167 f: direct index for structure (out highp float)
0:167 direct index (patch temp block{out highp float f})
0:167 'patchIName' (patch out 4-element array of block{out highp float f})
0:167 Constant:
0:167 1 (const int)
0:167 Constant:
0:167 0 (const int)
0:167 Constant:
0:167 3.140000
0:168 move second child to first child (temp highp int)
0:168 indirect index (temp highp int)
0:168 'outa' (out 4-element array of highp int)
0:168 'gl_InvocationID' (in highp int InvocationID)
0:168 Constant:
0:168 2 (const int)
0:? Linker Objects
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})
0:? 'outa' (global 4-element array of highp int)
0:? 'outa' (out 4-element array of highp int)
0:? 'patchIn' (patch in highp 4-component vector of float)
0:? 'patchOut' (patch out highp 4-component vector of float)
0:? 'ina' (in highp 2-component vector of float)
@ -301,6 +372,8 @@ ERROR: node is still EOpNull!
0:? 'misSized' (out 5-element array of highp float)
0:? 'okaySize' (out 4-element array of highp float)
0:? 'pv3' (temp highp 3-component vector of float)
0:? 'badpatchIName' (patch out implicitly-sized array of block{out highp float f})
0:? 'patchIName' (patch out 4-element array of block{out highp float f})
Linked tessellation control stage:
@ -363,19 +436,17 @@ ERROR: node is still EOpNull!
0:31 'gl_InvocationID' (in highp int InvocationID)
0:33 move second child to first child (temp highp 4-component vector of float)
0:33 gl_Position: direct index for structure (out highp 4-component vector of float Position)
0:33 direct index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
0:33 indirect index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
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})
0:33 Constant:
0:33 1 (const int)
0:33 'gl_InvocationID' (in highp int InvocationID)
0:33 Constant:
0:33 0 (const int)
0:33 'p' (temp highp 4-component vector of float)
0:34 move second child to first child (temp highp float)
0:34 gl_PointSize: direct index for structure (out highp float PointSize)
0:34 direct index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
0:34 indirect index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
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})
0:34 Constant:
0:34 1 (const int)
0:34 'gl_InvocationID' (in highp int InvocationID)
0:34 Constant:
0:34 1 (const int)
0:34 'ps' (temp highp float)
@ -477,10 +548,9 @@ ERROR: node is still EOpNull!
0:114 1 (const int)
0:115 move second child to first child (temp highp float)
0:115 gl_PointSize: direct index for structure (out highp float PointSize)
0:115 direct index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
0:115 indirect index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
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})
0:115 Constant:
0:115 1 (const int)
0:115 'gl_InvocationID' (in highp int InvocationID)
0:115 Constant:
0:115 1 (const int)
0:115 'ps' (temp highp float)
@ -539,9 +609,79 @@ ERROR: node is still EOpNull!
0:142 2.000000
0:142 2.000000
0:142 2.000000
0:153 Function Definition: outputtingOutparam(i1; (global void)
0:153 Function Parameters:
0:153 'a' (out highp int)
0:155 Sequence
0:155 move second child to first child (temp highp int)
0:155 'a' (out highp int)
0:155 Constant:
0:155 2 (const int)
0:158 Function Definition: outputting( (global void)
0:158 Function Parameters:
0:160 Sequence
0:160 move second child to first child (temp highp int)
0:160 indirect index (temp highp int)
0:160 'outa' (out 4-element array of highp int)
0:160 'gl_InvocationID' (in highp int InvocationID)
0:160 Constant:
0:160 2 (const int)
0:161 move second child to first child (temp highp int)
0:161 direct index (temp highp int)
0:161 'outa' (out 4-element array of highp int)
0:161 Constant:
0:161 1 (const int)
0:161 Constant:
0:161 2 (const int)
0:162 move second child to first child (temp highp 4-component vector of float)
0:162 gl_Position: direct index for structure (out highp 4-component vector of float Position)
0:162 direct index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
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})
0:162 Constant:
0:162 0 (const int)
0:162 Constant:
0:162 0 (const int)
0:162 Constant:
0:162 1.000000
0:162 1.000000
0:162 1.000000
0:162 1.000000
0:163 direct index (temp highp int)
0:163 'outa' (out 4-element array of highp int)
0:163 Constant:
0:163 1 (const int)
0:164 direct index (temp block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
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})
0:164 Constant:
0:164 0 (const int)
0:165 Function Call: outputtingOutparam(i1; (global void)
0:165 direct index (temp highp int)
0:165 'outa' (out 4-element array of highp int)
0:165 Constant:
0:165 0 (const int)
0:166 Function Call: outputtingOutparam(i1; (global void)
0:166 indirect index (temp highp int)
0:166 'outa' (out 4-element array of highp int)
0:166 'gl_InvocationID' (in highp int InvocationID)
0:167 move second child to first child (temp highp float)
0:167 f: direct index for structure (out highp float)
0:167 direct index (patch temp block{out highp float f})
0:167 'patchIName' (patch out 4-element array of block{out highp float f})
0:167 Constant:
0:167 1 (const int)
0:167 Constant:
0:167 0 (const int)
0:167 Constant:
0:167 3.140000
0:168 move second child to first child (temp highp int)
0:168 indirect index (temp highp int)
0:168 'outa' (out 4-element array of highp int)
0:168 'gl_InvocationID' (in highp int InvocationID)
0:168 Constant:
0:168 2 (const int)
0:? Linker Objects
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})
0:? 'outa' (global 4-element array of highp int)
0:? 'outa' (out 4-element array of highp int)
0:? 'patchIn' (patch in highp 4-component vector of float)
0:? 'patchOut' (patch out highp 4-component vector of float)
0:? 'ina' (in highp 2-component vector of float)
@ -563,4 +703,6 @@ ERROR: node is still EOpNull!
0:? 'misSized' (out 5-element array of highp float)
0:? 'okaySize' (out 4-element array of highp float)
0:? 'pv3' (temp highp 3-component vector of float)
0:? 'badpatchIName' (patch out 1-element array of block{out highp float f})
0:? 'patchIName' (patch out 4-element array of block{out highp float f})

View File

@ -81,29 +81,26 @@ ERROR: node is still EOpNull!
0:29 'gl_InvocationID' (in int InvocationID)
0:31 move second child to first child (temp 4-component vector of float)
0:31 gl_Position: direct index for structure (out 4-component vector of float Position)
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})
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})
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})
0:31 Constant:
0:31 1 (const int)
0:31 'gl_InvocationID' (in int InvocationID)
0:31 Constant:
0:31 0 (const int)
0:31 'p' (temp 4-component vector of float)
0:32 move second child to first child (temp float)
0:32 gl_PointSize: direct index for structure (out float PointSize)
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})
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})
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})
0:32 Constant:
0:32 1 (const int)
0:32 'gl_InvocationID' (in int InvocationID)
0:32 Constant:
0:32 1 (const int)
0:32 'ps' (temp float)
0:33 move second child to first child (temp float)
0:33 direct index (temp float ClipDistance)
0:33 gl_ClipDistance: direct index for structure (out implicitly-sized array of float ClipDistance)
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})
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})
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})
0:33 Constant:
0:33 1 (const int)
0:33 'gl_InvocationID' (in int InvocationID)
0:33 Constant:
0:33 2 (const int)
0:33 Constant:
@ -279,29 +276,26 @@ ERROR: node is still EOpNull!
0:29 'gl_InvocationID' (in int InvocationID)
0:31 move second child to first child (temp 4-component vector of float)
0:31 gl_Position: direct index for structure (out 4-component vector of float Position)
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})
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})
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})
0:31 Constant:
0:31 1 (const int)
0:31 'gl_InvocationID' (in int InvocationID)
0:31 Constant:
0:31 0 (const int)
0:31 'p' (temp 4-component vector of float)
0:32 move second child to first child (temp float)
0:32 gl_PointSize: direct index for structure (out float PointSize)
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})
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})
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})
0:32 Constant:
0:32 1 (const int)
0:32 'gl_InvocationID' (in int InvocationID)
0:32 Constant:
0:32 1 (const int)
0:32 'ps' (temp float)
0:33 move second child to first child (temp float)
0:33 direct index (temp float ClipDistance)
0:33 gl_ClipDistance: direct index for structure (out 1-element array of float ClipDistance)
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})
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})
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})
0:33 Constant:
0:33 1 (const int)
0:33 'gl_InvocationID' (in int InvocationID)
0:33 Constant:
0:33 2 (const int)
0:33 Constant:

View File

@ -63,17 +63,15 @@ ERROR: node is still EOpNull!
0:23 'gl_InvocationID' (in int InvocationID)
0:25 move second child to first child (temp 4-component vector of float)
0:25 gl_Position: direct index for structure (out 4-component vector of float Position)
0:25 direct index (temp block{out 4-component vector of float Position gl_Position})
0:25 indirect index (temp block{out 4-component vector of float Position gl_Position})
0:25 'gl_out' (out 3-element array of block{out 4-component vector of float Position gl_Position})
0:25 Constant:
0:25 1 (const int)
0:25 'gl_InvocationID' (in int InvocationID)
0:25 Constant:
0:25 0 (const int)
0:25 'p' (temp 4-component vector of float)
0:26 direct index (temp block{out 4-component vector of float Position gl_Position})
0:26 indirect index (temp block{out 4-component vector of float Position gl_Position})
0:26 'gl_out' (out 3-element array of block{out 4-component vector of float Position gl_Position})
0:26 Constant:
0:26 1 (const int)
0:26 'gl_InvocationID' (in int InvocationID)
0:34 Function Definition: foo( (global void)
0:34 Function Parameters:
0:36 Sequence
@ -176,17 +174,15 @@ ERROR: node is still EOpNull!
0:23 'gl_InvocationID' (in int InvocationID)
0:25 move second child to first child (temp 4-component vector of float)
0:25 gl_Position: direct index for structure (out 4-component vector of float Position)
0:25 direct index (temp block{out 4-component vector of float Position gl_Position})
0:25 indirect index (temp block{out 4-component vector of float Position gl_Position})
0:25 'gl_out' (out 3-element array of block{out 4-component vector of float Position gl_Position})
0:25 Constant:
0:25 1 (const int)
0:25 'gl_InvocationID' (in int InvocationID)
0:25 Constant:
0:25 0 (const int)
0:25 'p' (temp 4-component vector of float)
0:26 direct index (temp block{out 4-component vector of float Position gl_Position})
0:26 indirect index (temp block{out 4-component vector of float Position gl_Position})
0:26 'gl_out' (out 3-element array of block{out 4-component vector of float Position gl_Position})
0:26 Constant:
0:26 1 (const int)
0:26 'gl_InvocationID' (in int InvocationID)
0:34 Function Definition: foo( (global void)
0:34 Function Parameters:
0:36 Sequence

View File

@ -10,10 +10,9 @@ vertices = 0
0:13 move second child to first child (temp float)
0:13 direct index (temp float CullDistance)
0:13 gl_CullDistance: direct index for structure (out implicitly-sized array of float CullDistance)
0:13 direct index (temp block{out implicitly-sized array of float CullDistance gl_CullDistance})
0:13 'gl_out' (out implicitly-sized array of block{out implicitly-sized array of float CullDistance gl_CullDistance})
0:13 Constant:
0:13 0 (const int)
0:13 indirect index (temp block{out implicitly-sized array of float CullDistance gl_CullDistance})
0:13 'gl_out' (out 4-element array of block{out implicitly-sized array of float CullDistance gl_CullDistance})
0:13 'gl_InvocationID' (in int InvocationID)
0:13 Constant:
0:13 0 (const int)
0:13 Constant:
@ -30,7 +29,7 @@ vertices = 0
0:13 2 (const int)
0:? Linker Objects
0:? 'gl_in' (in 32-element array of block{in implicitly-sized array of float CullDistance gl_CullDistance})
0:? 'gl_out' (out implicitly-sized array of block{out implicitly-sized array of float CullDistance gl_CullDistance})
0:? 'gl_out' (out 4-element array of block{out implicitly-sized array of float CullDistance gl_CullDistance})
Linked tessellation control stage:
@ -46,10 +45,9 @@ vertices = 0
0:13 move second child to first child (temp float)
0:13 direct index (temp float CullDistance)
0:13 gl_CullDistance: direct index for structure (out 1-element array of float CullDistance)
0:13 direct index (temp block{out 1-element array of float CullDistance gl_CullDistance})
0:13 'gl_out' (out 1-element array of block{out 1-element array of float CullDistance gl_CullDistance})
0:13 Constant:
0:13 0 (const int)
0:13 indirect index (temp block{out 1-element array of float CullDistance gl_CullDistance})
0:13 'gl_out' (out 4-element array of block{out 1-element array of float CullDistance gl_CullDistance})
0:13 'gl_InvocationID' (in int InvocationID)
0:13 Constant:
0:13 0 (const int)
0:13 Constant:
@ -66,5 +64,5 @@ vertices = 0
0:13 2 (const int)
0:? Linker Objects
0:? 'gl_in' (in 32-element array of block{in 1-element array of float CullDistance gl_CullDistance})
0:? 'gl_out' (out 1-element array of block{out 1-element array of float CullDistance gl_CullDistance})
0:? 'gl_out' (out 4-element array of block{out 1-element array of float CullDistance gl_CullDistance})

View File

@ -7,12 +7,12 @@ Linked tessellation control stage:
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 90
// Id's are bound by 93
Capability Tessellation
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint TessellationControl 4 "main" 52 76 80 81 84 85 88 89
EntryPoint TessellationControl 4 "main" 52 79 83 84 87 88 91 92
ExecutionMode 4 OutputVertices 4
Source GLSL 400
SourceExtension "GL_ARB_separate_shader_objects"
@ -37,16 +37,16 @@ Linked tessellation control stage:
MemberName 48(gl_PerVertex) 1 "gl_PointSize"
MemberName 48(gl_PerVertex) 2 "gl_ClipDistance"
Name 52 "gl_out"
Name 63 "gl_TessLevelOuter"
Name 70 "gl_TessLevelInner"
Name 75 "outa"
Name 76 "patchOut"
Name 80 "inb"
Name 81 "ind"
Name 84 "ivla"
Name 85 "ivlb"
Name 88 "ovla"
Name 89 "ovlb"
Name 66 "gl_TessLevelOuter"
Name 73 "gl_TessLevelInner"
Name 78 "outa"
Name 79 "patchOut"
Name 83 "inb"
Name 84 "ind"
Name 87 "ivla"
Name 88 "ivlb"
Name 91 "ovla"
Name 92 "ovlb"
MemberDecorate 19(gl_PerVertex) 0 BuiltIn Position
MemberDecorate 19(gl_PerVertex) 1 BuiltIn PointSize
MemberDecorate 19(gl_PerVertex) 2 BuiltIn ClipDistance
@ -58,15 +58,15 @@ Linked tessellation control stage:
MemberDecorate 48(gl_PerVertex) 1 BuiltIn PointSize
MemberDecorate 48(gl_PerVertex) 2 BuiltIn ClipDistance
Decorate 48(gl_PerVertex) Block
Decorate 63(gl_TessLevelOuter) Patch
Decorate 63(gl_TessLevelOuter) BuiltIn TessLevelOuter
Decorate 70(gl_TessLevelInner) Patch
Decorate 70(gl_TessLevelInner) BuiltIn TessLevelInner
Decorate 76(patchOut) Patch
Decorate 84(ivla) Location 3
Decorate 85(ivlb) Location 4
Decorate 88(ovla) Location 3
Decorate 89(ovlb) Location 4
Decorate 66(gl_TessLevelOuter) Patch
Decorate 66(gl_TessLevelOuter) BuiltIn TessLevelOuter
Decorate 73(gl_TessLevelInner) Patch
Decorate 73(gl_TessLevelInner) BuiltIn TessLevelInner
Decorate 79(patchOut) Patch
Decorate 87(ivla) Location 3
Decorate 88(ivlb) Location 4
Decorate 91(ovla) Location 3
Decorate 92(ovlb) Location 4
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
@ -100,35 +100,35 @@ Linked tessellation control stage:
50: TypeArray 48(gl_PerVertex) 49
51: TypePointer Output 50
52(gl_out): 51(ptr) Variable Output
54: TypePointer Output 15(fvec4)
57: TypePointer Output 14(float)
61: TypeArray 14(float) 49
62: TypePointer Output 61
63(gl_TessLevelOuter): 62(ptr) Variable Output
64: 10(int) Constant 3
65: 14(float) Constant 1078774989
67: 6(int) Constant 2
68: TypeArray 14(float) 67
69: TypePointer Output 68
70(gl_TessLevelInner): 69(ptr) Variable Output
71: 14(float) Constant 1067869798
73: TypeArray 10(int) 49
74: TypePointer Private 73
75(outa): 74(ptr) Variable Private
76(patchOut): 54(ptr) Variable Output
77: TypeVector 14(float) 2
78: TypeArray 77(fvec2) 20
79: TypePointer Input 78
80(inb): 79(ptr) Variable Input
81(ind): 79(ptr) Variable Input
82: TypeArray 15(fvec4) 20
83: TypePointer Input 82
84(ivla): 83(ptr) Variable Input
85(ivlb): 83(ptr) Variable Input
86: TypeArray 15(fvec4) 49
87: TypePointer Output 86
88(ovla): 87(ptr) Variable Output
89(ovlb): 87(ptr) Variable Output
55: TypePointer Output 15(fvec4)
59: TypePointer Output 14(float)
64: TypeArray 14(float) 49
65: TypePointer Output 64
66(gl_TessLevelOuter): 65(ptr) Variable Output
67: 10(int) Constant 3
68: 14(float) Constant 1078774989
70: 6(int) Constant 2
71: TypeArray 14(float) 70
72: TypePointer Output 71
73(gl_TessLevelInner): 72(ptr) Variable Output
74: 14(float) Constant 1067869798
76: TypeArray 10(int) 49
77: TypePointer Private 76
78(outa): 77(ptr) Variable Private
79(patchOut): 55(ptr) Variable Output
80: TypeVector 14(float) 2
81: TypeArray 80(fvec2) 20
82: TypePointer Input 81
83(inb): 82(ptr) Variable Input
84(ind): 82(ptr) Variable Input
85: TypeArray 15(fvec4) 20
86: TypePointer Input 85
87(ivla): 86(ptr) Variable Input
88(ivlb): 86(ptr) Variable Input
89: TypeArray 15(fvec4) 49
90: TypePointer Output 89
91(ovla): 90(ptr) Variable Output
92(ovlb): 90(ptr) Variable Output
4(main): 2 Function None 3
5: Label
12(a): 11(ptr) Variable Function
@ -156,18 +156,21 @@ Linked tessellation control stage:
Store 42(pid) 44
47: 10(int) Load 46(gl_InvocationID)
Store 45(iid) 47
53: 15(fvec4) Load 17(p)
55: 54(ptr) AccessChain 52(gl_out) 24 25
Store 55 53
56: 14(float) Load 30(ps)
58: 57(ptr) AccessChain 52(gl_out) 24 24
Store 58 56
59: 14(float) Load 34(cd)
60: 57(ptr) AccessChain 52(gl_out) 24 35 24
Store 60 59
66: 57(ptr) AccessChain 63(gl_TessLevelOuter) 64
Store 66 65
72: 57(ptr) AccessChain 70(gl_TessLevelInner) 24
Store 72 71
53: 10(int) Load 46(gl_InvocationID)
54: 15(fvec4) Load 17(p)
56: 55(ptr) AccessChain 52(gl_out) 53 25
Store 56 54
57: 10(int) Load 46(gl_InvocationID)
58: 14(float) Load 30(ps)
60: 59(ptr) AccessChain 52(gl_out) 57 24
Store 60 58
61: 10(int) Load 46(gl_InvocationID)
62: 14(float) Load 34(cd)
63: 59(ptr) AccessChain 52(gl_out) 61 35 24
Store 63 62
69: 59(ptr) AccessChain 66(gl_TessLevelOuter) 67
Store 69 68
75: 59(ptr) AccessChain 73(gl_TessLevelInner) 24
Store 75 74
Return
FunctionEnd

View File

@ -23,9 +23,9 @@ void main()
int pid = gl_PrimitiveID;
int iid = gl_InvocationID;
gl_out[1].gl_Position = p;
gl_out[1].gl_PointSize = ps;
gl_out[1].gl_ClipDistance[1] = cd;
gl_out[gl_InvocationID].gl_Position = p;
gl_out[gl_InvocationID].gl_PointSize = ps;
gl_out[gl_InvocationID].gl_ClipDistance[1] = cd;
gl_TessLevelOuter[3] = 3.2;
gl_TessLevelInner[1] = 1.3;

View 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"

View 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: