#version 310 es | |
#ifdef GL_EXT_geometry_shader | |
#extension GL_EXT_geometry_shader : enable | |
#else | |
#error no GL_EXT_geometry_shader | |
#endif | |
#ifndef GL_OES_geometry_shader | |
#error no GL_OES_geometry_shader | |
#endif | |
precision mediump float; | |
in fromVertex { | |
in vec3 color; | |
} fromV[]; | |
in vec4 nonBlockUnsized[]; | |
out toFragment { | |
out vec3 color; | |
} toF; | |
out fromVertex { // okay to reuse a block name for another block name | |
vec3 color; | |
}; | |
out fooB { // ERROR, cannot reuse block name as block instance | |
vec2 color; | |
} fromVertex; | |
int fromVertex; // ERROR, cannot reuse a block name for something else | |
out fooC { // ERROR, cannot have same name for block and instance name | |
vec2 color; | |
} fooC; | |
void main() | |
{ | |
EmitVertex(); | |
EndPrimitive(); | |
EmitStreamVertex(1); // ERROR | |
EndStreamPrimitive(0); // ERROR | |
color = fromV[0].color; | |
gl_ClipDistance[3] = // ERROR, no ClipDistance | |
gl_in[1].gl_ClipDistance[2]; // ERROR, no ClipDistance | |
gl_Position = gl_in[0].gl_Position; | |
gl_PrimitiveID = gl_PrimitiveIDIn; | |
gl_Layer = 2; | |
} | |
layout(stream = 4) out vec4 ov4; // ERROR, no streams | |
layout(line_strip, points, triangle_strip, points, triangle_strip) out; // just means triangle_strip" | |
out ooutb { vec4 a; } ouuaa6; | |
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, points) out; // ERROR, changing output primitive | |
layout(line_strip, points) 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; | |
in sameName { | |
int a15; | |
} insn[]; | |
out sameName { | |
float f15; | |
}; | |
uniform sameName { | |
bool b15; | |
}; | |
const int summ = gl_MaxVertexAttribs + | |
gl_MaxGeometryInputComponents + | |
gl_MaxGeometryOutputComponents + | |
gl_MaxGeometryImageUniforms + | |
gl_MaxGeometryTextureImageUnits + | |
gl_MaxGeometryOutputVertices + | |
gl_MaxGeometryTotalOutputComponents + | |
gl_MaxGeometryUniformComponents + | |
gl_MaxGeometryAtomicCounters + | |
gl_MaxGeometryAtomicCounterBuffers + | |
gl_MaxVertexTextureImageUnits + | |
gl_MaxCombinedTextureImageUnits + | |
gl_MaxTextureImageUnits + | |
gl_MaxDrawBuffers; | |
void fooe1() | |
{ | |
gl_ViewportIndex; // ERROR, not in ES | |
gl_MaxViewports; // ERROR, not in ES | |
insn.length(); // 4: lines_adjacency | |
int inv = gl_InvocationID; | |
} | |
in vec4 explArray[4]; | |
in vec4 explArrayBad[5]; // ERROR, wrong size | |
in vec4 nonArrayed; // ERROR, not an array | |
flat out vec3 myColor1; | |
centroid out vec3 myColor2; | |
centroid in vec3 centr[]; | |
sample out vec4 perSampleColor; // ERROR without sample extensions | |
layout(max_vertices = 200) out; // matching redecl | |
layout(location = 7, component = 2) in float comp[]; // ERROR, es has no component | |
void notHere() | |
{ | |
gl_MaxGeometryVaryingComponents; // ERROR, not in ES | |
gl_VerticesIn; // ERROR, not in ES | |
} | |
void pointSize1() | |
{ | |
highp float ps = gl_in[3].gl_PointSize; // ERROR, need point_size extension | |
gl_PointSize = ps; // ERROR, need point_size extension | |
} | |
#extension GL_OES_geometry_point_size : enable | |
void pointSize2() | |
{ | |
highp float ps = gl_in[3].gl_PointSize; | |
gl_PointSize = ps; | |
} |