1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
# Section 4.3.8.1 (Input Layout Qualifiers) of the GLSL 1.50 spec says:
#
# It is a link-time error if not all provided sizes (sized input
# arrays and layout size) match across all geometry shaders in the
# program.
#
# This test exercises the case where one compilation unit provides a
# size via a layout declaration, and another provides a size
# implicitly by accessing a member of an input array using a constant
# that is consistent with the size provided in the layout declaration.
[require]
GLSL >= 1.50
[vertex shader]
#version 150
in int value;
flat out int value_to_gs;
void main()
{
value_to_gs = value;
}
[geometry shader]
#version 150
layout(triangles) in;
layout(triangle_strip, max_vertices = 4) out;
void do_vertex();
void main()
{
gl_Position = vec4(-1.0, -1.0, 0.0, 1.0);
do_vertex();
gl_Position = vec4(-1.0, 1.0, 0.0, 1.0);
do_vertex();
gl_Position = vec4(1.0, -1.0, 0.0, 1.0);
do_vertex();
gl_Position = vec4(1.0, 1.0, 0.0, 1.0);
do_vertex();
}
[geometry shader]
#version 150
flat in int value_to_gs[];
out vec4 color_to_fs;
void do_vertex()
{
if (value_to_gs[2] == 2)
color_to_fs = vec4(0.0, 1.0, 0.0, 1.0);
else
color_to_fs = vec4(1.0, 0.0, 0.0, 1.0);
EmitVertex();
}
[fragment shader]
#version 150
in vec4 color_to_fs;
out vec4 color;
void main()
{
color = color_to_fs;
}
[vertex data]
value/int/1
0
1
2
[test]
clear color 0.0 0.0 0.0 0.0
clear
draw arrays GL_TRIANGLES 0 3
probe all rgba 0.0 1.0 0.0 1.0
|