xref: /aosp_15_r20/external/deqp/data/gles31/shaders/gl45/linkage_io_block.test (revision 35238bce31c2a825756842865a792f8cf7f89930)
1# -------------------------------------------------
2# drawElements Quality Program OpenGL ES 3.2 Module
3# -------------------------------------------------
4#
5# Copyright 2016 The Android Open Source Project
6#
7# Licensed under the Apache License, Version 2.0 (the "License");
8# you may not use this file except in compliance with the License.
9# You may obtain a copy of the License at
10#
11#      http://www.apache.org/licenses/LICENSE-2.0
12#
13# Unless required by applicable law or agreed to in writing, software
14# distributed under the License is distributed on an "AS IS" BASIS,
15# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16# See the License for the specific language governing permissions and
17# limitations under the License.
18
19
20case mismatch_number_of_declarations
21    version 450
22    desc "Shader io block mismatch: different number of declarations"
23    expect link_fail
24    vertex ""
25        #version 450
26        ${VERTEX_DECLARATIONS}
27        out IOBlockName
28        {
29            mediump float variable1;
30        };
31
32        void main()
33        {
34            variable1 = float(gl_VertexID);
35            ${VERTEX_OUTPUT}
36        }
37    ""
38    fragment ""
39        #version 450
40        precision mediump float;
41        ${FRAGMENT_DECLARATIONS}
42        in IOBlockName
43        {
44            mediump float variable1;
45            mediump float variable2;
46        };
47
48        void main()
49        {
50            ${FRAG_COLOR} = vec4(variable1 + variable2);
51        }
52    ""
53end
54
55case mismatch_order
56    version 450
57    desc "Shader io block mismatch: different member declaration order"
58    expect link_fail
59    vertex ""
60        #version 450
61        ${VERTEX_DECLARATIONS}
62        out IOBlockName
63        {
64            mediump float variable1;
65            mediump float variable2;
66        };
67
68        void main()
69        {
70            variable1 = float(gl_VertexID);
71            ${VERTEX_OUTPUT}
72        }
73    ""
74    fragment ""
75        #version 450
76        precision mediump float;
77        ${FRAGMENT_DECLARATIONS}
78        in IOBlockName
79        {
80            mediump float variable2;
81            mediump float variable1;
82        };
83
84        void main()
85        {
86            ${FRAG_COLOR} = vec4(variable1 + variable2);
87        }
88    ""
89end
90
91case mismatch_type
92    version 450
93    desc "Shader io block mismatch: different member type"
94    expect link_fail
95    vertex ""
96        #version 450
97        ${VERTEX_DECLARATIONS}
98        out IOBlockName
99        {
100            mediump vec2 variable;
101        };
102
103        void main()
104        {
105            variable.x = float(gl_VertexID);
106            variable.y = float(gl_InstanceID);
107            ${VERTEX_OUTPUT}
108        }
109    ""
110    fragment ""
111        #version 450
112        precision mediump float;
113        ${FRAGMENT_DECLARATIONS}
114        in IOBlockName
115        {
116            mediump float variable;
117        };
118
119        void main()
120        {
121            ${FRAG_COLOR} = vec4(variable);
122        }
123    ""
124end
125
126case mismatch_member_name
127    version 450
128    desc "Shader io block mismatch: different member name"
129    expect link_fail
130    vertex ""
131        #version 450
132        ${VERTEX_DECLARATIONS}
133        out IOBlockName
134        {
135            mediump float variable1;
136        };
137
138        void main()
139        {
140            variable1 = float(gl_VertexID);
141            ${VERTEX_OUTPUT}
142        }
143    ""
144    fragment ""
145        #version 450
146        precision mediump float;
147        ${FRAGMENT_DECLARATIONS}
148        in IOBlockName
149        {
150            mediump float variable2;
151        };
152
153        void main()
154        {
155            ${FRAG_COLOR} = vec4(variable2);
156        }
157    ""
158end
159
160case mismatch_member_array_size
161    version 450
162    desc "Shader io block mismatch: different member array size"
163    expect link_fail
164    vertex ""
165        #version 450
166        ${VERTEX_DECLARATIONS}
167        out IOBlockName
168        {
169            mediump float variable[1];
170        };
171
172        void main()
173        {
174            variable[0] = float(gl_VertexID);
175            ${VERTEX_OUTPUT}
176        }
177    ""
178    fragment ""
179        #version 450
180        precision mediump float;
181        ${FRAGMENT_DECLARATIONS}
182        in IOBlockName
183        {
184            mediump float variable[2];
185        };
186
187        void main()
188        {
189            ${FRAG_COLOR} = vec4(variable[0] + variable[1]);
190        }
191    ""
192end
193
194case with_and_without_instance_name
195    version 450
196    desc "Shader io block: with and without instance name"
197    values
198    {
199        input float in0 = 1.0;
200        output float out0 = 1.0;
201    }
202    vertex ""
203        #version 450
204        ${VERTEX_DECLARATIONS}
205        out IOBlockName
206        {
207            mediump float variable;
208        } instanceName;
209
210        void main()
211        {
212            instanceName.variable = in0;
213            ${VERTEX_OUTPUT}
214        }
215    ""
216    fragment ""
217        #version 450
218        precision mediump float;
219        ${FRAGMENT_DECLARATIONS}
220        in IOBlockName
221        {
222            mediump float variable;
223        };
224
225        void main()
226        {
227            out0 = variable;
228            ${FRAGMENT_OUTPUT}
229        }
230    ""
231end
232
233case mismatch_block_array_size
234    version 450
235    desc "Shader io block mismatch: different array size"
236    expect link_fail
237    vertex ""
238        #version 450
239        ${VERTEX_DECLARATIONS}
240        out IOBlockName
241        {
242            mediump float variable;
243        } instanceName[1];
244
245        void main()
246        {
247            instanceName[0].variable = float(gl_VertexID);
248            ${VERTEX_OUTPUT}
249        }
250    ""
251    fragment ""
252        #version 450
253        precision mediump float;
254        ${FRAGMENT_DECLARATIONS}
255        in IOBlockName
256        {
257            mediump float variable;
258        } instanceName[2];
259
260        void main()
261        {
262            ${FRAG_COLOR} = vec4(instanceName[0].variable + instanceName[1].variable);
263        }
264    ""
265end
266
267case ambiguous_variable_name_1
268    version 450
269    desc "Unnamed io block variable and global variable with identical names"
270    expect compile_or_link_fail
271    vertex ""
272        #version 450
273        ${VERTEX_DECLARATIONS}
274        float variable;
275        out IOBlockName
276        {
277            mediump float variable;
278        };
279
280        void main()
281        {
282            variable = float(gl_VertexID);
283            ${VERTEX_OUTPUT}
284        }
285    ""
286    fragment ""
287        #version 450
288        precision mediump float;
289        ${FRAGMENT_DECLARATIONS}
290        in IOBlockName
291        {
292            mediump float variable;
293        };
294
295        void main()
296        {
297            ${FRAG_COLOR} = vec4(variable);
298        }
299    ""
300end
301
302case ambiguous_variable_name_2
303    version 450
304    desc "Two unnamed io blocks with variables with identical names"
305    expect compile_or_link_fail
306    vertex ""
307        #version 450
308        ${VERTEX_DECLARATIONS}
309        out IOBlockNameA
310        {
311            mediump float variable;
312        };
313        out IOBlockNameB
314        {
315            mediump float variable;
316        };
317
318        void main()
319        {
320            variable = float(gl_VertexID);
321            ${VERTEX_OUTPUT}
322        }
323    ""
324    fragment ""
325        #version 450
326        precision mediump float;
327        ${FRAGMENT_DECLARATIONS}
328        in IOBlockNameA
329        {
330            mediump float variable;
331        };
332        in IOBlockNameB
333        {
334            mediump float variable;
335        };
336
337        void main()
338        {
339            ${FRAG_COLOR} = vec4(variable);
340        }
341    ""
342end
343