зеркало из https://github.com/stride3d/xkslang.git
153 строки
4.2 KiB
GLSL
153 строки
4.2 KiB
GLSL
#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;
|
|
}
|