xref: /aosp_15_r20/external/deqp/data/gles31/shaders/es31/uniform_location.test (revision 35238bce31c2a825756842865a792f8cf7f89930)
1case duplicate_location
2    expect compile_or_link_fail
3    version 310 es
4    values { output float out0 = 0.0; }
5
6    both ""
7        #version 310 es
8        precision highp float;
9        layout(location = 0) uniform float uni0;
10        layout(location = 0) uniform float uni1;
11        ${DECLARATIONS}
12
13        void main()
14        {
15            out0 = uni0 + uni1;
16            ${OUTPUT}
17        }
18    ""
19end
20
21case duplicate_location_unused
22    expect compile_or_link_fail
23    version 310 es
24    values { output float out0 = 0.0; }
25
26    both ""
27        #version 310 es
28        precision highp float;
29        layout(location = 0) uniform float uni0;
30        layout(location = 0) uniform float uni1;
31        ${DECLARATIONS}
32
33        void main()
34        {
35            out0 = 0.0;
36            ${OUTPUT}
37        }
38    ""
39end
40
41case duplicate_location_split
42    expect compile_or_link_fail
43    version 310 es
44    values{ output float out0 = 0.0; }
45
46    vertex ""
47        #version 310 es
48        precision highp float;
49        layout(location = 0) uniform float uni0;
50
51        in highp vec4 dEQP_Position;
52
53        void main()
54        {
55            gl_Position = dEQP_Position;
56        }
57    ""
58
59    fragment ""
60        #version 310 es
61        precision highp float;
62        layout(location = 0) uniform float uni1;
63
64        layout(location = 0) out mediump vec4 dEQP_FragColor;
65
66        void main()
67        {
68            dEQP_FragColor = vec4(1);
69        }
70    ""
71end
72
73case array_overlap
74    expect compile_or_link_fail
75    version 310 es
76    values { output float out0 = 0.0; }
77
78    both ""
79        #version 310 es
80        precision highp float;
81        layout(location = 0) uniform float uni0[8];
82        layout(location = 5) uniform float uni1;
83        ${DECLARATIONS}
84
85        void main()
86        {
87            out0 = uni0[0] + uni1;
88            ${OUTPUT}
89        }
90    ""
91end
92
93case array_overlap_unused
94    expect compile_or_link_fail
95    version 310 es
96    values { output float out0 = 0.0; }
97
98    both ""
99        #version 310 es
100        precision highp float;
101        layout(location = 0) uniform float uni0[8];
102        layout(location = 5) uniform float uni1;
103        ${DECLARATIONS}
104
105        void main()
106        {
107            out0 = 0.0;
108            ${OUTPUT}
109        }
110    ""
111end
112
113case array_overlap_split
114    expect compile_or_link_fail
115    version 310 es
116    values{ output float out0 = 0.0; }
117
118    vertex ""
119        #version 310 es
120        precision highp float;
121        layout(location = 0) uniform float uni0[8];
122
123        in highp vec4 dEQP_Position;
124
125        void main()
126        {
127            gl_Position = dEQP_Position;
128        }
129    ""
130
131    fragment ""
132        #version 310 es
133        precision highp float;
134        layout(location = 7) uniform float uni1[4];
135
136        layout(location = 0) out mediump vec4 dEQP_FragColor;
137
138        void main()
139        {
140            dEQP_FragColor = vec4(1);
141        }
142    ""
143end
144
145case struct_overlap
146    expect compile_or_link_fail
147    version 310 es
148    values { output float out0 = 0.0; }
149
150    both ""
151        #version 310 es
152        precision highp float;
153
154        struct S
155        {
156            vec4 a;
157            int  b;
158            mat4 c;
159        };
160
161        layout(location = 0) uniform S uni0;
162        layout(location = 2) uniform float uni1;
163        ${DECLARATIONS}
164
165        void main()
166        {
167            out0 = uni0.a.x + uni1;
168            ${OUTPUT}
169        }
170    ""
171end
172
173case struct_overlap_unused
174    expect compile_or_link_fail
175    version 310 es
176    values { output float out0 = 0.0; }
177
178    both ""
179        #version 310 es
180        precision highp float;
181
182        struct S
183        {
184            vec4 a;
185            int  b;
186            mat4 c;
187        };
188
189        layout(location = 0) uniform S uni0;
190        layout(location = 2) uniform float uni1;
191        ${DECLARATIONS}
192
193        void main()
194        {
195            out0 = 0.0;
196            ${OUTPUT}
197        }
198    ""
199end
200
201case struct_overlap_split
202    expect compile_or_link_fail
203    version 310 es
204    values{ output float out0 = 0.0; }
205
206    vertex ""
207        #version 310 es
208        precision highp float;
209
210        struct S
211        {
212            vec4 a;
213            int  b;
214            uint c;
215            vec2 d;
216        };
217
218        layout(location = 7) uniform S uni0;
219        layout(location = 12) uniform float uni2;
220
221        in highp vec4 dEQP_Position;
222
223        void main()
224        {
225            gl_Position = dEQP_Position;
226        }
227    ""
228
229    fragment ""
230        #version 310 es
231        precision highp float;
232        layout(location = 9) uniform float uni1[4];
233
234        layout(location = 0) out mediump vec4 dEQP_FragColor;
235
236        void main()
237        {
238            dEQP_FragColor = vec4(1);
239        }
240    ""
241end
242
243case complex_overlap
244    expect compile_or_link_fail
245    version 310 es
246    values { output float out0 = 0.0; }
247
248    both ""
249        #version 310 es
250        precision highp float;
251
252        struct S // size 2
253        {
254            vec3 a;
255            float b;
256        };
257
258        struct T // size 5
259        {
260            S s[2];
261            mat2 a;
262        };
263
264        struct U // size 6
265        {
266            S s;
267            float a[4];
268        };
269
270        layout(location = 0) uniform S  uni0; // good
271        layout(location = 1) uniform T  uni1; // bad
272        layout(location = 6) uniform T  uni2; // good
273        layout(location = 11) uniform U uni3[3]; // good
274        layout(location = 20) uniform S uni4; // bad
275        layout(location = 28) uniform int uni5; // bad
276        ${DECLARATIONS}
277
278        void main()
279        {
280            out0 = 0.0;
281            ${OUTPUT}
282        }
283    ""
284end
285
286case atomic
287    # \todo [2014-02-14 otto] invalid layout qualifier is generally a compiler error but spec does not yet say that this should be an error. Verify & fix once final 3.1 spec is out
288    expect compile_fail
289    version 310 es
290    values { output float out0 = 0.0; }
291
292    both ""
293        #version 310 es
294        precision highp float;
295        layout(location = 3, binding = 0, offset = 0) uniform atomic_uint uni0;
296        ${DECLARATIONS}
297
298        void main()
299        {
300            out0 = 0.0;
301            ${OUTPUT}
302        }
303    ""
304end
305