• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
24SHADER vertex reference_vertex_shader PASSTHROUGH
25
26SHADER 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
513END
514
515# uniforms for reference
516
517# resolution
518BUFFER reference_resolution DATA_TYPE vec2<float> STD140 DATA
519 256.0 256.0
520END
521
522BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
523
524PIPELINE 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
530END
531CLEAR_COLOR reference_pipeline 0 0 0 255
532
533CLEAR reference_pipeline
534RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
535
536
537SHADER vertex variant_vertex_shader PASSTHROUGH
538
539SHADER 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
1026END
1027
1028# uniforms for variant
1029
1030# resolution
1031BUFFER variant_resolution DATA_TYPE vec2<float> STD140 DATA
1032 256.0 256.0
1033END
1034
1035BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
1036
1037PIPELINE 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
1043END
1044CLEAR_COLOR variant_pipeline 0 0 0 255
1045
1046CLEAR variant_pipeline
1047RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
1048
1049EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
1050