3 # Copyright 2020 Google LLC
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
9 # http://www.apache.org/licenses/LICENSE-2.0
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.
18 # A test for a bug found by the GraphicsFuzz project.
20 # Short description: Equivalent shaders, one with DontInline attribute
22 # The test passes because both shaders render the same image.
24 SHADER vertex reference_vertex_shader PASSTHROUGH
26 SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
29 ; Generator: Khronos Glslang Reference Front End; 7
33 %1 = OpExtInstImport "GLSL.std.450"
34 OpMemoryModel Logical GLSL450
35 OpEntryPoint Fragment %4 "main" %183 %324
36 OpExecutionMode %4 OriginUpperLeft
39 OpName %11 "swap(i1;i1;"
42 OpName %16 "performPartition(i1;i1;"
45 OpName %18 "quicksort("
47 OpName %24 "QuicksortObject"
48 OpMemberName %24 0 "numbers"
66 OpName %183 "gl_FragCoord"
68 OpMemberName %186 0 "resolution"
71 OpName %324 "_GLF_color"
72 OpDecorate %183 BuiltIn FragCoord
73 OpMemberDecorate %186 0 Offset 0
75 OpDecorate %188 DescriptorSet 0
76 OpDecorate %188 Binding 0
77 OpDecorate %324 Location 0
79 %3 = OpTypeFunction %2
81 %7 = OpTypePointer Function %6
82 %8 = OpTypeFunction %2 %7 %7
83 %13 = OpTypeFunction %6 %7 %7
85 %22 = OpConstant %21 10
86 %23 = OpTypeArray %6 %22
87 %24 = OpTypeStruct %23
88 %25 = OpTypePointer Private %24
89 %26 = OpVariable %25 Private
91 %29 = OpTypePointer Private %6
95 %90 = OpConstant %6 -1
96 %91 = OpTypePointer Function %23
97 %159 = OpConstant %6 10
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
132 %152 = OpVariable %7 Function
133 %180 = OpVariable %179 Function
134 %195 = OpVariable %194 Function
138 OpLoopMerge %155 %156 None
141 %158 = OpLoad %6 %152
142 %160 = OpSLessThan %58 %158 %159
143 OpBranchConditional %160 %154 %155
145 %161 = OpLoad %6 %152
146 %162 = OpLoad %6 %152
147 %163 = OpISub %6 %159 %162
148 %164 = OpAccessChain %29 %26 %27 %161
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
162 %174 = OpLoad %6 %152
163 %175 = OpIAdd %6 %174 %46
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
324 %11 = OpFunction %2 None %8
325 %9 = OpFunctionParameter %7
326 %10 = OpFunctionParameter %7
328 %20 = OpVariable %7 Function
330 %30 = OpAccessChain %29 %26 %27 %28
335 %34 = OpAccessChain %29 %26 %27 %33
337 %36 = OpAccessChain %29 %26 %27 %32
341 %39 = OpAccessChain %29 %26 %27 %37
345 %16 = OpFunction %6 None %13
346 %14 = OpFunctionParameter %7
347 %15 = OpFunctionParameter %7
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
357 %42 = OpAccessChain %29 %26 %27 %41
361 %47 = OpISub %6 %45 %46
367 OpLoopMerge %52 %53 None
372 %57 = OpISub %6 %56 %46
373 %59 = OpSLessThanEqual %58 %55 %57
374 OpBranchConditional %59 %51 %52
377 %61 = OpAccessChain %29 %26 %27 %60
380 %64 = OpSLessThanEqual %58 %62 %63
381 OpSelectionMerge %66 None
382 OpBranchConditional %64 %65 %66
385 %68 = OpIAdd %6 %67 %46
391 %73 = OpFunctionCall %2 %11 %69 %71
397 %75 = OpIAdd %6 %74 %46
402 %77 = OpIAdd %6 %76 %46
408 %82 = OpFunctionCall %2 %11 %78 %80
412 %18 = OpFunction %2 None %3
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
425 %94 = OpIAdd %6 %93 %46
428 %96 = OpAccessChain %7 %92 %94
431 %98 = OpIAdd %6 %97 %46
434 %100 = OpAccessChain %7 %92 %98
438 OpLoopMerge %103 %104 None
442 %107 = OpSGreaterThanEqual %58 %106 %27
443 OpBranchConditional %107 %102 %103
446 %109 = OpISub %6 %108 %46
448 %110 = OpAccessChain %7 %92 %108
449 %111 = OpLoad %6 %110
452 %113 = OpISub %6 %112 %46
454 %114 = OpAccessChain %7 %92 %112
455 %115 = OpLoad %6 %114
461 %121 = OpFunctionCall %6 %16 %117 %119
463 %122 = OpLoad %6 %116
464 %123 = OpISub %6 %122 %46
466 %125 = OpSGreaterThan %58 %123 %124
467 OpSelectionMerge %127 None
468 OpBranchConditional %125 %126 %127
471 %129 = OpIAdd %6 %128 %46
474 %131 = OpAccessChain %7 %92 %129
477 %133 = OpIAdd %6 %132 %46
479 %134 = OpLoad %6 %116
480 %135 = OpISub %6 %134 %46
481 %136 = OpAccessChain %7 %92 %133
485 %137 = OpLoad %6 %116
486 %138 = OpIAdd %6 %137 %46
488 %140 = OpSLessThan %58 %138 %139
489 OpSelectionMerge %142 None
490 OpBranchConditional %140 %141 %142
493 %144 = OpIAdd %6 %143 %46
495 %145 = OpLoad %6 %116
496 %146 = OpIAdd %6 %145 %46
497 %147 = OpAccessChain %7 %92 %144
500 %149 = OpIAdd %6 %148 %46
503 %151 = OpAccessChain %7 %92 %149
515 # uniforms for reference
518 BUFFER reference_resolution DATA_TYPE vec2<float> STD140 DATA
522 BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
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
531 CLEAR_COLOR reference_pipeline 0 0 0 255
533 CLEAR reference_pipeline
534 RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
537 SHADER vertex variant_vertex_shader PASSTHROUGH
539 SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
542 ; Generator: Khronos Glslang Reference Front End; 7
546 %1 = OpExtInstImport "GLSL.std.450"
547 OpMemoryModel Logical GLSL450
548 OpEntryPoint Fragment %4 "main" %183 %324
549 OpExecutionMode %4 OriginUpperLeft
552 OpName %11 "swap(i1;i1;"
555 OpName %16 "performPartition(i1;i1;"
558 OpName %18 "quicksort("
560 OpName %24 "QuicksortObject"
561 OpMemberName %24 0 "numbers"
579 OpName %183 "gl_FragCoord"
581 OpMemberName %186 0 "resolution"
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
592 %3 = OpTypeFunction %2
594 %7 = OpTypePointer Function %6
595 %8 = OpTypeFunction %2 %7 %7
596 %13 = OpTypeFunction %6 %7 %7
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
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
645 %152 = OpVariable %7 Function
646 %180 = OpVariable %179 Function
647 %195 = OpVariable %194 Function
651 OpLoopMerge %155 %156 None
654 %158 = OpLoad %6 %152
655 %160 = OpSLessThan %58 %158 %159
656 OpBranchConditional %160 %154 %155
658 %161 = OpLoad %6 %152
659 %162 = OpLoad %6 %152
660 %163 = OpISub %6 %159 %162
661 %164 = OpAccessChain %29 %26 %27 %161
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
675 %174 = OpLoad %6 %152
676 %175 = OpIAdd %6 %174 %46
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
837 %11 = OpFunction %2 None %8
838 %9 = OpFunctionParameter %7
839 %10 = OpFunctionParameter %7
841 %20 = OpVariable %7 Function
843 %30 = OpAccessChain %29 %26 %27 %28
848 %34 = OpAccessChain %29 %26 %27 %33
850 %36 = OpAccessChain %29 %26 %27 %32
854 %39 = OpAccessChain %29 %26 %27 %37
858 %16 = OpFunction %6 DontInline %13
859 %14 = OpFunctionParameter %7
860 %15 = OpFunctionParameter %7
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
870 %42 = OpAccessChain %29 %26 %27 %41
874 %47 = OpISub %6 %45 %46
880 OpLoopMerge %52 %53 None
885 %57 = OpISub %6 %56 %46
886 %59 = OpSLessThanEqual %58 %55 %57
887 OpBranchConditional %59 %51 %52
890 %61 = OpAccessChain %29 %26 %27 %60
893 %64 = OpSLessThanEqual %58 %62 %63
894 OpSelectionMerge %66 None
895 OpBranchConditional %64 %65 %66
898 %68 = OpIAdd %6 %67 %46
904 %73 = OpFunctionCall %2 %11 %69 %71
910 %75 = OpIAdd %6 %74 %46
915 %77 = OpIAdd %6 %76 %46
921 %82 = OpFunctionCall %2 %11 %78 %80
925 %18 = OpFunction %2 None %3
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
938 %94 = OpIAdd %6 %93 %46
941 %96 = OpAccessChain %7 %92 %94
944 %98 = OpIAdd %6 %97 %46
947 %100 = OpAccessChain %7 %92 %98
951 OpLoopMerge %103 %104 None
955 %107 = OpSGreaterThanEqual %58 %106 %27
956 OpBranchConditional %107 %102 %103
959 %109 = OpISub %6 %108 %46
961 %110 = OpAccessChain %7 %92 %108
962 %111 = OpLoad %6 %110
965 %113 = OpISub %6 %112 %46
967 %114 = OpAccessChain %7 %92 %112
968 %115 = OpLoad %6 %114
974 %121 = OpFunctionCall %6 %16 %117 %119
976 %122 = OpLoad %6 %116
977 %123 = OpISub %6 %122 %46
979 %125 = OpSGreaterThan %58 %123 %124
980 OpSelectionMerge %127 None
981 OpBranchConditional %125 %126 %127
984 %129 = OpIAdd %6 %128 %46
987 %131 = OpAccessChain %7 %92 %129
990 %133 = OpIAdd %6 %132 %46
992 %134 = OpLoad %6 %116
993 %135 = OpISub %6 %134 %46
994 %136 = OpAccessChain %7 %92 %133
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
1005 %143 = OpLoad %6 %89
1006 %144 = OpIAdd %6 %143 %46
1008 %145 = OpLoad %6 %116
1009 %146 = OpIAdd %6 %145 %46
1010 %147 = OpAccessChain %7 %92 %144
1012 %148 = OpLoad %6 %89
1013 %149 = OpIAdd %6 %148 %46
1015 %150 = OpLoad %6 %87
1016 %151 = OpAccessChain %7 %92 %149
1028 # uniforms for variant
1031 BUFFER variant_resolution DATA_TYPE vec2<float> STD140 DATA
1035 BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
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
1044 CLEAR_COLOR variant_pipeline 0 0 0 255
1046 CLEAR variant_pipeline
1047 RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
1049 EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005