| #version 150 core | |
| in fromVertex { | |
| in vec3 color; | |
| } fromV[]; | |
| out toFragment { | |
| out vec3 color; | |
| } toF; | |
| out fromVertex { // okay to reuse a block name for another block name | |
| vec3 color; | |
| }; | |
| out fooB { | |
| vec2 color; | |
| } fromVertex; // ERROR, cannot reuse block name as block instance | |
| int fromVertex; // ERROR, cannot reuse a block name for something else | |
| out fooC { | |
| vec2 color; | |
| } fooC; // ERROR, cannot have same name for block and instance name | |
| void main() | |
| { | |
| EmitVertex(); | |
| EndPrimitive(); | |
| EmitStreamVertex(1); // ERROR | |
| EndStreamPrimitive(0); // ERROR | |
| color = fromV[0].color; | |
| gl_ClipDistance[3] = gl_in[1].gl_ClipDistance[2]; | |
| gl_Position = gl_in[0].gl_Position; | |
| gl_PointSize = gl_in[3].gl_PointSize; | |
| gl_PrimitiveID = gl_PrimitiveIDIn; | |
| gl_Layer = 2; | |
| } | |
| out vec4 ov0; // stream should be 0 | |
| layout(stream = 4) out vec4 ov4; | |
| out vec4 o1v0; // stream should be 0 | |
| layout(stream = 3) uniform; // ERROR | |
| layout(stream = 3) in; // ERROR | |
| layout(stream = 3) uniform int ua; // ERROR | |
| layout(stream = 3) uniform ubb { int ua; } ibb; // ERROR | |
| layout(line_strip, points, triangle_strip, stream = 3, points, triangle_strip) out; // just means "stream = 3, triangle_strip" | |
| layout(stream = 3, triangle_strip) out; | |
| out vec4 ov3; // stream should be 3 | |
| layout(stream = 6) out ooutb { vec4 a; } ouuaa6; | |
| layout(stream = 6) out ooutb2 { | |
| layout(stream = 6) vec4 a; | |
| } ouua6; | |
| layout(stream = 7) out ooutb3 { | |
| layout(stream = 6) vec4 a; // ERROR | |
| } ouua7; | |
| out vec4 ov2s3; // stream should be 3 | |
| layout(max_vertices = 200) out; | |
| layout(max_vertices = 300) out; // ERROR, too big | |
| void foo(layout(max_vertices = 4) int a) // ERROR | |
| { | |
| ouuaa6.a = vec4(1.0); | |
| } | |
| layout(line_strip, points, triangle_strip, stream = 3, points) out; // ERROR, changing output primitive | |
| layout(line_strip, points, stream = 3) out; // ERROR, changing output primitive | |
| layout(triangle_strip) in; // ERROR, not an input primitive | |
| layout(triangle_strip) uniform; // ERROR | |
| layout(triangle_strip) out vec4 badv4; // ERROR, not on a variable | |
| layout(triangle_strip) in vec4 bad2v4[]; // ERROR, not on a variable or input | |
| layout(invocations = 3) out outbn { int a; }; // 2 ERROR, not on a block, not until 4.0 | |
| out outbn2 { | |
| layout(invocations = 3) int a; // 2 ERRORs, not on a block member, not until 4.0 | |
| layout(max_vertices = 3) int b; // ERROR, not on a block member | |
| layout(triangle_strip) int c; // ERROR, not on a block member | |
| } outbi; | |
| layout(lines) out; // ERROR, not on output | |
| layout(lines_adjacency) in; | |
| layout(triangles) in; // ERROR, can't change it | |
| layout(triangles_adjacency) in; // ERROR, can't change it | |
| layout(invocations = 4) in; // ERROR, not until 4.0 | |
| in inbn { | |
| layout(stream = 2) int a; // ERROR, stream on input | |
| } inbi[]; | |
| in sameName { | |
| int a15; | |
| } insn[]; | |
| out sameName { | |
| float f15; | |
| }; | |
| uniform sameName { | |
| bool b15; | |
| }; | |
| float summ = gl_MaxVertexAttribs + | |
| gl_MaxVertexUniformComponents + | |
| gl_MaxVaryingFloats + | |
| gl_MaxVaryingComponents + | |
| gl_MaxVertexOutputComponents + | |
| gl_MaxGeometryInputComponents + | |
| gl_MaxGeometryOutputComponents + | |
| gl_MaxFragmentInputComponents + | |
| gl_MaxVertexTextureImageUnits + | |
| gl_MaxCombinedTextureImageUnits + | |
| gl_MaxTextureImageUnits + | |
| gl_MaxFragmentUniformComponents + | |
| gl_MaxDrawBuffers + | |
| gl_MaxClipDistances + | |
| gl_MaxGeometryTextureImageUnits + | |
| gl_MaxGeometryOutputVertices + | |
| gl_MaxGeometryTotalOutputComponents + | |
| gl_MaxGeometryUniformComponents + | |
| gl_MaxGeometryVaryingComponents; | |
| void fooe1() | |
| { | |
| gl_ViewportIndex = gl_MaxViewports - 1; | |
| } | |
| #extension GL_ARB_viewport_array : enable | |
| void fooe2() | |
| { | |
| gl_ViewportIndex = gl_MaxViewports - 1; | |
| } | |
| out int gl_ViewportIndex; |