xref: /aosp_15_r20/external/deqp/data/gles31/shaders/es31/linkage_shader_storage_block.test (revision 35238bce31c2a825756842865a792f8cf7f89930)
1
2case mismatch_number_of_declarations
3    version 310 es
4    desc "Shader storage block mismatch: different number of declarations"
5    require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
6    require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0
7    expect link_fail
8    vertex ""
9        #version 310 es
10        ${VERTEX_DECLARATIONS}
11        layout(binding=0) buffer BufferBlockName
12        {
13            mediump float variable1;
14        };
15
16        out mediump float vtx_val;
17        void main()
18        {
19            vtx_val = variable1;
20            ${VERTEX_OUTPUT}
21        }
22    ""
23    fragment ""
24        #version 310 es
25        precision mediump float;
26        ${FRAGMENT_DECLARATIONS}
27        layout(binding=0) buffer BufferBlockName
28        {
29            mediump float variable1;
30            mediump float variable2;
31        };
32
33        in mediump float vtx_val;
34        void main()
35        {
36            ${FRAG_COLOR} = vec4(vtx_val + variable1 + variable2);
37        }
38    ""
39end
40
41case mismatch_order
42    version 310 es
43    desc "Shader storage block mismatch: different number of declarations"
44    require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
45    require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0
46    expect link_fail
47    vertex ""
48        #version 310 es
49        ${VERTEX_DECLARATIONS}
50        layout(binding=0) buffer BufferBlockName
51        {
52            mediump float variable1;
53            mediump float variable2;
54        };
55
56        out mediump float vtx_val;
57        void main()
58        {
59            vtx_val = variable1 + variable2;
60            ${VERTEX_OUTPUT}
61        }
62    ""
63    fragment ""
64        #version 310 es
65        precision mediump float;
66        ${FRAGMENT_DECLARATIONS}
67        layout(binding=0) buffer BufferBlockName
68        {
69            mediump float variable2;
70            mediump float variable1;
71        };
72
73        in mediump float vtx_val;
74        void main()
75        {
76            ${FRAG_COLOR} = vec4(vtx_val + variable1 + variable2);
77        }
78    ""
79end
80
81case mismatch_type
82    version 310 es
83    desc "Shader storage block mismatch: different number of declarations"
84    require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
85    require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0
86    expect link_fail
87    vertex ""
88        #version 310 es
89        ${VERTEX_DECLARATIONS}
90        layout(binding=0) buffer BufferBlockName
91        {
92            mediump vec2 variable;
93        };
94
95        out mediump float vtx_val;
96        void main()
97        {
98            vtx_val = variable.y;
99            ${VERTEX_OUTPUT}
100        }
101    ""
102    fragment ""
103        #version 310 es
104        precision mediump float;
105        ${FRAGMENT_DECLARATIONS}
106        layout(binding=0) buffer BufferBlockName
107        {
108            mediump float variable;
109        };
110
111        in mediump float vtx_val;
112        void main()
113        {
114            ${FRAG_COLOR} = vec4(vtx_val + variable);
115        }
116    ""
117end
118
119case mismatch_member_name
120    version 310 es
121    desc "Shader storage block mismatch: different number of declarations"
122    require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
123    require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0
124    expect link_fail
125    vertex ""
126        #version 310 es
127        ${VERTEX_DECLARATIONS}
128        layout(binding=0) buffer BufferBlockName
129        {
130            mediump float variable1;
131        };
132
133        out mediump float vtx_val;
134        void main()
135        {
136            vtx_val = variable1;
137            ${VERTEX_OUTPUT}
138        }
139    ""
140    fragment ""
141        #version 310 es
142        precision mediump float;
143        ${FRAGMENT_DECLARATIONS}
144        layout(binding=0) buffer BufferBlockName
145        {
146            mediump float variable2;
147        };
148
149        in mediump float vtx_val;
150        void main()
151        {
152            ${FRAG_COLOR} = vec4(vtx_val + variable2);
153        }
154    ""
155end
156
157case mismatch_member_unsized_sized_array
158    version 310 es
159    desc "Shader storage block mismatch: different number of declarations"
160    require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
161    require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0
162    expect link_fail
163    vertex ""
164        #version 310 es
165        ${VERTEX_DECLARATIONS}
166        layout(binding=0) buffer BufferBlockName
167        {
168            mediump float variable[];
169        };
170
171        out mediump float vtx_val;
172        void main()
173        {
174            vtx_val = variable[0];
175            ${VERTEX_OUTPUT}
176        }
177    ""
178    fragment ""
179        #version 310 es
180        precision mediump float;
181        ${FRAGMENT_DECLARATIONS}
182        layout(binding=0) buffer BufferBlockName
183        {
184            mediump float variable[1];
185        };
186
187        in mediump float vtx_val;
188        void main()
189        {
190            ${FRAG_COLOR} = vec4(vtx_val + variable[0]);
191        }
192    ""
193end
194
195case mismatch_member_array_size
196    version 310 es
197    desc "Shader storage block mismatch: different number of declarations"
198    require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
199    require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0
200    expect link_fail
201    vertex ""
202        #version 310 es
203        ${VERTEX_DECLARATIONS}
204        layout(binding=0) buffer BufferBlockName
205        {
206            mediump float variable[1];
207        };
208
209        out mediump float vtx_val;
210        void main()
211        {
212            vtx_val = variable[0];
213            ${VERTEX_OUTPUT}
214        }
215    ""
216    fragment ""
217        #version 310 es
218        precision mediump float;
219        ${FRAGMENT_DECLARATIONS}
220        layout(binding=0) buffer BufferBlockName
221        {
222            mediump float variable[2];
223        };
224
225        in mediump float vtx_val;
226        void main()
227        {
228            ${FRAG_COLOR} = vec4(vtx_val + variable[0]);
229        }
230    ""
231end
232
233case mismatch_with_and_without_instance_name
234    version 310 es
235    desc "Shader storage block mismatch: different number of declarations"
236    require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
237    require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0
238    expect link_fail
239    vertex ""
240        #version 310 es
241        ${VERTEX_DECLARATIONS}
242        layout(binding=0) buffer BufferBlockName
243        {
244            mediump float variable;
245        } instanceName;
246
247        out mediump float vtx_val;
248        void main()
249        {
250            vtx_val = instanceName.variable;
251            ${VERTEX_OUTPUT}
252        }
253    ""
254    fragment ""
255        #version 310 es
256        precision mediump float;
257        ${FRAGMENT_DECLARATIONS}
258        layout(binding=0) buffer BufferBlockName
259        {
260            mediump float variable;
261        };
262
263        in mediump float vtx_val;
264        void main()
265        {
266            ${FRAG_COLOR} = vec4(vtx_val + variable);
267        }
268    ""
269end
270
271case mismatch_block_array_size
272    version 310 es
273    desc "Shader storage block mismatch: different number of declarations"
274    require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
275    require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0
276    expect link_fail
277    vertex ""
278        #version 310 es
279        ${VERTEX_DECLARATIONS}
280        layout(binding=0) buffer BufferBlockName
281        {
282            mediump float variable;
283        } instanceName[1];
284
285        out mediump float vtx_val;
286        void main()
287        {
288            vtx_val = instanceName[0].variable;
289            ${VERTEX_OUTPUT}
290        }
291    ""
292    fragment ""
293        #version 310 es
294        precision mediump float;
295        ${FRAGMENT_DECLARATIONS}
296        layout(binding=0) buffer BufferBlockName
297        {
298            mediump float variable;
299        } instanceName[2];
300
301        in mediump float vtx_val;
302        void main()
303        {
304            ${FRAG_COLOR} = vec4(vtx_val + instanceName[0].variable + instanceName[1].variable);
305        }
306    ""
307end
308
309case ambiguous_variable_name_1
310    version 310 es
311    desc "Unnamed shader storage block variable and global variable with identical names"
312    require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
313    expect compile_or_link_fail
314    vertex ""
315        #version 310 es
316        ${VERTEX_DECLARATIONS}
317        float variable;
318        layout(binding=0) buffer BufferBlockName
319        {
320            mediump float variable;
321        };
322
323        out mediump float vtx_val;
324        void main()
325        {
326            vtx_val = variable;
327            ${VERTEX_OUTPUT}
328        }
329    ""
330    fragment ""
331        #version 310 es
332        precision mediump float;
333        ${FRAGMENT_DECLARATIONS}
334        in mediump float vtx_val;
335        void main()
336        {
337            ${FRAG_COLOR} = vec4(vtx_val);
338        }
339    ""
340end
341
342case ambiguous_variable_name_2
343    version 310 es
344    desc "Two unnamed shader storage blocks with variables with identical names"
345    require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 1
346    expect compile_or_link_fail
347    vertex ""
348        #version 310 es
349        ${VERTEX_DECLARATIONS}
350        layout(binding=0) buffer BufferBlockNameA
351        {
352            mediump float variable;
353        };
354        layout(binding=1) buffer BufferBlockNameB
355        {
356            mediump float variable;
357        };
358
359        out mediump float vtx_val;
360        void main()
361        {
362            vtx_val = variable;
363            ${VERTEX_OUTPUT}
364        }
365    ""
366    fragment ""
367        #version 310 es
368        precision mediump float;
369        ${FRAGMENT_DECLARATIONS}
370        in mediump float vtx_val;
371        void main()
372        {
373            ${FRAG_COLOR} = vec4(vtx_val);
374        }
375    ""
376end
377
378case ambiguous_variable_name_3
379    version 310 es
380    desc "Two unnamed shader storage blocks in different stages with variables with identical names"
381    require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
382    require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0
383    # language to make link error explicitly defined. ("Within an interface, ...")
384    require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex, fragment }
385    expect link_fail
386    vertex ""
387        #version 310 es
388        ${VERTEX_DECLARATIONS}
389        layout(binding=0) buffer BufferBlockNameA
390        {
391            mediump float variable;
392        };
393
394        out mediump float vtx_val;
395        void main()
396        {
397            vtx_val = variable;
398            ${VERTEX_OUTPUT}
399        }
400    ""
401    fragment ""
402        #version 310 es
403        precision mediump float;
404        ${FRAGMENT_DECLARATIONS}
405        layout(binding=1) buffer BufferBlockNameB
406        {
407            mediump float variable;
408        };
409
410        in mediump float vtx_val;
411        void main()
412        {
413            ${FRAG_COLOR} = vec4(vtx_val + variable);
414        }
415    ""
416end
417