Fix missing dependency on sparse binds
[platform/upstream/VK-GL-CTS.git] / external / vulkancts / data / vulkan / amber / graphicsfuzz / spv-stable-quicksort-dontinline.amber
1 #!amber
2
3 # Copyright 2020 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 bug found by the GraphicsFuzz project.
19
20 # Short description: Equivalent shaders, one with DontInline attribute
21
22 # The test passes because both shaders render the same image.
23
24 SHADER vertex reference_vertex_shader PASSTHROUGH
25
26 SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
27 ; SPIR-V
28 ; Version: 1.0
29 ; Generator: Khronos Glslang Reference Front End; 7
30 ; Bound: 331
31 ; Schema: 0
32                OpCapability Shader
33           %1 = OpExtInstImport "GLSL.std.450"
34                OpMemoryModel Logical GLSL450
35                OpEntryPoint Fragment %4 "main" %183 %324
36                OpExecutionMode %4 OriginUpperLeft
37                OpSource ESSL 320
38                OpName %4 "main"
39                OpName %11 "swap(i1;i1;"
40                OpName %9 "i"
41                OpName %10 "j"
42                OpName %16 "performPartition(i1;i1;"
43                OpName %14 "l"
44                OpName %15 "h"
45                OpName %18 "quicksort("
46                OpName %20 "temp"
47                OpName %24 "QuicksortObject"
48                OpMemberName %24 0 "numbers"
49                OpName %26 "obj"
50                OpName %40 "pivot"
51                OpName %44 "i"
52                OpName %48 "j"
53                OpName %69 "param"
54                OpName %71 "param"
55                OpName %78 "param"
56                OpName %80 "param"
57                OpName %86 "l"
58                OpName %87 "h"
59                OpName %89 "top"
60                OpName %92 "stack"
61                OpName %116 "p"
62                OpName %117 "param"
63                OpName %119 "param"
64                OpName %152 "i"
65                OpName %180 "uv"
66                OpName %183 "gl_FragCoord"
67                OpName %186 "buf0"
68                OpMemberName %186 0 "resolution"
69                OpName %188 ""
70                OpName %195 "color"
71                OpName %324 "_GLF_color"
72                OpDecorate %183 BuiltIn FragCoord
73                OpMemberDecorate %186 0 Offset 0
74                OpDecorate %186 Block
75                OpDecorate %188 DescriptorSet 0
76                OpDecorate %188 Binding 0
77                OpDecorate %324 Location 0
78           %2 = OpTypeVoid
79           %3 = OpTypeFunction %2
80           %6 = OpTypeInt 32 1
81           %7 = OpTypePointer Function %6
82           %8 = OpTypeFunction %2 %7 %7
83          %13 = OpTypeFunction %6 %7 %7
84          %21 = OpTypeInt 32 0
85          %22 = OpConstant %21 10
86          %23 = OpTypeArray %6 %22
87          %24 = OpTypeStruct %23
88          %25 = OpTypePointer Private %24
89          %26 = OpVariable %25 Private
90          %27 = OpConstant %6 0
91          %29 = OpTypePointer Private %6
92          %46 = OpConstant %6 1
93          %58 = OpTypeBool
94          %88 = OpConstant %6 9
95          %90 = OpConstant %6 -1
96          %91 = OpTypePointer Function %23
97         %159 = OpConstant %6 10
98         %177 = OpTypeFloat 32
99         %178 = OpTypeVector %177 2
100         %179 = OpTypePointer Function %178
101         %181 = OpTypeVector %177 4
102         %182 = OpTypePointer Input %181
103         %183 = OpVariable %182 Input
104         %186 = OpTypeStruct %178
105         %187 = OpTypePointer Uniform %186
106         %188 = OpVariable %187 Uniform
107         %189 = OpTypePointer Uniform %178
108         %193 = OpTypeVector %177 3
109         %194 = OpTypePointer Function %193
110         %196 = OpConstant %177 1
111         %197 = OpConstant %177 2
112         %198 = OpConstant %177 3
113         %199 = OpConstantComposite %193 %196 %197 %198
114         %203 = OpConstant %21 0
115         %204 = OpTypePointer Function %177
116         %211 = OpConstant %177 0.25
117         %224 = OpConstant %177 0.5
118         %228 = OpConstant %6 2
119         %232 = OpConstant %21 1
120         %239 = OpConstant %177 0.75
121         %243 = OpConstant %6 3
122         %247 = OpConstant %21 2
123         %252 = OpConstant %6 4
124         %265 = OpConstant %6 5
125         %278 = OpConstant %6 6
126         %291 = OpConstant %6 7
127         %299 = OpConstant %6 8
128         %323 = OpTypePointer Output %181
129         %324 = OpVariable %323 Output
130           %4 = OpFunction %2 None %3
131           %5 = OpLabel
132         %152 = OpVariable %7 Function
133         %180 = OpVariable %179 Function
134         %195 = OpVariable %194 Function
135                OpStore %152 %27
136                OpBranch %153
137         %153 = OpLabel
138                OpLoopMerge %155 %156 None
139                OpBranch %157
140         %157 = OpLabel
141         %158 = OpLoad %6 %152
142         %160 = OpSLessThan %58 %158 %159
143                OpBranchConditional %160 %154 %155
144         %154 = OpLabel
145         %161 = OpLoad %6 %152
146         %162 = OpLoad %6 %152
147         %163 = OpISub %6 %159 %162
148         %164 = OpAccessChain %29 %26 %27 %161
149                OpStore %164 %163
150         %165 = OpLoad %6 %152
151         %166 = OpLoad %6 %152
152         %167 = OpAccessChain %29 %26 %27 %166
153         %168 = OpLoad %6 %167
154         %169 = OpLoad %6 %152
155         %170 = OpAccessChain %29 %26 %27 %169
156         %171 = OpLoad %6 %170
157         %172 = OpIMul %6 %168 %171
158         %173 = OpAccessChain %29 %26 %27 %165
159                OpStore %173 %172
160                OpBranch %156
161         %156 = OpLabel
162         %174 = OpLoad %6 %152
163         %175 = OpIAdd %6 %174 %46
164                OpStore %152 %175
165                OpBranch %153
166         %155 = OpLabel
167         %176 = OpFunctionCall %2 %18
168         %184 = OpLoad %181 %183
169         %185 = OpVectorShuffle %178 %184 %184 0 1
170         %190 = OpAccessChain %189 %188 %27
171         %191 = OpLoad %178 %190
172         %192 = OpFDiv %178 %185 %191
173                OpStore %180 %192
174                OpStore %195 %199
175         %200 = OpAccessChain %29 %26 %27 %27
176         %201 = OpLoad %6 %200
177         %202 = OpConvertSToF %177 %201
178         %205 = OpAccessChain %204 %195 %203
179         %206 = OpLoad %177 %205
180         %207 = OpFAdd %177 %206 %202
181         %208 = OpAccessChain %204 %195 %203
182                OpStore %208 %207
183         %209 = OpAccessChain %204 %180 %203
184         %210 = OpLoad %177 %209
185         %212 = OpFOrdGreaterThan %58 %210 %211
186                OpSelectionMerge %214 None
187                OpBranchConditional %212 %213 %214
188         %213 = OpLabel
189         %215 = OpAccessChain %29 %26 %27 %46
190         %216 = OpLoad %6 %215
191         %217 = OpConvertSToF %177 %216
192         %218 = OpAccessChain %204 %195 %203
193         %219 = OpLoad %177 %218
194         %220 = OpFAdd %177 %219 %217
195         %221 = OpAccessChain %204 %195 %203
196                OpStore %221 %220
197                OpBranch %214
198         %214 = OpLabel
199         %222 = OpAccessChain %204 %180 %203
200         %223 = OpLoad %177 %222
201         %225 = OpFOrdGreaterThan %58 %223 %224
202                OpSelectionMerge %227 None
203                OpBranchConditional %225 %226 %227
204         %226 = OpLabel
205         %229 = OpAccessChain %29 %26 %27 %228
206         %230 = OpLoad %6 %229
207         %231 = OpConvertSToF %177 %230
208         %233 = OpAccessChain %204 %195 %232
209         %234 = OpLoad %177 %233
210         %235 = OpFAdd %177 %234 %231
211         %236 = OpAccessChain %204 %195 %232
212                OpStore %236 %235
213                OpBranch %227
214         %227 = OpLabel
215         %237 = OpAccessChain %204 %180 %203
216         %238 = OpLoad %177 %237
217         %240 = OpFOrdGreaterThan %58 %238 %239
218                OpSelectionMerge %242 None
219                OpBranchConditional %240 %241 %242
220         %241 = OpLabel
221         %244 = OpAccessChain %29 %26 %27 %243
222         %245 = OpLoad %6 %244
223         %246 = OpConvertSToF %177 %245
224         %248 = OpAccessChain %204 %195 %247
225         %249 = OpLoad %177 %248
226         %250 = OpFAdd %177 %249 %246
227         %251 = OpAccessChain %204 %195 %247
228                OpStore %251 %250
229                OpBranch %242
230         %242 = OpLabel
231         %253 = OpAccessChain %29 %26 %27 %252
232         %254 = OpLoad %6 %253
233         %255 = OpConvertSToF %177 %254
234         %256 = OpAccessChain %204 %195 %232
235         %257 = OpLoad %177 %256
236         %258 = OpFAdd %177 %257 %255
237         %259 = OpAccessChain %204 %195 %232
238                OpStore %259 %258
239         %260 = OpAccessChain %204 %180 %232
240         %261 = OpLoad %177 %260
241         %262 = OpFOrdGreaterThan %58 %261 %211
242                OpSelectionMerge %264 None
243                OpBranchConditional %262 %263 %264
244         %263 = OpLabel
245         %266 = OpAccessChain %29 %26 %27 %265
246         %267 = OpLoad %6 %266
247         %268 = OpConvertSToF %177 %267
248         %269 = OpAccessChain %204 %195 %203
249         %270 = OpLoad %177 %269
250         %271 = OpFAdd %177 %270 %268
251         %272 = OpAccessChain %204 %195 %203
252                OpStore %272 %271
253                OpBranch %264
254         %264 = OpLabel
255         %273 = OpAccessChain %204 %180 %232
256         %274 = OpLoad %177 %273
257         %275 = OpFOrdGreaterThan %58 %274 %224
258                OpSelectionMerge %277 None
259                OpBranchConditional %275 %276 %277
260         %276 = OpLabel
261         %279 = OpAccessChain %29 %26 %27 %278
262         %280 = OpLoad %6 %279
263         %281 = OpConvertSToF %177 %280
264         %282 = OpAccessChain %204 %195 %232
265         %283 = OpLoad %177 %282
266         %284 = OpFAdd %177 %283 %281
267         %285 = OpAccessChain %204 %195 %232
268                OpStore %285 %284
269                OpBranch %277
270         %277 = OpLabel
271         %286 = OpAccessChain %204 %180 %232
272         %287 = OpLoad %177 %286
273         %288 = OpFOrdGreaterThan %58 %287 %239
274                OpSelectionMerge %290 None
275                OpBranchConditional %288 %289 %290
276         %289 = OpLabel
277         %292 = OpAccessChain %29 %26 %27 %291
278         %293 = OpLoad %6 %292
279         %294 = OpConvertSToF %177 %293
280         %295 = OpAccessChain %204 %195 %247
281         %296 = OpLoad %177 %295
282         %297 = OpFAdd %177 %296 %294
283         %298 = OpAccessChain %204 %195 %247
284                OpStore %298 %297
285                OpBranch %290
286         %290 = OpLabel
287         %300 = OpAccessChain %29 %26 %27 %299
288         %301 = OpLoad %6 %300
289         %302 = OpConvertSToF %177 %301
290         %303 = OpAccessChain %204 %195 %247
291         %304 = OpLoad %177 %303
292         %305 = OpFAdd %177 %304 %302
293         %306 = OpAccessChain %204 %195 %247
294                OpStore %306 %305
295         %307 = OpAccessChain %204 %180 %203
296         %308 = OpLoad %177 %307
297         %309 = OpAccessChain %204 %180 %232
298         %310 = OpLoad %177 %309
299         %311 = OpFSub %177 %308 %310
300         %312 = OpExtInst %177 %1 FAbs %311
301         %313 = OpFOrdLessThan %58 %312 %211
302                OpSelectionMerge %315 None
303                OpBranchConditional %313 %314 %315
304         %314 = OpLabel
305         %316 = OpAccessChain %29 %26 %27 %88
306         %317 = OpLoad %6 %316
307         %318 = OpConvertSToF %177 %317
308         %319 = OpAccessChain %204 %195 %203
309         %320 = OpLoad %177 %319
310         %321 = OpFAdd %177 %320 %318
311         %322 = OpAccessChain %204 %195 %203
312                OpStore %322 %321
313                OpBranch %315
314         %315 = OpLabel
315         %325 = OpLoad %193 %195
316         %326 = OpExtInst %193 %1 Normalize %325
317         %327 = OpCompositeExtract %177 %326 0
318         %328 = OpCompositeExtract %177 %326 1
319         %329 = OpCompositeExtract %177 %326 2
320         %330 = OpCompositeConstruct %181 %327 %328 %329 %196
321                OpStore %324 %330
322                OpReturn
323                OpFunctionEnd
324          %11 = OpFunction %2 None %8
325           %9 = OpFunctionParameter %7
326          %10 = OpFunctionParameter %7
327          %12 = OpLabel
328          %20 = OpVariable %7 Function
329          %28 = OpLoad %6 %9
330          %30 = OpAccessChain %29 %26 %27 %28
331          %31 = OpLoad %6 %30
332                OpStore %20 %31
333          %32 = OpLoad %6 %9
334          %33 = OpLoad %6 %10
335          %34 = OpAccessChain %29 %26 %27 %33
336          %35 = OpLoad %6 %34
337          %36 = OpAccessChain %29 %26 %27 %32
338                OpStore %36 %35
339          %37 = OpLoad %6 %10
340          %38 = OpLoad %6 %20
341          %39 = OpAccessChain %29 %26 %27 %37
342                OpStore %39 %38
343                OpReturn
344                OpFunctionEnd
345          %16 = OpFunction %6 None %13
346          %14 = OpFunctionParameter %7
347          %15 = OpFunctionParameter %7
348          %17 = OpLabel
349          %40 = OpVariable %7 Function
350          %44 = OpVariable %7 Function
351          %48 = OpVariable %7 Function
352          %69 = OpVariable %7 Function
353          %71 = OpVariable %7 Function
354          %78 = OpVariable %7 Function
355          %80 = OpVariable %7 Function
356          %41 = OpLoad %6 %15
357          %42 = OpAccessChain %29 %26 %27 %41
358          %43 = OpLoad %6 %42
359                OpStore %40 %43
360          %45 = OpLoad %6 %14
361          %47 = OpISub %6 %45 %46
362                OpStore %44 %47
363          %49 = OpLoad %6 %14
364                OpStore %48 %49
365                OpBranch %50
366          %50 = OpLabel
367                OpLoopMerge %52 %53 None
368                OpBranch %54
369          %54 = OpLabel
370          %55 = OpLoad %6 %48
371          %56 = OpLoad %6 %15
372          %57 = OpISub %6 %56 %46
373          %59 = OpSLessThanEqual %58 %55 %57
374                OpBranchConditional %59 %51 %52
375          %51 = OpLabel
376          %60 = OpLoad %6 %48
377          %61 = OpAccessChain %29 %26 %27 %60
378          %62 = OpLoad %6 %61
379          %63 = OpLoad %6 %40
380          %64 = OpSLessThanEqual %58 %62 %63
381                OpSelectionMerge %66 None
382                OpBranchConditional %64 %65 %66
383          %65 = OpLabel
384          %67 = OpLoad %6 %44
385          %68 = OpIAdd %6 %67 %46
386                OpStore %44 %68
387          %70 = OpLoad %6 %44
388                OpStore %69 %70
389          %72 = OpLoad %6 %48
390                OpStore %71 %72
391          %73 = OpFunctionCall %2 %11 %69 %71
392                OpBranch %66
393          %66 = OpLabel
394                OpBranch %53
395          %53 = OpLabel
396          %74 = OpLoad %6 %48
397          %75 = OpIAdd %6 %74 %46
398                OpStore %48 %75
399                OpBranch %50
400          %52 = OpLabel
401          %76 = OpLoad %6 %44
402          %77 = OpIAdd %6 %76 %46
403                OpStore %44 %77
404          %79 = OpLoad %6 %44
405                OpStore %78 %79
406          %81 = OpLoad %6 %15
407                OpStore %80 %81
408          %82 = OpFunctionCall %2 %11 %78 %80
409          %83 = OpLoad %6 %44
410                OpReturnValue %83
411                OpFunctionEnd
412          %18 = OpFunction %2 None %3
413          %19 = OpLabel
414          %86 = OpVariable %7 Function
415          %87 = OpVariable %7 Function
416          %89 = OpVariable %7 Function
417          %92 = OpVariable %91 Function
418         %116 = OpVariable %7 Function
419         %117 = OpVariable %7 Function
420         %119 = OpVariable %7 Function
421                OpStore %86 %27
422                OpStore %87 %88
423                OpStore %89 %90
424          %93 = OpLoad %6 %89
425          %94 = OpIAdd %6 %93 %46
426                OpStore %89 %94
427          %95 = OpLoad %6 %86
428          %96 = OpAccessChain %7 %92 %94
429                OpStore %96 %95
430          %97 = OpLoad %6 %89
431          %98 = OpIAdd %6 %97 %46
432                OpStore %89 %98
433          %99 = OpLoad %6 %87
434         %100 = OpAccessChain %7 %92 %98
435                OpStore %100 %99
436                OpBranch %101
437         %101 = OpLabel
438                OpLoopMerge %103 %104 None
439                OpBranch %105
440         %105 = OpLabel
441         %106 = OpLoad %6 %89
442         %107 = OpSGreaterThanEqual %58 %106 %27
443                OpBranchConditional %107 %102 %103
444         %102 = OpLabel
445         %108 = OpLoad %6 %89
446         %109 = OpISub %6 %108 %46
447                OpStore %89 %109
448         %110 = OpAccessChain %7 %92 %108
449         %111 = OpLoad %6 %110
450                OpStore %87 %111
451         %112 = OpLoad %6 %89
452         %113 = OpISub %6 %112 %46
453                OpStore %89 %113
454         %114 = OpAccessChain %7 %92 %112
455         %115 = OpLoad %6 %114
456                OpStore %86 %115
457         %118 = OpLoad %6 %86
458                OpStore %117 %118
459         %120 = OpLoad %6 %87
460                OpStore %119 %120
461         %121 = OpFunctionCall %6 %16 %117 %119
462                OpStore %116 %121
463         %122 = OpLoad %6 %116
464         %123 = OpISub %6 %122 %46
465         %124 = OpLoad %6 %86
466         %125 = OpSGreaterThan %58 %123 %124
467                OpSelectionMerge %127 None
468                OpBranchConditional %125 %126 %127
469         %126 = OpLabel
470         %128 = OpLoad %6 %89
471         %129 = OpIAdd %6 %128 %46
472                OpStore %89 %129
473         %130 = OpLoad %6 %86
474         %131 = OpAccessChain %7 %92 %129
475                OpStore %131 %130
476         %132 = OpLoad %6 %89
477         %133 = OpIAdd %6 %132 %46
478                OpStore %89 %133
479         %134 = OpLoad %6 %116
480         %135 = OpISub %6 %134 %46
481         %136 = OpAccessChain %7 %92 %133
482                OpStore %136 %135
483                OpBranch %127
484         %127 = OpLabel
485         %137 = OpLoad %6 %116
486         %138 = OpIAdd %6 %137 %46
487         %139 = OpLoad %6 %87
488         %140 = OpSLessThan %58 %138 %139
489                OpSelectionMerge %142 None
490                OpBranchConditional %140 %141 %142
491         %141 = OpLabel
492         %143 = OpLoad %6 %89
493         %144 = OpIAdd %6 %143 %46
494                OpStore %89 %144
495         %145 = OpLoad %6 %116
496         %146 = OpIAdd %6 %145 %46
497         %147 = OpAccessChain %7 %92 %144
498                OpStore %147 %146
499         %148 = OpLoad %6 %89
500         %149 = OpIAdd %6 %148 %46
501                OpStore %89 %149
502         %150 = OpLoad %6 %87
503         %151 = OpAccessChain %7 %92 %149
504                OpStore %151 %150
505                OpBranch %142
506         %142 = OpLabel
507                OpBranch %104
508         %104 = OpLabel
509                OpBranch %101
510         %103 = OpLabel
511                OpReturn
512                OpFunctionEnd
513 END
514
515 # uniforms for reference
516
517 # resolution
518 BUFFER reference_resolution DATA_TYPE vec2<float> STD140 DATA
519  256.0 256.0
520 END
521
522 BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
523
524 PIPELINE graphics reference_pipeline
525   ATTACH reference_vertex_shader
526   ATTACH reference_fragment_shader
527   FRAMEBUFFER_SIZE 256 256
528   BIND BUFFER reference_framebuffer AS color LOCATION 0
529   BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
530 END
531 CLEAR_COLOR reference_pipeline 0 0 0 255
532
533 CLEAR reference_pipeline
534 RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
535
536
537 SHADER vertex variant_vertex_shader PASSTHROUGH
538
539 SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
540 ; SPIR-V
541 ; Version: 1.0
542 ; Generator: Khronos Glslang Reference Front End; 7
543 ; Bound: 331
544 ; Schema: 0
545                OpCapability Shader
546           %1 = OpExtInstImport "GLSL.std.450"
547                OpMemoryModel Logical GLSL450
548                OpEntryPoint Fragment %4 "main" %183 %324
549                OpExecutionMode %4 OriginUpperLeft
550                OpSource ESSL 320
551                OpName %4 "main"
552                OpName %11 "swap(i1;i1;"
553                OpName %9 "i"
554                OpName %10 "j"
555                OpName %16 "performPartition(i1;i1;"
556                OpName %14 "l"
557                OpName %15 "h"
558                OpName %18 "quicksort("
559                OpName %20 "temp"
560                OpName %24 "QuicksortObject"
561                OpMemberName %24 0 "numbers"
562                OpName %26 "obj"
563                OpName %40 "pivot"
564                OpName %44 "i"
565                OpName %48 "j"
566                OpName %69 "param"
567                OpName %71 "param"
568                OpName %78 "param"
569                OpName %80 "param"
570                OpName %86 "l"
571                OpName %87 "h"
572                OpName %89 "top"
573                OpName %92 "stack"
574                OpName %116 "p"
575                OpName %117 "param"
576                OpName %119 "param"
577                OpName %152 "i"
578                OpName %180 "uv"
579                OpName %183 "gl_FragCoord"
580                OpName %186 "buf0"
581                OpMemberName %186 0 "resolution"
582                OpName %188 ""
583                OpName %195 "color"
584                OpName %324 "_GLF_color"
585                OpDecorate %183 BuiltIn FragCoord
586                OpMemberDecorate %186 0 Offset 0
587                OpDecorate %186 Block
588                OpDecorate %188 DescriptorSet 0
589                OpDecorate %188 Binding 0
590                OpDecorate %324 Location 0
591           %2 = OpTypeVoid
592           %3 = OpTypeFunction %2
593           %6 = OpTypeInt 32 1
594           %7 = OpTypePointer Function %6
595           %8 = OpTypeFunction %2 %7 %7
596          %13 = OpTypeFunction %6 %7 %7
597          %21 = OpTypeInt 32 0
598          %22 = OpConstant %21 10
599          %23 = OpTypeArray %6 %22
600          %24 = OpTypeStruct %23
601          %25 = OpTypePointer Private %24
602          %26 = OpVariable %25 Private
603          %27 = OpConstant %6 0
604          %29 = OpTypePointer Private %6
605          %46 = OpConstant %6 1
606          %58 = OpTypeBool
607          %88 = OpConstant %6 9
608          %90 = OpConstant %6 -1
609          %91 = OpTypePointer Function %23
610         %159 = OpConstant %6 10
611         %177 = OpTypeFloat 32
612         %178 = OpTypeVector %177 2
613         %179 = OpTypePointer Function %178
614         %181 = OpTypeVector %177 4
615         %182 = OpTypePointer Input %181
616         %183 = OpVariable %182 Input
617         %186 = OpTypeStruct %178
618         %187 = OpTypePointer Uniform %186
619         %188 = OpVariable %187 Uniform
620         %189 = OpTypePointer Uniform %178
621         %193 = OpTypeVector %177 3
622         %194 = OpTypePointer Function %193
623         %196 = OpConstant %177 1
624         %197 = OpConstant %177 2
625         %198 = OpConstant %177 3
626         %199 = OpConstantComposite %193 %196 %197 %198
627         %203 = OpConstant %21 0
628         %204 = OpTypePointer Function %177
629         %211 = OpConstant %177 0.25
630         %224 = OpConstant %177 0.5
631         %228 = OpConstant %6 2
632         %232 = OpConstant %21 1
633         %239 = OpConstant %177 0.75
634         %243 = OpConstant %6 3
635         %247 = OpConstant %21 2
636         %252 = OpConstant %6 4
637         %265 = OpConstant %6 5
638         %278 = OpConstant %6 6
639         %291 = OpConstant %6 7
640         %299 = OpConstant %6 8
641         %323 = OpTypePointer Output %181
642         %324 = OpVariable %323 Output
643           %4 = OpFunction %2 None %3
644           %5 = OpLabel
645         %152 = OpVariable %7 Function
646         %180 = OpVariable %179 Function
647         %195 = OpVariable %194 Function
648                OpStore %152 %27
649                OpBranch %153
650         %153 = OpLabel
651                OpLoopMerge %155 %156 None
652                OpBranch %157
653         %157 = OpLabel
654         %158 = OpLoad %6 %152
655         %160 = OpSLessThan %58 %158 %159
656                OpBranchConditional %160 %154 %155
657         %154 = OpLabel
658         %161 = OpLoad %6 %152
659         %162 = OpLoad %6 %152
660         %163 = OpISub %6 %159 %162
661         %164 = OpAccessChain %29 %26 %27 %161
662                OpStore %164 %163
663         %165 = OpLoad %6 %152
664         %166 = OpLoad %6 %152
665         %167 = OpAccessChain %29 %26 %27 %166
666         %168 = OpLoad %6 %167
667         %169 = OpLoad %6 %152
668         %170 = OpAccessChain %29 %26 %27 %169
669         %171 = OpLoad %6 %170
670         %172 = OpIMul %6 %168 %171
671         %173 = OpAccessChain %29 %26 %27 %165
672                OpStore %173 %172
673                OpBranch %156
674         %156 = OpLabel
675         %174 = OpLoad %6 %152
676         %175 = OpIAdd %6 %174 %46
677                OpStore %152 %175
678                OpBranch %153
679         %155 = OpLabel
680         %176 = OpFunctionCall %2 %18
681         %184 = OpLoad %181 %183
682         %185 = OpVectorShuffle %178 %184 %184 0 1
683         %190 = OpAccessChain %189 %188 %27
684         %191 = OpLoad %178 %190
685         %192 = OpFDiv %178 %185 %191
686                OpStore %180 %192
687                OpStore %195 %199
688         %200 = OpAccessChain %29 %26 %27 %27
689         %201 = OpLoad %6 %200
690         %202 = OpConvertSToF %177 %201
691         %205 = OpAccessChain %204 %195 %203
692         %206 = OpLoad %177 %205
693         %207 = OpFAdd %177 %206 %202
694         %208 = OpAccessChain %204 %195 %203
695                OpStore %208 %207
696         %209 = OpAccessChain %204 %180 %203
697         %210 = OpLoad %177 %209
698         %212 = OpFOrdGreaterThan %58 %210 %211
699                OpSelectionMerge %214 None
700                OpBranchConditional %212 %213 %214
701         %213 = OpLabel
702         %215 = OpAccessChain %29 %26 %27 %46
703         %216 = OpLoad %6 %215
704         %217 = OpConvertSToF %177 %216
705         %218 = OpAccessChain %204 %195 %203
706         %219 = OpLoad %177 %218
707         %220 = OpFAdd %177 %219 %217
708         %221 = OpAccessChain %204 %195 %203
709                OpStore %221 %220
710                OpBranch %214
711         %214 = OpLabel
712         %222 = OpAccessChain %204 %180 %203
713         %223 = OpLoad %177 %222
714         %225 = OpFOrdGreaterThan %58 %223 %224
715                OpSelectionMerge %227 None
716                OpBranchConditional %225 %226 %227
717         %226 = OpLabel
718         %229 = OpAccessChain %29 %26 %27 %228
719         %230 = OpLoad %6 %229
720         %231 = OpConvertSToF %177 %230
721         %233 = OpAccessChain %204 %195 %232
722         %234 = OpLoad %177 %233
723         %235 = OpFAdd %177 %234 %231
724         %236 = OpAccessChain %204 %195 %232
725                OpStore %236 %235
726                OpBranch %227
727         %227 = OpLabel
728         %237 = OpAccessChain %204 %180 %203
729         %238 = OpLoad %177 %237
730         %240 = OpFOrdGreaterThan %58 %238 %239
731                OpSelectionMerge %242 None
732                OpBranchConditional %240 %241 %242
733         %241 = OpLabel
734         %244 = OpAccessChain %29 %26 %27 %243
735         %245 = OpLoad %6 %244
736         %246 = OpConvertSToF %177 %245
737         %248 = OpAccessChain %204 %195 %247
738         %249 = OpLoad %177 %248
739         %250 = OpFAdd %177 %249 %246
740         %251 = OpAccessChain %204 %195 %247
741                OpStore %251 %250
742                OpBranch %242
743         %242 = OpLabel
744         %253 = OpAccessChain %29 %26 %27 %252
745         %254 = OpLoad %6 %253
746         %255 = OpConvertSToF %177 %254
747         %256 = OpAccessChain %204 %195 %232
748         %257 = OpLoad %177 %256
749         %258 = OpFAdd %177 %257 %255
750         %259 = OpAccessChain %204 %195 %232
751                OpStore %259 %258
752         %260 = OpAccessChain %204 %180 %232
753         %261 = OpLoad %177 %260
754         %262 = OpFOrdGreaterThan %58 %261 %211
755                OpSelectionMerge %264 None
756                OpBranchConditional %262 %263 %264
757         %263 = OpLabel
758         %266 = OpAccessChain %29 %26 %27 %265
759         %267 = OpLoad %6 %266
760         %268 = OpConvertSToF %177 %267
761         %269 = OpAccessChain %204 %195 %203
762         %270 = OpLoad %177 %269
763         %271 = OpFAdd %177 %270 %268
764         %272 = OpAccessChain %204 %195 %203
765                OpStore %272 %271
766                OpBranch %264
767         %264 = OpLabel
768         %273 = OpAccessChain %204 %180 %232
769         %274 = OpLoad %177 %273
770         %275 = OpFOrdGreaterThan %58 %274 %224
771                OpSelectionMerge %277 None
772                OpBranchConditional %275 %276 %277
773         %276 = OpLabel
774         %279 = OpAccessChain %29 %26 %27 %278
775         %280 = OpLoad %6 %279
776         %281 = OpConvertSToF %177 %280
777         %282 = OpAccessChain %204 %195 %232
778         %283 = OpLoad %177 %282
779         %284 = OpFAdd %177 %283 %281
780         %285 = OpAccessChain %204 %195 %232
781                OpStore %285 %284
782                OpBranch %277
783         %277 = OpLabel
784         %286 = OpAccessChain %204 %180 %232
785         %287 = OpLoad %177 %286
786         %288 = OpFOrdGreaterThan %58 %287 %239
787                OpSelectionMerge %290 None
788                OpBranchConditional %288 %289 %290
789         %289 = OpLabel
790         %292 = OpAccessChain %29 %26 %27 %291
791         %293 = OpLoad %6 %292
792         %294 = OpConvertSToF %177 %293
793         %295 = OpAccessChain %204 %195 %247
794         %296 = OpLoad %177 %295
795         %297 = OpFAdd %177 %296 %294
796         %298 = OpAccessChain %204 %195 %247
797                OpStore %298 %297
798                OpBranch %290
799         %290 = OpLabel
800         %300 = OpAccessChain %29 %26 %27 %299
801         %301 = OpLoad %6 %300
802         %302 = OpConvertSToF %177 %301
803         %303 = OpAccessChain %204 %195 %247
804         %304 = OpLoad %177 %303
805         %305 = OpFAdd %177 %304 %302
806         %306 = OpAccessChain %204 %195 %247
807                OpStore %306 %305
808         %307 = OpAccessChain %204 %180 %203
809         %308 = OpLoad %177 %307
810         %309 = OpAccessChain %204 %180 %232
811         %310 = OpLoad %177 %309
812         %311 = OpFSub %177 %308 %310
813         %312 = OpExtInst %177 %1 FAbs %311
814         %313 = OpFOrdLessThan %58 %312 %211
815                OpSelectionMerge %315 None
816                OpBranchConditional %313 %314 %315
817         %314 = OpLabel
818         %316 = OpAccessChain %29 %26 %27 %88
819         %317 = OpLoad %6 %316
820         %318 = OpConvertSToF %177 %317
821         %319 = OpAccessChain %204 %195 %203
822         %320 = OpLoad %177 %319
823         %321 = OpFAdd %177 %320 %318
824         %322 = OpAccessChain %204 %195 %203
825                OpStore %322 %321
826                OpBranch %315
827         %315 = OpLabel
828         %325 = OpLoad %193 %195
829         %326 = OpExtInst %193 %1 Normalize %325
830         %327 = OpCompositeExtract %177 %326 0
831         %328 = OpCompositeExtract %177 %326 1
832         %329 = OpCompositeExtract %177 %326 2
833         %330 = OpCompositeConstruct %181 %327 %328 %329 %196
834                OpStore %324 %330
835                OpReturn
836                OpFunctionEnd
837          %11 = OpFunction %2 None %8
838           %9 = OpFunctionParameter %7
839          %10 = OpFunctionParameter %7
840          %12 = OpLabel
841          %20 = OpVariable %7 Function
842          %28 = OpLoad %6 %9
843          %30 = OpAccessChain %29 %26 %27 %28
844          %31 = OpLoad %6 %30
845                OpStore %20 %31
846          %32 = OpLoad %6 %9
847          %33 = OpLoad %6 %10
848          %34 = OpAccessChain %29 %26 %27 %33
849          %35 = OpLoad %6 %34
850          %36 = OpAccessChain %29 %26 %27 %32
851                OpStore %36 %35
852          %37 = OpLoad %6 %10
853          %38 = OpLoad %6 %20
854          %39 = OpAccessChain %29 %26 %27 %37
855                OpStore %39 %38
856                OpReturn
857                OpFunctionEnd
858          %16 = OpFunction %6 DontInline %13
859          %14 = OpFunctionParameter %7
860          %15 = OpFunctionParameter %7
861          %17 = OpLabel
862          %40 = OpVariable %7 Function
863          %44 = OpVariable %7 Function
864          %48 = OpVariable %7 Function
865          %69 = OpVariable %7 Function
866          %71 = OpVariable %7 Function
867          %78 = OpVariable %7 Function
868          %80 = OpVariable %7 Function
869          %41 = OpLoad %6 %15
870          %42 = OpAccessChain %29 %26 %27 %41
871          %43 = OpLoad %6 %42
872                OpStore %40 %43
873          %45 = OpLoad %6 %14
874          %47 = OpISub %6 %45 %46
875                OpStore %44 %47
876          %49 = OpLoad %6 %14
877                OpStore %48 %49
878                OpBranch %50
879          %50 = OpLabel
880                OpLoopMerge %52 %53 None
881                OpBranch %54
882          %54 = OpLabel
883          %55 = OpLoad %6 %48
884          %56 = OpLoad %6 %15
885          %57 = OpISub %6 %56 %46
886          %59 = OpSLessThanEqual %58 %55 %57
887                OpBranchConditional %59 %51 %52
888          %51 = OpLabel
889          %60 = OpLoad %6 %48
890          %61 = OpAccessChain %29 %26 %27 %60
891          %62 = OpLoad %6 %61
892          %63 = OpLoad %6 %40
893          %64 = OpSLessThanEqual %58 %62 %63
894                OpSelectionMerge %66 None
895                OpBranchConditional %64 %65 %66
896          %65 = OpLabel
897          %67 = OpLoad %6 %44
898          %68 = OpIAdd %6 %67 %46
899                OpStore %44 %68
900          %70 = OpLoad %6 %44
901                OpStore %69 %70
902          %72 = OpLoad %6 %48
903                OpStore %71 %72
904          %73 = OpFunctionCall %2 %11 %69 %71
905                OpBranch %66
906          %66 = OpLabel
907                OpBranch %53
908          %53 = OpLabel
909          %74 = OpLoad %6 %48
910          %75 = OpIAdd %6 %74 %46
911                OpStore %48 %75
912                OpBranch %50
913          %52 = OpLabel
914          %76 = OpLoad %6 %44
915          %77 = OpIAdd %6 %76 %46
916                OpStore %44 %77
917          %79 = OpLoad %6 %44
918                OpStore %78 %79
919          %81 = OpLoad %6 %15
920                OpStore %80 %81
921          %82 = OpFunctionCall %2 %11 %78 %80
922          %83 = OpLoad %6 %44
923                OpReturnValue %83
924                OpFunctionEnd
925          %18 = OpFunction %2 None %3
926          %19 = OpLabel
927          %86 = OpVariable %7 Function
928          %87 = OpVariable %7 Function
929          %89 = OpVariable %7 Function
930          %92 = OpVariable %91 Function
931         %116 = OpVariable %7 Function
932         %117 = OpVariable %7 Function
933         %119 = OpVariable %7 Function
934                OpStore %86 %27
935                OpStore %87 %88
936                OpStore %89 %90
937          %93 = OpLoad %6 %89
938          %94 = OpIAdd %6 %93 %46
939                OpStore %89 %94
940          %95 = OpLoad %6 %86
941          %96 = OpAccessChain %7 %92 %94
942                OpStore %96 %95
943          %97 = OpLoad %6 %89
944          %98 = OpIAdd %6 %97 %46
945                OpStore %89 %98
946          %99 = OpLoad %6 %87
947         %100 = OpAccessChain %7 %92 %98
948                OpStore %100 %99
949                OpBranch %101
950         %101 = OpLabel
951                OpLoopMerge %103 %104 None
952                OpBranch %105
953         %105 = OpLabel
954         %106 = OpLoad %6 %89
955         %107 = OpSGreaterThanEqual %58 %106 %27
956                OpBranchConditional %107 %102 %103
957         %102 = OpLabel
958         %108 = OpLoad %6 %89
959         %109 = OpISub %6 %108 %46
960                OpStore %89 %109
961         %110 = OpAccessChain %7 %92 %108
962         %111 = OpLoad %6 %110
963                OpStore %87 %111
964         %112 = OpLoad %6 %89
965         %113 = OpISub %6 %112 %46
966                OpStore %89 %113
967         %114 = OpAccessChain %7 %92 %112
968         %115 = OpLoad %6 %114
969                OpStore %86 %115
970         %118 = OpLoad %6 %86
971                OpStore %117 %118
972         %120 = OpLoad %6 %87
973                OpStore %119 %120
974         %121 = OpFunctionCall %6 %16 %117 %119
975                OpStore %116 %121
976         %122 = OpLoad %6 %116
977         %123 = OpISub %6 %122 %46
978         %124 = OpLoad %6 %86
979         %125 = OpSGreaterThan %58 %123 %124
980                OpSelectionMerge %127 None
981                OpBranchConditional %125 %126 %127
982         %126 = OpLabel
983         %128 = OpLoad %6 %89
984         %129 = OpIAdd %6 %128 %46
985                OpStore %89 %129
986         %130 = OpLoad %6 %86
987         %131 = OpAccessChain %7 %92 %129
988                OpStore %131 %130
989         %132 = OpLoad %6 %89
990         %133 = OpIAdd %6 %132 %46
991                OpStore %89 %133
992         %134 = OpLoad %6 %116
993         %135 = OpISub %6 %134 %46
994         %136 = OpAccessChain %7 %92 %133
995                OpStore %136 %135
996                OpBranch %127
997         %127 = OpLabel
998         %137 = OpLoad %6 %116
999         %138 = OpIAdd %6 %137 %46
1000         %139 = OpLoad %6 %87
1001         %140 = OpSLessThan %58 %138 %139
1002                OpSelectionMerge %142 None
1003                OpBranchConditional %140 %141 %142
1004         %141 = OpLabel
1005         %143 = OpLoad %6 %89
1006         %144 = OpIAdd %6 %143 %46
1007                OpStore %89 %144
1008         %145 = OpLoad %6 %116
1009         %146 = OpIAdd %6 %145 %46
1010         %147 = OpAccessChain %7 %92 %144
1011                OpStore %147 %146
1012         %148 = OpLoad %6 %89
1013         %149 = OpIAdd %6 %148 %46
1014                OpStore %89 %149
1015         %150 = OpLoad %6 %87
1016         %151 = OpAccessChain %7 %92 %149
1017                OpStore %151 %150
1018                OpBranch %142
1019         %142 = OpLabel
1020                OpBranch %104
1021         %104 = OpLabel
1022                OpBranch %101
1023         %103 = OpLabel
1024                OpReturn
1025                OpFunctionEnd
1026 END
1027
1028 # uniforms for variant
1029
1030 # resolution
1031 BUFFER variant_resolution DATA_TYPE vec2<float> STD140 DATA
1032  256.0 256.0
1033 END
1034
1035 BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
1036
1037 PIPELINE graphics variant_pipeline
1038   ATTACH variant_vertex_shader
1039   ATTACH variant_fragment_shader
1040   FRAMEBUFFER_SIZE 256 256
1041   BIND BUFFER variant_framebuffer AS color LOCATION 0
1042   BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
1043 END
1044 CLEAR_COLOR variant_pipeline 0 0 0 255
1045
1046 CLEAR variant_pipeline
1047 RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
1048
1049 EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005