Commit 1be8063e by John Kessenich

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

Also, generally allow ES variable indexing of in/out blocks.
parent 989df85d
...@@ -25,9 +25,9 @@ void main() ...@@ -25,9 +25,9 @@ void main()
int pid = gl_PrimitiveID; int pid = gl_PrimitiveID;
int iid = gl_InvocationID; int iid = gl_InvocationID;
gl_out[1].gl_Position = p; gl_out[gl_InvocationID].gl_Position = p;
gl_out[1].gl_PointSize = ps; gl_out[gl_InvocationID].gl_PointSize = ps;
gl_out[1].gl_ClipDistance[1] = cd; gl_out[gl_InvocationID].gl_ClipDistance[1] = cd;
gl_TessLevelOuter[3] = 3.2; gl_TessLevelOuter[3] = 3.2;
gl_TessLevelInner[1] = 1.3; gl_TessLevelInner[1] = 1.3;
......
...@@ -166,7 +166,7 @@ void fooIO() ...@@ -166,7 +166,7 @@ void fooIO()
{ {
vec4 v = inbinst.v + vAnon; vec4 v = inbinst.v + vAnon;
v *= arrayedInst[2].f; v *= arrayedInst[2].f;
v *= arrayedInst[i].f; // ERROR, not constant v *= arrayedInst[i].f;
} }
in vec4 gl_FragCoord; in vec4 gl_FragCoord;
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#extension GL_OES_tessellation_shader : enable #extension GL_OES_tessellation_shader : enable
layout(vertices = 4) out; layout(vertices = 4) out;
int outa[gl_out.length()]; out int outa[gl_out.length()];
layout(quads) in; // ERROR layout(quads) in; // ERROR
layout(ccw) out; // ERROR layout(ccw) out; // ERROR
...@@ -30,9 +30,9 @@ void main() ...@@ -30,9 +30,9 @@ void main()
int pid = gl_PrimitiveID; int pid = gl_PrimitiveID;
int iid = gl_InvocationID; int iid = gl_InvocationID;
gl_out[1].gl_Position = p; gl_out[gl_InvocationID].gl_Position = p;
gl_out[1].gl_PointSize = ps; // ERROR, need point_size extension gl_out[gl_InvocationID].gl_PointSize = ps; // ERROR, need point_size extension
gl_out[1].gl_ClipDistance[1] = cd; // ERROR, not in ES gl_out[gl_InvocationID].gl_ClipDistance[1] = cd; // ERROR, not in ES
gl_TessLevelOuter[3] = 3.2; gl_TessLevelOuter[3] = 3.2;
gl_TessLevelInner[1] = 1.3; gl_TessLevelInner[1] = 1.3;
...@@ -112,7 +112,7 @@ out float okaySize[4]; ...@@ -112,7 +112,7 @@ out float okaySize[4];
void pointSize2() void pointSize2()
{ {
float ps = gl_in[1].gl_PointSize; 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 #extension GL_OES_gpu_shader5 : enable
...@@ -141,3 +141,29 @@ void bb() ...@@ -141,3 +141,29 @@ void bb()
gl_BoundingBoxOES[1] = vec4(1.0); gl_BoundingBoxOES[1] = vec4(1.0);
gl_BoundingBoxOES[2] = vec4(2.0); // ERROR, overflow 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;
}
...@@ -28,9 +28,9 @@ void main() ...@@ -28,9 +28,9 @@ void main()
int pid = gl_PrimitiveID; int pid = gl_PrimitiveID;
int iid = gl_InvocationID; int iid = gl_InvocationID;
gl_out[1].gl_Position = p; gl_out[gl_InvocationID].gl_Position = p;
gl_out[1].gl_PointSize = ps; gl_out[gl_InvocationID].gl_PointSize = ps;
gl_out[1].gl_ClipDistance[1] = cd; gl_out[gl_InvocationID].gl_ClipDistance[1] = cd;
gl_TessLevelOuter[3] = 3.2; gl_TessLevelOuter[3] = 3.2;
gl_TessLevelInner[1] = 1.3; gl_TessLevelInner[1] = 1.3;
......
...@@ -22,8 +22,8 @@ void main() ...@@ -22,8 +22,8 @@ void main()
int pid = gl_PrimitiveID; int pid = gl_PrimitiveID;
int iid = gl_InvocationID; int iid = gl_InvocationID;
gl_out[1].gl_Position = p; gl_out[gl_InvocationID].gl_Position = p;
gl_out[1].gl_PointSize = ps; // ERROR gl_out[gl_InvocationID].gl_PointSize = ps; // ERROR
} }
out float outf; // ERROR, no array out float outf; // ERROR, no array
......
...@@ -6,9 +6,9 @@ in gl_PerVertex { ...@@ -6,9 +6,9 @@ in gl_PerVertex {
out gl_PerVertex { out gl_PerVertex {
float gl_CullDistance[3]; float gl_CullDistance[3];
} gl_out[]; } gl_out[4];
void main() 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];
} }
...@@ -49,7 +49,6 @@ ERROR: 0:148: 'inbname2' : Cannot reuse block name within the same interface: in ...@@ -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:153: 'badmember' : nameless block contains a member that already has a name at global scope
ERROR: 0:157: 'inbname' : redefinition ERROR: 0:157: 'inbname' : redefinition
ERROR: 0:159: 'vAnon' : 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: 'origin_upper_left' : not supported with this profile: es
ERROR: 0:173: 'pixel_center_integer' : 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 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 ...@@ -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:428: 'blend equation' : can only apply to a standalone qualifier
ERROR: 0:429: 'blend_support' : unknown blend equation ERROR: 0:429: 'blend_support' : unknown blend equation
ERROR: 0:431: 'fragment-shader array-of-array output' : not supported with this profile: es 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 Shader version: 310
......
...@@ -81,29 +81,26 @@ ERROR: node is still EOpNull! ...@@ -81,29 +81,26 @@ ERROR: node is still EOpNull!
0:29 'gl_InvocationID' (in int InvocationID) 0:29 'gl_InvocationID' (in int InvocationID)
0:31 move second child to first child (temp 4-component vector of float) 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 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 '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 'gl_InvocationID' (in int InvocationID)
0:31 1 (const int)
0:31 Constant: 0:31 Constant:
0:31 0 (const int) 0:31 0 (const int)
0:31 'p' (temp 4-component vector of float) 0:31 'p' (temp 4-component vector of float)
0:32 move second child to first child (temp float) 0:32 move second child to first child (temp float)
0:32 gl_PointSize: direct index for structure (out float PointSize) 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 '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 'gl_InvocationID' (in int InvocationID)
0:32 1 (const int)
0:32 Constant: 0:32 Constant:
0:32 1 (const int) 0:32 1 (const int)
0:32 'ps' (temp float) 0:32 'ps' (temp float)
0:33 move second child to first child (temp float) 0:33 move second child to first child (temp float)
0:33 direct index (temp float ClipDistance) 0:33 direct index (temp float ClipDistance)
0:33 gl_ClipDistance: direct index for structure (out implicitly-sized array of 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 '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 'gl_InvocationID' (in int InvocationID)
0:33 1 (const int)
0:33 Constant: 0:33 Constant:
0:33 2 (const int) 0:33 2 (const int)
0:33 Constant: 0:33 Constant:
...@@ -279,29 +276,26 @@ ERROR: node is still EOpNull! ...@@ -279,29 +276,26 @@ ERROR: node is still EOpNull!
0:29 'gl_InvocationID' (in int InvocationID) 0:29 'gl_InvocationID' (in int InvocationID)
0:31 move second child to first child (temp 4-component vector of float) 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 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 '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 'gl_InvocationID' (in int InvocationID)
0:31 1 (const int)
0:31 Constant: 0:31 Constant:
0:31 0 (const int) 0:31 0 (const int)
0:31 'p' (temp 4-component vector of float) 0:31 'p' (temp 4-component vector of float)
0:32 move second child to first child (temp float) 0:32 move second child to first child (temp float)
0:32 gl_PointSize: direct index for structure (out float PointSize) 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 '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 'gl_InvocationID' (in int InvocationID)
0:32 1 (const int)
0:32 Constant: 0:32 Constant:
0:32 1 (const int) 0:32 1 (const int)
0:32 'ps' (temp float) 0:32 'ps' (temp float)
0:33 move second child to first child (temp float) 0:33 move second child to first child (temp float)
0:33 direct index (temp float ClipDistance) 0:33 direct index (temp float ClipDistance)
0:33 gl_ClipDistance: direct index for structure (out 1-element array of 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 '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 'gl_InvocationID' (in int InvocationID)
0:33 1 (const int)
0:33 Constant: 0:33 Constant:
0:33 2 (const int) 0:33 2 (const int)
0:33 Constant: 0:33 Constant:
......
...@@ -63,17 +63,15 @@ ERROR: node is still EOpNull! ...@@ -63,17 +63,15 @@ ERROR: node is still EOpNull!
0:23 'gl_InvocationID' (in int InvocationID) 0:23 'gl_InvocationID' (in int InvocationID)
0:25 move second child to first child (temp 4-component vector of float) 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 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 'gl_out' (out 3-element array of block{out 4-component vector of float Position gl_Position})
0:25 Constant: 0:25 'gl_InvocationID' (in int InvocationID)
0:25 1 (const int)
0:25 Constant: 0:25 Constant:
0:25 0 (const int) 0:25 0 (const int)
0:25 'p' (temp 4-component vector of float) 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 'gl_out' (out 3-element array of block{out 4-component vector of float Position gl_Position})
0:26 Constant: 0:26 'gl_InvocationID' (in int InvocationID)
0:26 1 (const int)
0:34 Function Definition: foo( (global void) 0:34 Function Definition: foo( (global void)
0:34 Function Parameters: 0:34 Function Parameters:
0:36 Sequence 0:36 Sequence
...@@ -176,17 +174,15 @@ ERROR: node is still EOpNull! ...@@ -176,17 +174,15 @@ ERROR: node is still EOpNull!
0:23 'gl_InvocationID' (in int InvocationID) 0:23 'gl_InvocationID' (in int InvocationID)
0:25 move second child to first child (temp 4-component vector of float) 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 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 'gl_out' (out 3-element array of block{out 4-component vector of float Position gl_Position})
0:25 Constant: 0:25 'gl_InvocationID' (in int InvocationID)
0:25 1 (const int)
0:25 Constant: 0:25 Constant:
0:25 0 (const int) 0:25 0 (const int)
0:25 'p' (temp 4-component vector of float) 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 'gl_out' (out 3-element array of block{out 4-component vector of float Position gl_Position})
0:26 Constant: 0:26 'gl_InvocationID' (in int InvocationID)
0:26 1 (const int)
0:34 Function Definition: foo( (global void) 0:34 Function Definition: foo( (global void)
0:34 Function Parameters: 0:34 Function Parameters:
0:36 Sequence 0:36 Sequence
......
...@@ -10,10 +10,9 @@ vertices = 0 ...@@ -10,10 +10,9 @@ vertices = 0
0:13 move second child to first child (temp float) 0:13 move second child to first child (temp float)
0:13 direct index (temp float CullDistance) 0:13 direct index (temp float CullDistance)
0:13 gl_CullDistance: direct index for structure (out implicitly-sized array of 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 indirect 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 'gl_out' (out 4-element array of block{out implicitly-sized array of float CullDistance gl_CullDistance})
0:13 Constant: 0:13 'gl_InvocationID' (in int InvocationID)
0:13 0 (const int)
0:13 Constant: 0:13 Constant:
0:13 0 (const int) 0:13 0 (const int)
0:13 Constant: 0:13 Constant:
...@@ -30,7 +29,7 @@ vertices = 0 ...@@ -30,7 +29,7 @@ vertices = 0
0:13 2 (const int) 0:13 2 (const int)
0:? Linker Objects 0:? Linker Objects
0:? 'gl_in' (in 32-element array of block{in implicitly-sized array of float CullDistance gl_CullDistance}) 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: Linked tessellation control stage:
...@@ -46,10 +45,9 @@ vertices = 0 ...@@ -46,10 +45,9 @@ vertices = 0
0:13 move second child to first child (temp float) 0:13 move second child to first child (temp float)
0:13 direct index (temp float CullDistance) 0:13 direct index (temp float CullDistance)
0:13 gl_CullDistance: direct index for structure (out 1-element array of 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 indirect 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 'gl_out' (out 4-element array of block{out 1-element array of float CullDistance gl_CullDistance})
0:13 Constant: 0:13 'gl_InvocationID' (in int InvocationID)
0:13 0 (const int)
0:13 Constant: 0:13 Constant:
0:13 0 (const int) 0:13 0 (const int)
0:13 Constant: 0:13 Constant:
...@@ -66,5 +64,5 @@ vertices = 0 ...@@ -66,5 +64,5 @@ vertices = 0
0:13 2 (const int) 0:13 2 (const int)
0:? Linker Objects 0:? Linker Objects
0:? 'gl_in' (in 32-element array of block{in 1-element array of float CullDistance gl_CullDistance}) 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})
...@@ -7,12 +7,12 @@ Linked tessellation control stage: ...@@ -7,12 +7,12 @@ Linked tessellation control stage:
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80001 // Generated by (magic number): 80001
// Id's are bound by 90 // Id's are bound by 93
Capability Tessellation Capability Tessellation
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 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 ExecutionMode 4 OutputVertices 4
Source GLSL 400 Source GLSL 400
SourceExtension "GL_ARB_separate_shader_objects" SourceExtension "GL_ARB_separate_shader_objects"
...@@ -37,16 +37,16 @@ Linked tessellation control stage: ...@@ -37,16 +37,16 @@ Linked tessellation control stage:
MemberName 48(gl_PerVertex) 1 "gl_PointSize" MemberName 48(gl_PerVertex) 1 "gl_PointSize"
MemberName 48(gl_PerVertex) 2 "gl_ClipDistance" MemberName 48(gl_PerVertex) 2 "gl_ClipDistance"
Name 52 "gl_out" Name 52 "gl_out"
Name 63 "gl_TessLevelOuter" Name 66 "gl_TessLevelOuter"
Name 70 "gl_TessLevelInner" Name 73 "gl_TessLevelInner"
Name 75 "outa" Name 78 "outa"
Name 76 "patchOut" Name 79 "patchOut"
Name 80 "inb" Name 83 "inb"
Name 81 "ind" Name 84 "ind"
Name 84 "ivla" Name 87 "ivla"
Name 85 "ivlb" Name 88 "ivlb"
Name 88 "ovla" Name 91 "ovla"
Name 89 "ovlb" Name 92 "ovlb"
MemberDecorate 19(gl_PerVertex) 0 BuiltIn Position MemberDecorate 19(gl_PerVertex) 0 BuiltIn Position
MemberDecorate 19(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 19(gl_PerVertex) 1 BuiltIn PointSize
MemberDecorate 19(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 19(gl_PerVertex) 2 BuiltIn ClipDistance
...@@ -58,15 +58,15 @@ Linked tessellation control stage: ...@@ -58,15 +58,15 @@ Linked tessellation control stage:
MemberDecorate 48(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 48(gl_PerVertex) 1 BuiltIn PointSize
MemberDecorate 48(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 48(gl_PerVertex) 2 BuiltIn ClipDistance
Decorate 48(gl_PerVertex) Block Decorate 48(gl_PerVertex) Block
Decorate 63(gl_TessLevelOuter) Patch Decorate 66(gl_TessLevelOuter) Patch
Decorate 63(gl_TessLevelOuter) BuiltIn TessLevelOuter Decorate 66(gl_TessLevelOuter) BuiltIn TessLevelOuter
Decorate 70(gl_TessLevelInner) Patch Decorate 73(gl_TessLevelInner) Patch
Decorate 70(gl_TessLevelInner) BuiltIn TessLevelInner Decorate 73(gl_TessLevelInner) BuiltIn TessLevelInner
Decorate 76(patchOut) Patch Decorate 79(patchOut) Patch
Decorate 84(ivla) Location 3 Decorate 87(ivla) Location 3
Decorate 85(ivlb) Location 4 Decorate 88(ivlb) Location 4
Decorate 88(ovla) Location 3 Decorate 91(ovla) Location 3
Decorate 89(ovlb) Location 4 Decorate 92(ovlb) Location 4
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeInt 32 0 6: TypeInt 32 0
...@@ -100,35 +100,35 @@ Linked tessellation control stage: ...@@ -100,35 +100,35 @@ Linked tessellation control stage:
50: TypeArray 48(gl_PerVertex) 49 50: TypeArray 48(gl_PerVertex) 49
51: TypePointer Output 50 51: TypePointer Output 50
52(gl_out): 51(ptr) Variable Output 52(gl_out): 51(ptr) Variable Output
54: TypePointer Output 15(fvec4) 55: TypePointer Output 15(fvec4)
57: TypePointer Output 14(float) 59: TypePointer Output 14(float)
61: TypeArray 14(float) 49 64: TypeArray 14(float) 49
62: TypePointer Output 61 65: TypePointer Output 64
63(gl_TessLevelOuter): 62(ptr) Variable Output 66(gl_TessLevelOuter): 65(ptr) Variable Output
64: 10(int) Constant 3 67: 10(int) Constant 3
65: 14(float) Constant 1078774989 68: 14(float) Constant 1078774989
67: 6(int) Constant 2 70: 6(int) Constant 2
68: TypeArray 14(float) 67 71: TypeArray 14(float) 70
69: TypePointer Output 68 72: TypePointer Output 71
70(gl_TessLevelInner): 69(ptr) Variable Output 73(gl_TessLevelInner): 72(ptr) Variable Output
71: 14(float) Constant 1067869798 74: 14(float) Constant 1067869798
73: TypeArray 10(int) 49 76: TypeArray 10(int) 49
74: TypePointer Private 73 77: TypePointer Private 76
75(outa): 74(ptr) Variable Private 78(outa): 77(ptr) Variable Private
76(patchOut): 54(ptr) Variable Output 79(patchOut): 55(ptr) Variable Output
77: TypeVector 14(float) 2 80: TypeVector 14(float) 2
78: TypeArray 77(fvec2) 20 81: TypeArray 80(fvec2) 20
79: TypePointer Input 78 82: TypePointer Input 81
80(inb): 79(ptr) Variable Input 83(inb): 82(ptr) Variable Input
81(ind): 79(ptr) Variable Input 84(ind): 82(ptr) Variable Input
82: TypeArray 15(fvec4) 20 85: TypeArray 15(fvec4) 20
83: TypePointer Input 82 86: TypePointer Input 85
84(ivla): 83(ptr) Variable Input 87(ivla): 86(ptr) Variable Input
85(ivlb): 83(ptr) Variable Input 88(ivlb): 86(ptr) Variable Input
86: TypeArray 15(fvec4) 49 89: TypeArray 15(fvec4) 49
87: TypePointer Output 86 90: TypePointer Output 89
88(ovla): 87(ptr) Variable Output 91(ovla): 90(ptr) Variable Output
89(ovlb): 87(ptr) Variable Output 92(ovlb): 90(ptr) Variable Output
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
12(a): 11(ptr) Variable Function 12(a): 11(ptr) Variable Function
...@@ -156,18 +156,21 @@ Linked tessellation control stage: ...@@ -156,18 +156,21 @@ Linked tessellation control stage:
Store 42(pid) 44 Store 42(pid) 44
47: 10(int) Load 46(gl_InvocationID) 47: 10(int) Load 46(gl_InvocationID)
Store 45(iid) 47 Store 45(iid) 47
53: 15(fvec4) Load 17(p) 53: 10(int) Load 46(gl_InvocationID)
55: 54(ptr) AccessChain 52(gl_out) 24 25 54: 15(fvec4) Load 17(p)
Store 55 53 56: 55(ptr) AccessChain 52(gl_out) 53 25
56: 14(float) Load 30(ps) Store 56 54
58: 57(ptr) AccessChain 52(gl_out) 24 24 57: 10(int) Load 46(gl_InvocationID)
Store 58 56 58: 14(float) Load 30(ps)
59: 14(float) Load 34(cd) 60: 59(ptr) AccessChain 52(gl_out) 57 24
60: 57(ptr) AccessChain 52(gl_out) 24 35 24 Store 60 58
Store 60 59 61: 10(int) Load 46(gl_InvocationID)
66: 57(ptr) AccessChain 63(gl_TessLevelOuter) 64 62: 14(float) Load 34(cd)
Store 66 65 63: 59(ptr) AccessChain 52(gl_out) 61 35 24
72: 57(ptr) AccessChain 70(gl_TessLevelInner) 24 Store 63 62
Store 72 71 69: 59(ptr) AccessChain 66(gl_TessLevelOuter) 67
Store 69 68
75: 59(ptr) AccessChain 73(gl_TessLevelInner) 24
Store 75 74
Return Return
FunctionEnd FunctionEnd
...@@ -23,9 +23,9 @@ void main() ...@@ -23,9 +23,9 @@ void main()
int pid = gl_PrimitiveID; int pid = gl_PrimitiveID;
int iid = gl_InvocationID; int iid = gl_InvocationID;
gl_out[1].gl_Position = p; gl_out[gl_InvocationID].gl_Position = p;
gl_out[1].gl_PointSize = ps; gl_out[gl_InvocationID].gl_PointSize = ps;
gl_out[1].gl_ClipDistance[1] = cd; gl_out[gl_InvocationID].gl_ClipDistance[1] = cd;
gl_TessLevelOuter[3] = 3.2; gl_TessLevelOuter[3] = 3.2;
gl_TessLevelInner[1] = 1.3; gl_TessLevelInner[1] = 1.3;
......
...@@ -2,5 +2,5 @@ ...@@ -2,5 +2,5 @@
// For the version, it uses the latest git tag followed by the number of commits. // 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). // 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" #define GLSLANG_DATE "28-Nov-2015"
...@@ -518,8 +518,9 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn ...@@ -518,8 +518,9 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn
requireProfile(base->getLoc(), ~EEsProfile, "variable indexing buffer block array"); requireProfile(base->getLoc(), ~EEsProfile, "variable indexing buffer block array");
else if (base->getQualifier().storage == EvqUniform) else if (base->getQualifier().storage == EvqUniform)
profileRequires(base->getLoc(), EEsProfile, 0, Num_AEP_gpu_shader5, AEP_gpu_shader5, "variable indexing uniform block array"); profileRequires(base->getLoc(), EEsProfile, 0, Num_AEP_gpu_shader5, AEP_gpu_shader5, "variable indexing uniform block array");
else else {
requireProfile(base->getLoc(), ~EEsProfile, "variable indexing in/out block array"); // input/output blocks either don't exist or can be variable indexed
}
} else if (language == EShLangFragment && base->getQualifier().isPipeOutput()) } else if (language == EShLangFragment && base->getQualifier().isPipeOutput())
requireProfile(base->getLoc(), ~EEsProfile, "variable indexing fragment shader ouput array"); requireProfile(base->getLoc(), ~EEsProfile, "variable indexing fragment shader ouput array");
else if (base->getBasicType() == EbtSampler && version >= 130) { else if (base->getBasicType() == EbtSampler && version >= 130) {
...@@ -1871,6 +1872,21 @@ bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TInt ...@@ -1871,6 +1872,21 @@ bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TInt
switch(binaryNode->getOp()) { switch(binaryNode->getOp()) {
case EOpIndexDirect: case EOpIndexDirect:
case EOpIndexIndirect: 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: case EOpIndexDirectStruct:
return lValueErrorCheck(loc, op, binaryNode->getLeft()); return lValueErrorCheck(loc, op, binaryNode->getLeft());
case EOpVectorSwizzle: case EOpVectorSwizzle:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment