ext_gpu_shader4: add compiler tests for everything
[piglit.git] / tests / spec / glsl-1.50 / linker / invariant-qualifier-everywhere-gs-fs-inconsistency.shader_test
blobd2082855a5fd902b5b78644a32f91922d4b392d1
1 # Test that invariant qualifier is available to all shaders
3 # GLSL 1.50 section 4.6.1 (The Invariant Qualifier) says:
4 #   To ensure that a particular output variable is invariant, it is necessary
5 #   to use the invariant qualifier. It can either be used to qualify a
6 #   previously declared variable as being invariant
7 #       invariant gl_Position; // make existing gl_Position be invariant
8 #       out vec3 Color; // make existing Color be invariant
9 #       invariant Color;
10 #   or as part of a declaration when a variable is declared
11 #       invariant centroid out vec3 Color;
12 #   The invariant qualifier must appear before any interpolation qualifiers or
13 #   storage qualifiers when combined with a declaration. Only variables output
14 #   from a shader (including those that are then input to a subsequent shader)
15 #   can be candidates for invariance. This includes user-defined output variables
16 #   and the built-in output variables. For variables leaving one shader and coming
17 #   into another shader, the invariant keyword has to be used in both shaders,
18 #   or a link error will result.
20 # Test leaves out the required invariant qualifier from the fragment shader,
21 # and produce corresponding link error.
23 [require]
24 GL >= 3.2
25 GLSL >= 1.50
27 [vertex shader]
28 #version 150
30 in vec4 vertex;
31 invariant out vec4 pos;
32 invariant gl_Position;
33 invariant out vec4 extra01;
35 void main()
37     gl_Position = vertex;
38     pos = vertex;
41 [geometry shader]
42 #version 150
44 layout(triangles) in;
45 layout(triangle_strip, max_vertices=3) out;
47 invariant in vec4 pos[];
48 invariant in vec4 extra01[];
49 invariant out vec4 extra02;
52 void main()
54     for(int i = 0; i < 3; i++) {
55         gl_Position = pos[i] * 0.5;
56         extra02 = extra01[i] * 0.5;
57         EmitVertex();
58     }
63 [fragment shader]
64 #version 150
66 in vec4 extra02;
67 //invariant extra02; //redeclaration left out
68 out vec4 FragColor;
70 void main()
72     FragColor = vec4(extra02);
75 [vertex data]
76 vertex/float/2
77 -1.0 -1.0
78  1.0 -1.0
79  1.0  1.0
80 -1.0  1.0
82 [test]
83 link error