ext_gpu_shader4: add compiler tests for everything
[piglit.git] / tests / spec / arb_tessellation_shader / execution / variable-indexing / tcs-patch-output-array-vec2-index-wr.shader_test
blob67690772ad2f790433fb73f92458b48b7f091dda
1 [require]
2 GLSL >= 1.50
3 GL_ARB_tessellation_shader
5 [vertex shader]
6 #version 150
8 in vec4 piglit_vertex;
10 void main()
12     gl_Position = piglit_vertex;
15 [tessellation control shader]
16 #version 150
17 #extension GL_ARB_tessellation_shader : require
18 layout(vertices = 4) out;
20 uniform int index;
21 patch out vec2 m1[16];
22 patch out vec2 m2[14];
24 void main()
26     for (int i = 0; i < 16; i++)
27         m1[i] = vec2(1.0, 1.1) + vec2(i);
29     for (int i = 0; i < 14; i++)
30         m2[i] = vec2(1.0, 1.1) + vec2(16+i);
32     if (index >= 16)
33         m2[index-16] = vec2(0.0, 0.1);
34     else
35         m1[index] = vec2(0.0, 0.1);
37     gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
38     gl_TessLevelOuter = float[4](1.0, 1.0, 1.0, 1.0);
39     gl_TessLevelInner = float[2](1.0, 1.0);
42 [tessellation evaluation shader]
43 #version 150
44 #extension GL_ARB_tessellation_shader : require
45 layout(quads, equal_spacing) in;
47 uniform int index;
48 patch in vec2 m1[16];
49 patch in vec2 m2[14];
50 out vec4 fscolor;
52 #define INTERP_QUADj(INj, OUT) do { \
53     vec4 v[4]; \
54     for (int j = 0; j < 4; j++) v[j] = INj; \
55     OUT = mix(mix(v[0], v[1], gl_TessCoord[0]), mix(v[2], v[3], gl_TessCoord[0]), \
56               gl_TessCoord[1]); \
57 } while(false)
59 void main() {
60     bool pass = true;
62     for (int i = 0; i < 16; i++) {
63         pass = pass && m1[i] == (index == i ?
64                              vec2(0.0, 0.1) :
65                              vec2(1.0, 1.1) + vec2(i));
66     }
68     for (int i = 0; i < 14; i++) {
69         pass = pass && m2[i] == (index == 16+i ?
70                              vec2(0.0,   0.1) :
71                              vec2(17.0, 17.1) + vec2(i));
72     }
74     fscolor = pass ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0);
76     INTERP_QUADj(gl_in[j].gl_Position, gl_Position);
79 [fragment shader]
80 #version 150
81 in vec4 fscolor;
82 out vec4 outcolor;
84 void main()
86     outcolor = fscolor;
89 [test]
90 clear color 0.5 0.5 0.5 0.5
91 clear
93 patch parameter vertices 4
95 uniform int index 0
96 draw rect patch -1 -1 0.09 0.09
97 #draw arrays GL_PATCHES 0 4
98 probe rgb 6 6 0.0 1.0 0.0
100 uniform int index 1
101 draw rect patch -0.9 -1 0.09 0.09
102 probe rgb 18 6 0.0 1.0 0.0
104 uniform int index 2
105 draw rect patch -0.8 -1 0.09 0.09
106 probe rgb 31 6 0.0 1.0 0.0
108 uniform int index 3
109 draw rect patch -0.7 -1 0.09 0.09
110 probe rgb 43 6 0.0 1.0 0.0
112 uniform int index 4
113 draw rect patch -0.6 -1 0.09 0.09
114 probe rgb 56 6 0.0 1.0 0.0
116 uniform int index 5
117 draw rect patch -0.5 -1 0.09 0.09
118 probe rgb 68 6 0.0 1.0 0.0
120 uniform int index 6
121 draw rect patch -0.4 -1 0.09 0.09
122 probe rgb 81 6 0.0 1.0 0.0
124 uniform int index 7
125 draw rect patch -0.3 -1 0.09 0.09
126 probe rgb 93 6 0.0 1.0 0.0
128 uniform int index 8
129 draw rect patch -0.2 -1 0.09 0.09
130 probe rgb 106 6 0.0 1.0 0.0
132 uniform int index 9
133 draw rect patch -0.1 -1 0.09 0.09
134 probe rgb 118 6 0.0 1.0 0.0
136 uniform int index 10
137 draw rect patch 0 -1 0.09 0.09
138 probe rgb 131 6 0.0 1.0 0.0
140 uniform int index 11
141 draw rect patch 0.1 -1 0.09 0.09
142 probe rgb 143 6 0.0 1.0 0.0
144 uniform int index 12
145 draw rect patch 0.2 -1 0.09 0.09
146 probe rgb 156 6 0.0 1.0 0.0
148 uniform int index 13
149 draw rect patch 0.3 -1 0.09 0.09
150 probe rgb 168 6 0.0 1.0 0.0
152 uniform int index 14
153 draw rect patch 0.4 -1 0.09 0.09
154 probe rgb 181 6 0.0 1.0 0.0
156 uniform int index 15
157 draw rect patch 0.5 -1.0 0.09 0.09
158 probe rgb 193 6 0.0 1.0 0.0
160 uniform int index 16
161 draw rect patch -1 -0.9 0.09 0.09
162 probe rgb 6 18 0.0 1.0 0.0
164 uniform int index 17
165 draw rect patch -0.9 -0.9 0.09 0.09
166 probe rgb 18 18 0.0 1.0 0.0
168 uniform int index 18
169 draw rect patch -0.8 -0.9 0.09 0.09
170 probe rgb 31 18 0.0 1.0 0.0
172 uniform int index 19
173 draw rect patch -0.7 -0.9 0.09 0.09
174 probe rgb 43 18 0.0 1.0 0.0
176 uniform int index 20
177 draw rect patch -0.6 -0.9 0.09 0.09
178 probe rgb 56 18 0.0 1.0 0.0
180 uniform int index 21
181 draw rect patch -0.5 -0.9 0.09 0.09
182 probe rgb 68 18 0.0 1.0 0.0
184 uniform int index 22
185 draw rect patch -0.4 -0.9 0.09 0.09
186 probe rgb 81 18 0.0 1.0 0.0
188 uniform int index 23
189 draw rect patch -0.3 -0.9 0.09 0.09
190 probe rgb 93 18 0.0 1.0 0.0
192 uniform int index 24
193 draw rect patch -0.2 -0.9 0.09 0.09
194 probe rgb 106 18 0.0 1.0 0.0
196 uniform int index 25
197 draw rect patch -0.1 -0.9 0.09 0.09
198 probe rgb 118 18 0.0 1.0 0.0
200 uniform int index 26
201 draw rect patch 0 -0.9 0.09 0.09
202 probe rgb 131 18 0.0 1.0 0.0
204 uniform int index 27
205 draw rect patch 0.1 -0.9 0.09 0.09
206 probe rgb 143 18 0.0 1.0 0.0
208 uniform int index 28
209 draw rect patch 0.2 -0.9 0.09 0.09
210 probe rgb 156 18 0.0 1.0 0.0
212 uniform int index 29
213 draw rect patch 0.3 -0.9 0.09 0.09
214 probe rgb 168 18 0.0 1.0 0.0