#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; |