ext_gpu_shader4: add compiler tests for everything
[piglit.git] / tests / spec / arb_tessellation_shader / execution / variable-indexing / tcs-output-array-vec4-index-wr-before-barrier.shader_test
blob35d3f4fa1dd7e7cb6776e5403ecb58c6be4b6356
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 out block {
22   vec4 m1[16];
23   vec4 m2[14];
24 } var[];
25 out vec4 color[];
27 void main()
29     for (int i = 0; i < 16; i++)
30         var[gl_InvocationID].m1[i] = vec4(1.0, 1.1, 1.2, 1.3) + vec4(i);
32     for (int i = 0; i < 14; i++)
33         var[gl_InvocationID].m2[i] = vec4(1.0, 1.1, 1.2, 1.3) + vec4(16+i);
35     if (index >= 16)
36         var[gl_InvocationID].m2[index-16] = vec4(0.0, 0.1, 0.2, 0.3);
37     else
38         var[gl_InvocationID].m1[index] = vec4(0.0, 0.1, 0.2, 0.3);
40     gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
41     gl_TessLevelOuter = float[4](1.0, 1.0, 1.0, 1.0);
42     gl_TessLevelInner = float[2](1.0, 1.0);
44     barrier();
46     bool pass = true;
48     for (int i = 0; i < 16; i++) {
49         vec4 x = var[(gl_InvocationID + 1) % gl_PatchVerticesIn].m1[i];
51         pass = pass && x == (index == i ?
52                              vec4(0.0, 0.1, 0.2, 0.3) :
53                              vec4(1.0, 1.1, 1.2, 1.3) + vec4(i));
54     }
56     for (int i = 0; i < 14; i++) {
57         vec4 x = var[(gl_InvocationID + 1) % gl_PatchVerticesIn].m2[i];
59         pass = pass && x == (index == 16+i ?
60                              vec4(0.0, 0.1, 0.2, 0.3) :
61                              vec4(17.0, 17.1, 17.2, 17.3) + vec4(i));
62     }
64     color[gl_InvocationID] = pass ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0);
67 [tessellation evaluation shader]
68 #version 150
69 #extension GL_ARB_tessellation_shader : require
70 layout(quads, equal_spacing) in;
72 uniform int index;
73 in vec4 color[];
74 out vec4 fscolor;
76 #define INTERP_QUADj(INj, OUT) do { \
77     vec4 v[4]; \
78     for (int j = 0; j < 4; j++) v[j] = INj; \
79     OUT = mix(mix(v[0], v[1], gl_TessCoord[0]), mix(v[2], v[3], gl_TessCoord[0]), \
80               gl_TessCoord[1]); \
81 } while(false)
83 void main() {
84     INTERP_QUADj(color[j], fscolor);
85     INTERP_QUADj(gl_in[j].gl_Position, gl_Position);
88 [fragment shader]
89 #version 150
90 in vec4 fscolor;
91 out vec4 outcolor;
93 void main()
95     outcolor = fscolor;
98 [test]
99 clear color 0.5 0.5 0.5 0.5
100 clear
102 patch parameter vertices 4
104 uniform int index 0
105 draw rect patch -1 -1 0.09 0.09
106 #draw arrays GL_PATCHES 0 4
107 probe rgb 6 6 0.0 1.0 0.0
109 uniform int index 1
110 draw rect patch -0.9 -1 0.09 0.09
111 probe rgb 18 6 0.0 1.0 0.0
113 uniform int index 2
114 draw rect patch -0.8 -1 0.09 0.09
115 probe rgb 31 6 0.0 1.0 0.0
117 uniform int index 3
118 draw rect patch -0.7 -1 0.09 0.09
119 probe rgb 43 6 0.0 1.0 0.0
121 uniform int index 4
122 draw rect patch -0.6 -1 0.09 0.09
123 probe rgb 56 6 0.0 1.0 0.0
125 uniform int index 5
126 draw rect patch -0.5 -1 0.09 0.09
127 probe rgb 68 6 0.0 1.0 0.0
129 uniform int index 6
130 draw rect patch -0.4 -1 0.09 0.09
131 probe rgb 81 6 0.0 1.0 0.0
133 uniform int index 7
134 draw rect patch -0.3 -1 0.09 0.09
135 probe rgb 93 6 0.0 1.0 0.0
137 uniform int index 8
138 draw rect patch -0.2 -1 0.09 0.09
139 probe rgb 106 6 0.0 1.0 0.0
141 uniform int index 9
142 draw rect patch -0.1 -1 0.09 0.09
143 probe rgb 118 6 0.0 1.0 0.0
145 uniform int index 10
146 draw rect patch 0 -1 0.09 0.09
147 probe rgb 131 6 0.0 1.0 0.0
149 uniform int index 11
150 draw rect patch 0.1 -1 0.09 0.09
151 probe rgb 143 6 0.0 1.0 0.0
153 uniform int index 12
154 draw rect patch 0.2 -1 0.09 0.09
155 probe rgb 156 6 0.0 1.0 0.0
157 uniform int index 13
158 draw rect patch 0.3 -1 0.09 0.09
159 probe rgb 168 6 0.0 1.0 0.0
161 uniform int index 14
162 draw rect patch 0.4 -1 0.09 0.09
163 probe rgb 181 6 0.0 1.0 0.0
165 uniform int index 15
166 draw rect patch 0.5 -1.0 0.09 0.09
167 probe rgb 193 6 0.0 1.0 0.0
169 uniform int index 16
170 draw rect patch -1 -0.9 0.09 0.09
171 probe rgb 6 18 0.0 1.0 0.0
173 uniform int index 17
174 draw rect patch -0.9 -0.9 0.09 0.09
175 probe rgb 18 18 0.0 1.0 0.0
177 uniform int index 18
178 draw rect patch -0.8 -0.9 0.09 0.09
179 probe rgb 31 18 0.0 1.0 0.0
181 uniform int index 19
182 draw rect patch -0.7 -0.9 0.09 0.09
183 probe rgb 43 18 0.0 1.0 0.0
185 uniform int index 20
186 draw rect patch -0.6 -0.9 0.09 0.09
187 probe rgb 56 18 0.0 1.0 0.0
189 uniform int index 21
190 draw rect patch -0.5 -0.9 0.09 0.09
191 probe rgb 68 18 0.0 1.0 0.0
193 uniform int index 22
194 draw rect patch -0.4 -0.9 0.09 0.09
195 probe rgb 81 18 0.0 1.0 0.0
197 uniform int index 23
198 draw rect patch -0.3 -0.9 0.09 0.09
199 probe rgb 93 18 0.0 1.0 0.0
201 uniform int index 24
202 draw rect patch -0.2 -0.9 0.09 0.09
203 probe rgb 106 18 0.0 1.0 0.0
205 uniform int index 25
206 draw rect patch -0.1 -0.9 0.09 0.09
207 probe rgb 118 18 0.0 1.0 0.0
209 uniform int index 26
210 draw rect patch 0 -0.9 0.09 0.09
211 probe rgb 131 18 0.0 1.0 0.0
213 uniform int index 27
214 draw rect patch 0.1 -0.9 0.09 0.09
215 probe rgb 143 18 0.0 1.0 0.0
217 uniform int index 28
218 draw rect patch 0.2 -0.9 0.09 0.09
219 probe rgb 156 18 0.0 1.0 0.0
221 uniform int index 29
222 draw rect patch 0.3 -0.9 0.09 0.09
223 probe rgb 168 18 0.0 1.0 0.0