Fix missing dependency on sparse binds
[platform/upstream/VK-GL-CTS.git] / external / vulkancts / data / vulkan / amber / graphicsfuzz / cov-global-loop-counter-float-accumulate-matrix.amber
1 #!amber
2
3 # Copyright 2021 Google LLC
4 #
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
8 #
9 #     http://www.apache.org/licenses/LICENSE-2.0
10 #
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16
17
18 # A test for a coverage-gap found by the GraphicsFuzz project.
19
20 # Short description: A fragment shader that covers specific BRW code paths
21
22 # The test passes because the shader always writes red.
23
24 SHADER vertex variant_vertex_shader PASSTHROUGH
25
26 # variant_fragment_shader is derived from the following GLSL:
27 # #version 320 es
28 #
29 # #define _GLF_MAKE_IN_BOUNDS_INT(IDX, SZ)  clamp(IDX, 0, SZ - 1)
30 # #define _int_0 _GLF_uniform_int_values[0]
31 # #define _int_2 _GLF_uniform_int_values[1]
32 # #define _int_1 _GLF_uniform_int_values[2]
33 # #define _int_4 _GLF_uniform_int_values[3]
34 # #define _float_0_0 _GLF_uniform_float_values[0]
35 # #define _float_1_0 _GLF_uniform_float_values[1]
36 # #define _float_2_0 _GLF_uniform_float_values[2]
37 # #define _float_3_0 _GLF_uniform_float_values[3]
38 # #define _float_4_0 _GLF_uniform_float_values[4]
39 # #define _float_5_0 _GLF_uniform_float_values[5]
40 # #define _float_6_0 _GLF_uniform_float_values[6]
41 # #define _float_7_0 _GLF_uniform_float_values[7]
42 # #define _float_8_0 _GLF_uniform_float_values[8]
43 # #define _float_9_0 _GLF_uniform_float_values[9]
44 # #define _float_10_0 _GLF_uniform_float_values[10]
45 # #define _float_11_0 _GLF_uniform_float_values[11]
46 # #define _float_12_0 _GLF_uniform_float_values[12]
47 # #define _float_13_0 _GLF_uniform_float_values[13]
48 # #define _float_14_0 _GLF_uniform_float_values[14]
49 # #define _float_15_0 _GLF_uniform_float_values[15]
50 # #define _float_16_0 _GLF_uniform_float_values[16]
51 # #define _float_27_0 _GLF_uniform_float_values[17]
52 #
53 # precision highp int;
54 # precision highp float;
55 #
56 # // Contents of _GLF_uniform_int_values: [0, 2, 1, 4]
57 # layout(set = 0, binding = 0) uniform buf0
58 # {
59 #     int _GLF_uniform_int_values[4];
60 # };
61 #
62 # // Contents of _GLF_uniform_float_values:
63 # // [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 27.0]
64 # layout(set = 0, binding = 1) uniform buf1
65 # {
66 #     float _GLF_uniform_float_values[18];
67 # };
68 #
69 # const int _GLF_global_loop_bound = 10;
70 # int _GLF_global_loop_count = 0;
71 #
72 # // Contents of one: 1
73 # layout(set = 0, binding = 2) uniform buf2
74 # {
75 #     int one;
76 # };
77 #
78 # layout(location = 0) out vec4 _GLF_color;
79 #
80 # void main()
81 # {
82 #     mat4 m = mat4(_float_1_0, _float_2_0, _float_3_0, _float_4_0, _float_5_0, _float_6_0, _float_7_0, _float_8_0, _float_9_0, _float_10_0, _float_11_0, _float_12_0, _float_13_0, _float_14_0, _float_15_0, _float_16_0);
83 #     vec4 v = vec4(_float_1_0, _float_2_0, _float_3_0, _float_4_0);
84 #     float f = _float_1_0;
85 #
86 #     // Iterated once.
87 #     for(int a = _int_0; _GLF_global_loop_count < _GLF_global_loop_bound; a++)
88 #     {
89 #         _GLF_global_loop_count++;
90 #
91 #         // v becomes (2, 2, 3, 4).
92 #         v[_GLF_MAKE_IN_BOUNDS_INT(a, 4)] += _float_1_0;
93 #
94 #         // Iterated 9 times.
95 #         for(int b = _int_1; _GLF_global_loop_count < _GLF_global_loop_bound; b--)
96 #         {
97 #             _GLF_global_loop_count++;
98 #             // Iteration b = 1: f += 10. Iterations b = 0..-8: f += 2.
99 #             f += v[_GLF_MAKE_IN_BOUNDS_INT(b, 4)] * m[_GLF_MAKE_IN_BOUNDS_INT(b, 4)][a];
100 #         }
101 #
102 #         // This value is never used.
103 #         m[1][_GLF_MAKE_IN_BOUNDS_INT(a, 4)] = _float_1_0;
104 #
105 #         // Always false.
106 #         if(one == _int_0)
107 #         {
108 #             discard;
109 #         }
110 #         // Always false.
111 #         if(one == _int_2)
112 #         {
113 #             discard;
114 #         }
115 #     }
116 #
117 #     float zero = _float_0_0;
118 #     // Modify zero in case the result is not what's expected.
119 #     if(f != _float_27_0)
120 #     {
121 #         zero = _float_1_0;
122 #     }
123 #
124 #     _GLF_color = vec4(f, zero, _int_0, f);
125 # }
126 SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
127 ; SPIR-V
128 ; Version: 1.0
129 ; Generator: Khronos Glslang Reference Front End; 10
130 ; Bound: 193
131 ; Schema: 0
132                OpCapability Shader
133           %1 = OpExtInstImport "GLSL.std.450"
134                OpMemoryModel Logical GLSL450
135                OpEntryPoint Fragment %4 "main" %185
136                OpExecutionMode %4 OriginUpperLeft
137                OpSource ESSL 320
138                OpName %4 "main"
139                OpName %8 "_GLF_global_loop_count"
140                OpName %14 "m"
141                OpName %18 "buf1"
142                OpMemberName %18 0 "_GLF_uniform_float_values"
143                OpName %20 ""
144                OpName %78 "v"
145                OpName %89 "f"
146                OpName %93 "a"
147                OpName %96 "buf0"
148                OpMemberName %96 0 "_GLF_uniform_int_values"
149                OpName %98 ""
150                OpName %120 "b"
151                OpName %151 "buf2"
152                OpMemberName %151 0 "one"
153                OpName %153 ""
154                OpName %172 "zero"
155                OpName %185 "_GLF_color"
156                OpDecorate %17 ArrayStride 16
157                OpMemberDecorate %18 0 Offset 0
158                OpDecorate %18 Block
159                OpDecorate %20 DescriptorSet 0
160                OpDecorate %20 Binding 1
161                OpDecorate %95 ArrayStride 16
162                OpMemberDecorate %96 0 Offset 0
163                OpDecorate %96 Block
164                OpDecorate %98 DescriptorSet 0
165                OpDecorate %98 Binding 0
166                OpMemberDecorate %151 0 Offset 0
167                OpDecorate %151 Block
168                OpDecorate %153 DescriptorSet 0
169                OpDecorate %153 Binding 2
170                OpDecorate %185 Location 0
171           %2 = OpTypeVoid
172           %3 = OpTypeFunction %2
173           %6 = OpTypeInt 32 1
174           %7 = OpTypePointer Private %6
175           %8 = OpVariable %7 Private
176           %9 = OpConstant %6 0
177          %10 = OpTypeFloat 32
178          %11 = OpTypeVector %10 4
179          %12 = OpTypeMatrix %11 4
180          %13 = OpTypePointer Function %12
181          %15 = OpTypeInt 32 0
182          %16 = OpConstant %15 18
183          %17 = OpTypeArray %10 %16
184          %18 = OpTypeStruct %17
185          %19 = OpTypePointer Uniform %18
186          %20 = OpVariable %19 Uniform
187          %21 = OpConstant %6 1
188          %22 = OpTypePointer Uniform %10
189          %25 = OpConstant %6 2
190          %28 = OpConstant %6 3
191          %31 = OpConstant %6 4
192          %34 = OpConstant %6 5
193          %37 = OpConstant %6 6
194          %40 = OpConstant %6 7
195          %43 = OpConstant %6 8
196          %46 = OpConstant %6 9
197          %49 = OpConstant %6 10
198          %52 = OpConstant %6 11
199          %55 = OpConstant %6 12
200          %58 = OpConstant %6 13
201          %61 = OpConstant %6 14
202          %64 = OpConstant %6 15
203          %67 = OpConstant %6 16
204          %70 = OpConstant %10 1
205          %71 = OpConstant %10 0
206          %77 = OpTypePointer Function %11
207          %88 = OpTypePointer Function %10
208          %92 = OpTypePointer Function %6
209          %94 = OpConstant %15 4
210          %95 = OpTypeArray %6 %94
211          %96 = OpTypeStruct %95
212          %97 = OpTypePointer Uniform %96
213          %98 = OpVariable %97 Uniform
214          %99 = OpTypePointer Uniform %6
215         %108 = OpTypeBool
216         %151 = OpTypeStruct %6
217         %152 = OpTypePointer Uniform %151
218         %153 = OpVariable %152 Uniform
219         %176 = OpConstant %6 17
220         %184 = OpTypePointer Output %11
221         %185 = OpVariable %184 Output
222           %4 = OpFunction %2 None %3
223           %5 = OpLabel
224          %14 = OpVariable %13 Function
225          %78 = OpVariable %77 Function
226          %89 = OpVariable %88 Function
227          %93 = OpVariable %92 Function
228         %120 = OpVariable %92 Function
229         %172 = OpVariable %88 Function
230                OpStore %8 %9
231          %23 = OpAccessChain %22 %20 %9 %21
232          %24 = OpLoad %10 %23
233          %26 = OpAccessChain %22 %20 %9 %25
234          %27 = OpLoad %10 %26
235          %29 = OpAccessChain %22 %20 %9 %28
236          %30 = OpLoad %10 %29
237          %32 = OpAccessChain %22 %20 %9 %31
238          %33 = OpLoad %10 %32
239          %35 = OpAccessChain %22 %20 %9 %34
240          %36 = OpLoad %10 %35
241          %38 = OpAccessChain %22 %20 %9 %37
242          %39 = OpLoad %10 %38
243          %41 = OpAccessChain %22 %20 %9 %40
244          %42 = OpLoad %10 %41
245          %44 = OpAccessChain %22 %20 %9 %43
246          %45 = OpLoad %10 %44
247          %47 = OpAccessChain %22 %20 %9 %46
248          %48 = OpLoad %10 %47
249          %50 = OpAccessChain %22 %20 %9 %49
250          %51 = OpLoad %10 %50
251          %53 = OpAccessChain %22 %20 %9 %52
252          %54 = OpLoad %10 %53
253          %56 = OpAccessChain %22 %20 %9 %55
254          %57 = OpLoad %10 %56
255          %59 = OpAccessChain %22 %20 %9 %58
256          %60 = OpLoad %10 %59
257          %62 = OpAccessChain %22 %20 %9 %61
258          %63 = OpLoad %10 %62
259          %65 = OpAccessChain %22 %20 %9 %64
260          %66 = OpLoad %10 %65
261          %68 = OpAccessChain %22 %20 %9 %67
262          %69 = OpLoad %10 %68
263          %72 = OpCompositeConstruct %11 %24 %27 %30 %33
264          %73 = OpCompositeConstruct %11 %36 %39 %42 %45
265          %74 = OpCompositeConstruct %11 %48 %51 %54 %57
266          %75 = OpCompositeConstruct %11 %60 %63 %66 %69
267          %76 = OpCompositeConstruct %12 %72 %73 %74 %75
268                OpStore %14 %76
269          %79 = OpAccessChain %22 %20 %9 %21
270          %80 = OpLoad %10 %79
271          %81 = OpAccessChain %22 %20 %9 %25
272          %82 = OpLoad %10 %81
273          %83 = OpAccessChain %22 %20 %9 %28
274          %84 = OpLoad %10 %83
275          %85 = OpAccessChain %22 %20 %9 %31
276          %86 = OpLoad %10 %85
277          %87 = OpCompositeConstruct %11 %80 %82 %84 %86
278                OpStore %78 %87
279          %90 = OpAccessChain %22 %20 %9 %21
280          %91 = OpLoad %10 %90
281                OpStore %89 %91
282         %100 = OpAccessChain %99 %98 %9 %9
283         %101 = OpLoad %6 %100
284                OpStore %93 %101
285                OpBranch %102
286         %102 = OpLabel
287                OpLoopMerge %104 %105 None
288                OpBranch %106
289         %106 = OpLabel
290         %107 = OpLoad %6 %8
291         %109 = OpSLessThan %108 %107 %49
292                OpBranchConditional %109 %103 %104
293         %103 = OpLabel
294         %110 = OpLoad %6 %8
295         %111 = OpIAdd %6 %110 %21
296                OpStore %8 %111
297         %112 = OpLoad %6 %93
298         %113 = OpExtInst %6 %1 SClamp %112 %9 %28
299         %114 = OpAccessChain %22 %20 %9 %21
300         %115 = OpLoad %10 %114
301         %116 = OpAccessChain %88 %78 %113
302         %117 = OpLoad %10 %116
303         %118 = OpFAdd %10 %117 %115
304         %119 = OpAccessChain %88 %78 %113
305                OpStore %119 %118
306         %121 = OpAccessChain %99 %98 %9 %25
307         %122 = OpLoad %6 %121
308                OpStore %120 %122
309                OpBranch %123
310         %123 = OpLabel
311                OpLoopMerge %125 %126 None
312                OpBranch %127
313         %127 = OpLabel
314         %128 = OpLoad %6 %8
315         %129 = OpSLessThan %108 %128 %49
316                OpBranchConditional %129 %124 %125
317         %124 = OpLabel
318         %130 = OpLoad %6 %8
319         %131 = OpIAdd %6 %130 %21
320                OpStore %8 %131
321         %132 = OpLoad %6 %120
322         %133 = OpExtInst %6 %1 SClamp %132 %9 %28
323         %134 = OpAccessChain %88 %78 %133
324         %135 = OpLoad %10 %134
325         %136 = OpLoad %6 %120
326         %137 = OpExtInst %6 %1 SClamp %136 %9 %28
327         %138 = OpLoad %6 %93
328         %139 = OpAccessChain %88 %14 %137 %138
329         %140 = OpLoad %10 %139
330         %141 = OpFMul %10 %135 %140
331         %142 = OpLoad %10 %89
332         %143 = OpFAdd %10 %142 %141
333                OpStore %89 %143
334                OpBranch %126
335         %126 = OpLabel
336         %144 = OpLoad %6 %120
337         %145 = OpISub %6 %144 %21
338                OpStore %120 %145
339                OpBranch %123
340         %125 = OpLabel
341         %146 = OpLoad %6 %93
342         %147 = OpExtInst %6 %1 SClamp %146 %9 %28
343         %148 = OpAccessChain %22 %20 %9 %21
344         %149 = OpLoad %10 %148
345         %150 = OpAccessChain %88 %14 %21 %147
346                OpStore %150 %149
347         %154 = OpAccessChain %99 %153 %9
348         %155 = OpLoad %6 %154
349         %156 = OpAccessChain %99 %98 %9 %9
350         %157 = OpLoad %6 %156
351         %158 = OpIEqual %108 %155 %157
352                OpSelectionMerge %160 None
353                OpBranchConditional %158 %159 %160
354         %159 = OpLabel
355                OpKill
356         %160 = OpLabel
357         %162 = OpAccessChain %99 %153 %9
358         %163 = OpLoad %6 %162
359         %164 = OpAccessChain %99 %98 %9 %21
360         %165 = OpLoad %6 %164
361         %166 = OpIEqual %108 %163 %165
362                OpSelectionMerge %168 None
363                OpBranchConditional %166 %167 %168
364         %167 = OpLabel
365                OpKill
366         %168 = OpLabel
367                OpBranch %105
368         %105 = OpLabel
369         %170 = OpLoad %6 %93
370         %171 = OpIAdd %6 %170 %21
371                OpStore %93 %171
372                OpBranch %102
373         %104 = OpLabel
374         %173 = OpAccessChain %22 %20 %9 %9
375         %174 = OpLoad %10 %173
376                OpStore %172 %174
377         %175 = OpLoad %10 %89
378         %177 = OpAccessChain %22 %20 %9 %176
379         %178 = OpLoad %10 %177
380         %179 = OpFUnordNotEqual %108 %175 %178
381                OpSelectionMerge %181 None
382                OpBranchConditional %179 %180 %181
383         %180 = OpLabel
384         %182 = OpAccessChain %22 %20 %9 %21
385         %183 = OpLoad %10 %182
386                OpStore %172 %183
387                OpBranch %181
388         %181 = OpLabel
389         %186 = OpLoad %10 %89
390         %187 = OpLoad %10 %172
391         %188 = OpAccessChain %99 %98 %9 %9
392         %189 = OpLoad %6 %188
393         %190 = OpConvertSToF %10 %189
394         %191 = OpLoad %10 %89
395         %192 = OpCompositeConstruct %11 %186 %187 %190 %191
396                OpStore %185 %192
397                OpReturn
398                OpFunctionEnd
399 END
400
401 # uniforms for variant
402
403 # one
404 BUFFER variant_one DATA_TYPE int32 STD140 DATA
405  1
406 END
407 # _GLF_uniform_float_values
408 BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
409  0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 13.0 14.0 15.0 16.0 27.0
410 END
411 # _GLF_uniform_int_values
412 BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
413  0 2 1 4
414 END
415
416 BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
417
418 PIPELINE graphics variant_pipeline
419   ATTACH variant_vertex_shader
420   ATTACH variant_fragment_shader
421   FRAMEBUFFER_SIZE 256 256
422   BIND BUFFER variant_framebuffer AS color LOCATION 0
423   BIND BUFFER variant_one AS uniform DESCRIPTOR_SET 0 BINDING 2
424   BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1
425   BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
426 END
427 CLEAR_COLOR variant_pipeline 0 0 0 255
428
429 CLEAR variant_pipeline
430 RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
431
432 EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255