git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@28653 e7fa87d3-cd2b-0410-9028-fcbf551c1848
		
			
				
	
	
		
			140 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
#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;
 |