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