#!amber # Copyright 2021 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # A test for a coverage-gap found by the GraphicsFuzz project. # Short description: A fragment shader that covers specific BRW code paths # The test passes because the shader always writes red. SHADER vertex variant_vertex_shader PASSTHROUGH # variant_fragment_shader is derived from the following GLSL: # #version 320 es # # #define LOOP for (int i = 0; i < 1; i++) # # precision highp int; # precision highp float; # # const int _GLF_global_loop_bound = 100; # int _GLF_global_loop_count = 0; # # layout(location = 0) out vec4 _GLF_color; # # void main() # { # mat2x3 m23 = mat2x3(0); # mat2x4 m24 = mat2x4(0); # mat3x2 m32 = mat3x2(0); # mat3 m33 = mat3(0); # mat3x4 m34 = mat3x4(0); # mat4x2 m42 = mat4x2(0); # mat4x3 m43 = mat4x3(0); # mat4 m44 = mat4(0); # # // Each loop iterates just once. # LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { # LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { # LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { # LOOP { LOOP { LOOP { LOOP { LOOP { # // Run until _GLF_global_loop_bound is 98. # do # { # _GLF_global_loop_count++; # } # while(_GLF_global_loop_count < _GLF_global_loop_bound - 2); # # // Write one to the first matrix element. # m23[i][i] = 1.0; # m24[i][i] = 1.0; # m32[i][i] = 1.0; # m33[i][i] = 1.0; # m34[i][i] = 1.0; # m42[i][i] = 1.0; # m43[i][i] = 1.0; # m44[i][i] = 1.0; # } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } # # float sum = 0.0; # // Iterate twice. The first iteration reads one and the second zero. # for(int r = 0; _GLF_global_loop_count < _GLF_global_loop_bound; r++) # { # _GLF_global_loop_count++; # sum += m23[0][r]; # sum += m24[0][r]; # sum += m32[0][r]; # sum += m33[0][r]; # sum += m34[0][r]; # sum += m42[0][r]; # sum += m43[0][r]; # sum += m44[0][r]; # } # # // Always true. # if (sum == 8.0) # _GLF_color = vec4(1, 0, 0, 1); # else # _GLF_color = vec4(0); # } SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 ; SPIR-V ; Version: 1.0 ; Generator: Khronos Glslang Reference Front End; 10 ; Bound: 531 ; Schema: 0 OpCapability Shader %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %4 "main" %528 OpExecutionMode %4 OriginUpperLeft OpSource ESSL 320 OpName %4 "main" OpName %8 "_GLF_global_loop_count" OpName %14 "m23" OpName %21 "m24" OpName %27 "m32" OpName %32 "m33" OpName %36 "m34" OpName %40 "m42" OpName %44 "m43" OpName %48 "m44" OpName %51 "i" OpName %61 "i" OpName %69 "i" OpName %77 "i" OpName %85 "i" OpName %93 "i" OpName %101 "i" OpName %109 "i" OpName %117 "i" OpName %125 "i" OpName %133 "i" OpName %141 "i" OpName %149 "i" OpName %157 "i" OpName %165 "i" OpName %173 "i" OpName %181 "i" OpName %189 "i" OpName %197 "i" OpName %205 "i" OpName %213 "i" OpName %221 "i" OpName %229 "i" OpName %237 "i" OpName %245 "i" OpName %253 "i" OpName %261 "i" OpName %269 "i" OpName %277 "i" OpName %285 "i" OpName %293 "i" OpName %301 "i" OpName %309 "i" OpName %317 "i" OpName %325 "i" OpName %333 "i" OpName %341 "i" OpName %349 "i" OpName %468 "sum" OpName %469 "r" OpName %528 "_GLF_color" OpDecorate %528 Location 0 %2 = OpTypeVoid %3 = OpTypeFunction %2 %6 = OpTypeInt 32 1 %7 = OpTypePointer Private %6 %8 = OpVariable %7 Private %9 = OpConstant %6 0 %10 = OpTypeFloat 32 %11 = OpTypeVector %10 3 %12 = OpTypeMatrix %11 2 %13 = OpTypePointer Function %12 %15 = OpConstant %10 0 %16 = OpConstantComposite %11 %15 %15 %15 %17 = OpConstantComposite %12 %16 %16 %18 = OpTypeVector %10 4 %19 = OpTypeMatrix %18 2 %20 = OpTypePointer Function %19 %22 = OpConstantComposite %18 %15 %15 %15 %15 %23 = OpConstantComposite %19 %22 %22 %24 = OpTypeVector %10 2 %25 = OpTypeMatrix %24 3 %26 = OpTypePointer Function %25 %28 = OpConstantComposite %24 %15 %15 %29 = OpConstantComposite %25 %28 %28 %28 %30 = OpTypeMatrix %11 3 %31 = OpTypePointer Function %30 %33 = OpConstantComposite %30 %16 %16 %16 %34 = OpTypeMatrix %18 3 %35 = OpTypePointer Function %34 %37 = OpConstantComposite %34 %22 %22 %22 %38 = OpTypeMatrix %24 4 %39 = OpTypePointer Function %38 %41 = OpConstantComposite %38 %28 %28 %28 %28 %42 = OpTypeMatrix %11 4 %43 = OpTypePointer Function %42 %45 = OpConstantComposite %42 %16 %16 %16 %16 %46 = OpTypeMatrix %18 4 %47 = OpTypePointer Function %46 %49 = OpConstantComposite %46 %22 %22 %22 %22 %50 = OpTypePointer Function %6 %58 = OpConstant %6 1 %59 = OpTypeBool %364 = OpConstant %6 98 %368 = OpConstant %10 1 %369 = OpTypePointer Function %10 %476 = OpConstant %6 100 %523 = OpConstant %10 8 %527 = OpTypePointer Output %18 %528 = OpVariable %527 Output %529 = OpConstantComposite %18 %368 %15 %15 %368 %4 = OpFunction %2 None %3 %5 = OpLabel %14 = OpVariable %13 Function %21 = OpVariable %20 Function %27 = OpVariable %26 Function %32 = OpVariable %31 Function %36 = OpVariable %35 Function %40 = OpVariable %39 Function %44 = OpVariable %43 Function %48 = OpVariable %47 Function %51 = OpVariable %50 Function %61 = OpVariable %50 Function %69 = OpVariable %50 Function %77 = OpVariable %50 Function %85 = OpVariable %50 Function %93 = OpVariable %50 Function %101 = OpVariable %50 Function %109 = OpVariable %50 Function %117 = OpVariable %50 Function %125 = OpVariable %50 Function %133 = OpVariable %50 Function %141 = OpVariable %50 Function %149 = OpVariable %50 Function %157 = OpVariable %50 Function %165 = OpVariable %50 Function %173 = OpVariable %50 Function %181 = OpVariable %50 Function %189 = OpVariable %50 Function %197 = OpVariable %50 Function %205 = OpVariable %50 Function %213 = OpVariable %50 Function %221 = OpVariable %50 Function %229 = OpVariable %50 Function %237 = OpVariable %50 Function %245 = OpVariable %50 Function %253 = OpVariable %50 Function %261 = OpVariable %50 Function %269 = OpVariable %50 Function %277 = OpVariable %50 Function %285 = OpVariable %50 Function %293 = OpVariable %50 Function %301 = OpVariable %50 Function %309 = OpVariable %50 Function %317 = OpVariable %50 Function %325 = OpVariable %50 Function %333 = OpVariable %50 Function %341 = OpVariable %50 Function %349 = OpVariable %50 Function %468 = OpVariable %369 Function %469 = OpVariable %50 Function OpStore %8 %9 OpStore %14 %17 OpStore %21 %23 OpStore %27 %29 OpStore %32 %33 OpStore %36 %37 OpStore %40 %41 OpStore %44 %45 OpStore %48 %49 OpStore %51 %9 OpBranch %52 %52 = OpLabel OpLoopMerge %54 %55 None OpBranch %56 %56 = OpLabel %57 = OpLoad %6 %51 %60 = OpSLessThan %59 %57 %58 OpBranchConditional %60 %53 %54 %53 = OpLabel OpStore %61 %9 OpBranch %62 %62 = OpLabel OpLoopMerge %64 %65 None OpBranch %66 %66 = OpLabel %67 = OpLoad %6 %61 %68 = OpSLessThan %59 %67 %58 OpBranchConditional %68 %63 %64 %63 = OpLabel OpStore %69 %9 OpBranch %70 %70 = OpLabel OpLoopMerge %72 %73 None OpBranch %74 %74 = OpLabel %75 = OpLoad %6 %69 %76 = OpSLessThan %59 %75 %58 OpBranchConditional %76 %71 %72 %71 = OpLabel OpStore %77 %9 OpBranch %78 %78 = OpLabel OpLoopMerge %80 %81 None OpBranch %82 %82 = OpLabel %83 = OpLoad %6 %77 %84 = OpSLessThan %59 %83 %58 OpBranchConditional %84 %79 %80 %79 = OpLabel OpStore %85 %9 OpBranch %86 %86 = OpLabel OpLoopMerge %88 %89 None OpBranch %90 %90 = OpLabel %91 = OpLoad %6 %85 %92 = OpSLessThan %59 %91 %58 OpBranchConditional %92 %87 %88 %87 = OpLabel OpStore %93 %9 OpBranch %94 %94 = OpLabel OpLoopMerge %96 %97 None OpBranch %98 %98 = OpLabel %99 = OpLoad %6 %93 %100 = OpSLessThan %59 %99 %58 OpBranchConditional %100 %95 %96 %95 = OpLabel OpStore %101 %9 OpBranch %102 %102 = OpLabel OpLoopMerge %104 %105 None OpBranch %106 %106 = OpLabel %107 = OpLoad %6 %101 %108 = OpSLessThan %59 %107 %58 OpBranchConditional %108 %103 %104 %103 = OpLabel OpStore %109 %9 OpBranch %110 %110 = OpLabel OpLoopMerge %112 %113 None OpBranch %114 %114 = OpLabel %115 = OpLoad %6 %109 %116 = OpSLessThan %59 %115 %58 OpBranchConditional %116 %111 %112 %111 = OpLabel OpStore %117 %9 OpBranch %118 %118 = OpLabel OpLoopMerge %120 %121 None OpBranch %122 %122 = OpLabel %123 = OpLoad %6 %117 %124 = OpSLessThan %59 %123 %58 OpBranchConditional %124 %119 %120 %119 = OpLabel OpStore %125 %9 OpBranch %126 %126 = OpLabel OpLoopMerge %128 %129 None OpBranch %130 %130 = OpLabel %131 = OpLoad %6 %125 %132 = OpSLessThan %59 %131 %58 OpBranchConditional %132 %127 %128 %127 = OpLabel OpStore %133 %9 OpBranch %134 %134 = OpLabel OpLoopMerge %136 %137 None OpBranch %138 %138 = OpLabel %139 = OpLoad %6 %133 %140 = OpSLessThan %59 %139 %58 OpBranchConditional %140 %135 %136 %135 = OpLabel OpStore %141 %9 OpBranch %142 %142 = OpLabel OpLoopMerge %144 %145 None OpBranch %146 %146 = OpLabel %147 = OpLoad %6 %141 %148 = OpSLessThan %59 %147 %58 OpBranchConditional %148 %143 %144 %143 = OpLabel OpStore %149 %9 OpBranch %150 %150 = OpLabel OpLoopMerge %152 %153 None OpBranch %154 %154 = OpLabel %155 = OpLoad %6 %149 %156 = OpSLessThan %59 %155 %58 OpBranchConditional %156 %151 %152 %151 = OpLabel OpStore %157 %9 OpBranch %158 %158 = OpLabel OpLoopMerge %160 %161 None OpBranch %162 %162 = OpLabel %163 = OpLoad %6 %157 %164 = OpSLessThan %59 %163 %58 OpBranchConditional %164 %159 %160 %159 = OpLabel OpStore %165 %9 OpBranch %166 %166 = OpLabel OpLoopMerge %168 %169 None OpBranch %170 %170 = OpLabel %171 = OpLoad %6 %165 %172 = OpSLessThan %59 %171 %58 OpBranchConditional %172 %167 %168 %167 = OpLabel OpStore %173 %9 OpBranch %174 %174 = OpLabel OpLoopMerge %176 %177 None OpBranch %178 %178 = OpLabel %179 = OpLoad %6 %173 %180 = OpSLessThan %59 %179 %58 OpBranchConditional %180 %175 %176 %175 = OpLabel OpStore %181 %9 OpBranch %182 %182 = OpLabel OpLoopMerge %184 %185 None OpBranch %186 %186 = OpLabel %187 = OpLoad %6 %181 %188 = OpSLessThan %59 %187 %58 OpBranchConditional %188 %183 %184 %183 = OpLabel OpStore %189 %9 OpBranch %190 %190 = OpLabel OpLoopMerge %192 %193 None OpBranch %194 %194 = OpLabel %195 = OpLoad %6 %189 %196 = OpSLessThan %59 %195 %58 OpBranchConditional %196 %191 %192 %191 = OpLabel OpStore %197 %9 OpBranch %198 %198 = OpLabel OpLoopMerge %200 %201 None OpBranch %202 %202 = OpLabel %203 = OpLoad %6 %197 %204 = OpSLessThan %59 %203 %58 OpBranchConditional %204 %199 %200 %199 = OpLabel OpStore %205 %9 OpBranch %206 %206 = OpLabel OpLoopMerge %208 %209 None OpBranch %210 %210 = OpLabel %211 = OpLoad %6 %205 %212 = OpSLessThan %59 %211 %58 OpBranchConditional %212 %207 %208 %207 = OpLabel OpStore %213 %9 OpBranch %214 %214 = OpLabel OpLoopMerge %216 %217 None OpBranch %218 %218 = OpLabel %219 = OpLoad %6 %213 %220 = OpSLessThan %59 %219 %58 OpBranchConditional %220 %215 %216 %215 = OpLabel OpStore %221 %9 OpBranch %222 %222 = OpLabel OpLoopMerge %224 %225 None OpBranch %226 %226 = OpLabel %227 = OpLoad %6 %221 %228 = OpSLessThan %59 %227 %58 OpBranchConditional %228 %223 %224 %223 = OpLabel OpStore %229 %9 OpBranch %230 %230 = OpLabel OpLoopMerge %232 %233 None OpBranch %234 %234 = OpLabel %235 = OpLoad %6 %229 %236 = OpSLessThan %59 %235 %58 OpBranchConditional %236 %231 %232 %231 = OpLabel OpStore %237 %9 OpBranch %238 %238 = OpLabel OpLoopMerge %240 %241 None OpBranch %242 %242 = OpLabel %243 = OpLoad %6 %237 %244 = OpSLessThan %59 %243 %58 OpBranchConditional %244 %239 %240 %239 = OpLabel OpStore %245 %9 OpBranch %246 %246 = OpLabel OpLoopMerge %248 %249 None OpBranch %250 %250 = OpLabel %251 = OpLoad %6 %245 %252 = OpSLessThan %59 %251 %58 OpBranchConditional %252 %247 %248 %247 = OpLabel OpStore %253 %9 OpBranch %254 %254 = OpLabel OpLoopMerge %256 %257 None OpBranch %258 %258 = OpLabel %259 = OpLoad %6 %253 %260 = OpSLessThan %59 %259 %58 OpBranchConditional %260 %255 %256 %255 = OpLabel OpStore %261 %9 OpBranch %262 %262 = OpLabel OpLoopMerge %264 %265 None OpBranch %266 %266 = OpLabel %267 = OpLoad %6 %261 %268 = OpSLessThan %59 %267 %58 OpBranchConditional %268 %263 %264 %263 = OpLabel OpStore %269 %9 OpBranch %270 %270 = OpLabel OpLoopMerge %272 %273 None OpBranch %274 %274 = OpLabel %275 = OpLoad %6 %269 %276 = OpSLessThan %59 %275 %58 OpBranchConditional %276 %271 %272 %271 = OpLabel OpStore %277 %9 OpBranch %278 %278 = OpLabel OpLoopMerge %280 %281 None OpBranch %282 %282 = OpLabel %283 = OpLoad %6 %277 %284 = OpSLessThan %59 %283 %58 OpBranchConditional %284 %279 %280 %279 = OpLabel OpStore %285 %9 OpBranch %286 %286 = OpLabel OpLoopMerge %288 %289 None OpBranch %290 %290 = OpLabel %291 = OpLoad %6 %285 %292 = OpSLessThan %59 %291 %58 OpBranchConditional %292 %287 %288 %287 = OpLabel OpStore %293 %9 OpBranch %294 %294 = OpLabel OpLoopMerge %296 %297 None OpBranch %298 %298 = OpLabel %299 = OpLoad %6 %293 %300 = OpSLessThan %59 %299 %58 OpBranchConditional %300 %295 %296 %295 = OpLabel OpStore %301 %9 OpBranch %302 %302 = OpLabel OpLoopMerge %304 %305 None OpBranch %306 %306 = OpLabel %307 = OpLoad %6 %301 %308 = OpSLessThan %59 %307 %58 OpBranchConditional %308 %303 %304 %303 = OpLabel OpStore %309 %9 OpBranch %310 %310 = OpLabel OpLoopMerge %312 %313 None OpBranch %314 %314 = OpLabel %315 = OpLoad %6 %309 %316 = OpSLessThan %59 %315 %58 OpBranchConditional %316 %311 %312 %311 = OpLabel OpStore %317 %9 OpBranch %318 %318 = OpLabel OpLoopMerge %320 %321 None OpBranch %322 %322 = OpLabel %323 = OpLoad %6 %317 %324 = OpSLessThan %59 %323 %58 OpBranchConditional %324 %319 %320 %319 = OpLabel OpStore %325 %9 OpBranch %326 %326 = OpLabel OpLoopMerge %328 %329 None OpBranch %330 %330 = OpLabel %331 = OpLoad %6 %325 %332 = OpSLessThan %59 %331 %58 OpBranchConditional %332 %327 %328 %327 = OpLabel OpStore %333 %9 OpBranch %334 %334 = OpLabel OpLoopMerge %336 %337 None OpBranch %338 %338 = OpLabel %339 = OpLoad %6 %333 %340 = OpSLessThan %59 %339 %58 OpBranchConditional %340 %335 %336 %335 = OpLabel OpStore %341 %9 OpBranch %342 %342 = OpLabel OpLoopMerge %344 %345 None OpBranch %346 %346 = OpLabel %347 = OpLoad %6 %341 %348 = OpSLessThan %59 %347 %58 OpBranchConditional %348 %343 %344 %343 = OpLabel OpStore %349 %9 OpBranch %350 %350 = OpLabel OpLoopMerge %352 %353 None OpBranch %354 %354 = OpLabel %355 = OpLoad %6 %349 %356 = OpSLessThan %59 %355 %58 OpBranchConditional %356 %351 %352 %351 = OpLabel OpBranch %357 %357 = OpLabel OpLoopMerge %359 %360 None OpBranch %358 %358 = OpLabel %361 = OpLoad %6 %8 %362 = OpIAdd %6 %361 %58 OpStore %8 %362 OpBranch %360 %360 = OpLabel %363 = OpLoad %6 %8 %365 = OpSLessThan %59 %363 %364 OpBranchConditional %365 %357 %359 %359 = OpLabel %366 = OpLoad %6 %349 %367 = OpLoad %6 %349 %370 = OpAccessChain %369 %14 %366 %367 OpStore %370 %368 %371 = OpLoad %6 %349 %372 = OpLoad %6 %349 %373 = OpAccessChain %369 %21 %371 %372 OpStore %373 %368 %374 = OpLoad %6 %349 %375 = OpLoad %6 %349 %376 = OpAccessChain %369 %27 %374 %375 OpStore %376 %368 %377 = OpLoad %6 %349 %378 = OpLoad %6 %349 %379 = OpAccessChain %369 %32 %377 %378 OpStore %379 %368 %380 = OpLoad %6 %349 %381 = OpLoad %6 %349 %382 = OpAccessChain %369 %36 %380 %381 OpStore %382 %368 %383 = OpLoad %6 %349 %384 = OpLoad %6 %349 %385 = OpAccessChain %369 %40 %383 %384 OpStore %385 %368 %386 = OpLoad %6 %349 %387 = OpLoad %6 %349 %388 = OpAccessChain %369 %44 %386 %387 OpStore %388 %368 %389 = OpLoad %6 %349 %390 = OpLoad %6 %349 %391 = OpAccessChain %369 %48 %389 %390 OpStore %391 %368 OpBranch %353 %353 = OpLabel %392 = OpLoad %6 %349 %393 = OpIAdd %6 %392 %58 OpStore %349 %393 OpBranch %350 %352 = OpLabel OpBranch %345 %345 = OpLabel %394 = OpLoad %6 %341 %395 = OpIAdd %6 %394 %58 OpStore %341 %395 OpBranch %342 %344 = OpLabel OpBranch %337 %337 = OpLabel %396 = OpLoad %6 %333 %397 = OpIAdd %6 %396 %58 OpStore %333 %397 OpBranch %334 %336 = OpLabel OpBranch %329 %329 = OpLabel %398 = OpLoad %6 %325 %399 = OpIAdd %6 %398 %58 OpStore %325 %399 OpBranch %326 %328 = OpLabel OpBranch %321 %321 = OpLabel %400 = OpLoad %6 %317 %401 = OpIAdd %6 %400 %58 OpStore %317 %401 OpBranch %318 %320 = OpLabel OpBranch %313 %313 = OpLabel %402 = OpLoad %6 %309 %403 = OpIAdd %6 %402 %58 OpStore %309 %403 OpBranch %310 %312 = OpLabel OpBranch %305 %305 = OpLabel %404 = OpLoad %6 %301 %405 = OpIAdd %6 %404 %58 OpStore %301 %405 OpBranch %302 %304 = OpLabel OpBranch %297 %297 = OpLabel %406 = OpLoad %6 %293 %407 = OpIAdd %6 %406 %58 OpStore %293 %407 OpBranch %294 %296 = OpLabel OpBranch %289 %289 = OpLabel %408 = OpLoad %6 %285 %409 = OpIAdd %6 %408 %58 OpStore %285 %409 OpBranch %286 %288 = OpLabel OpBranch %281 %281 = OpLabel %410 = OpLoad %6 %277 %411 = OpIAdd %6 %410 %58 OpStore %277 %411 OpBranch %278 %280 = OpLabel OpBranch %273 %273 = OpLabel %412 = OpLoad %6 %269 %413 = OpIAdd %6 %412 %58 OpStore %269 %413 OpBranch %270 %272 = OpLabel OpBranch %265 %265 = OpLabel %414 = OpLoad %6 %261 %415 = OpIAdd %6 %414 %58 OpStore %261 %415 OpBranch %262 %264 = OpLabel OpBranch %257 %257 = OpLabel %416 = OpLoad %6 %253 %417 = OpIAdd %6 %416 %58 OpStore %253 %417 OpBranch %254 %256 = OpLabel OpBranch %249 %249 = OpLabel %418 = OpLoad %6 %245 %419 = OpIAdd %6 %418 %58 OpStore %245 %419 OpBranch %246 %248 = OpLabel OpBranch %241 %241 = OpLabel %420 = OpLoad %6 %237 %421 = OpIAdd %6 %420 %58 OpStore %237 %421 OpBranch %238 %240 = OpLabel OpBranch %233 %233 = OpLabel %422 = OpLoad %6 %229 %423 = OpIAdd %6 %422 %58 OpStore %229 %423 OpBranch %230 %232 = OpLabel OpBranch %225 %225 = OpLabel %424 = OpLoad %6 %221 %425 = OpIAdd %6 %424 %58 OpStore %221 %425 OpBranch %222 %224 = OpLabel OpBranch %217 %217 = OpLabel %426 = OpLoad %6 %213 %427 = OpIAdd %6 %426 %58 OpStore %213 %427 OpBranch %214 %216 = OpLabel OpBranch %209 %209 = OpLabel %428 = OpLoad %6 %205 %429 = OpIAdd %6 %428 %58 OpStore %205 %429 OpBranch %206 %208 = OpLabel OpBranch %201 %201 = OpLabel %430 = OpLoad %6 %197 %431 = OpIAdd %6 %430 %58 OpStore %197 %431 OpBranch %198 %200 = OpLabel OpBranch %193 %193 = OpLabel %432 = OpLoad %6 %189 %433 = OpIAdd %6 %432 %58 OpStore %189 %433 OpBranch %190 %192 = OpLabel OpBranch %185 %185 = OpLabel %434 = OpLoad %6 %181 %435 = OpIAdd %6 %434 %58 OpStore %181 %435 OpBranch %182 %184 = OpLabel OpBranch %177 %177 = OpLabel %436 = OpLoad %6 %173 %437 = OpIAdd %6 %436 %58 OpStore %173 %437 OpBranch %174 %176 = OpLabel OpBranch %169 %169 = OpLabel %438 = OpLoad %6 %165 %439 = OpIAdd %6 %438 %58 OpStore %165 %439 OpBranch %166 %168 = OpLabel OpBranch %161 %161 = OpLabel %440 = OpLoad %6 %157 %441 = OpIAdd %6 %440 %58 OpStore %157 %441 OpBranch %158 %160 = OpLabel OpBranch %153 %153 = OpLabel %442 = OpLoad %6 %149 %443 = OpIAdd %6 %442 %58 OpStore %149 %443 OpBranch %150 %152 = OpLabel OpBranch %145 %145 = OpLabel %444 = OpLoad %6 %141 %445 = OpIAdd %6 %444 %58 OpStore %141 %445 OpBranch %142 %144 = OpLabel OpBranch %137 %137 = OpLabel %446 = OpLoad %6 %133 %447 = OpIAdd %6 %446 %58 OpStore %133 %447 OpBranch %134 %136 = OpLabel OpBranch %129 %129 = OpLabel %448 = OpLoad %6 %125 %449 = OpIAdd %6 %448 %58 OpStore %125 %449 OpBranch %126 %128 = OpLabel OpBranch %121 %121 = OpLabel %450 = OpLoad %6 %117 %451 = OpIAdd %6 %450 %58 OpStore %117 %451 OpBranch %118 %120 = OpLabel OpBranch %113 %113 = OpLabel %452 = OpLoad %6 %109 %453 = OpIAdd %6 %452 %58 OpStore %109 %453 OpBranch %110 %112 = OpLabel OpBranch %105 %105 = OpLabel %454 = OpLoad %6 %101 %455 = OpIAdd %6 %454 %58 OpStore %101 %455 OpBranch %102 %104 = OpLabel OpBranch %97 %97 = OpLabel %456 = OpLoad %6 %93 %457 = OpIAdd %6 %456 %58 OpStore %93 %457 OpBranch %94 %96 = OpLabel OpBranch %89 %89 = OpLabel %458 = OpLoad %6 %85 %459 = OpIAdd %6 %458 %58 OpStore %85 %459 OpBranch %86 %88 = OpLabel OpBranch %81 %81 = OpLabel %460 = OpLoad %6 %77 %461 = OpIAdd %6 %460 %58 OpStore %77 %461 OpBranch %78 %80 = OpLabel OpBranch %73 %73 = OpLabel %462 = OpLoad %6 %69 %463 = OpIAdd %6 %462 %58 OpStore %69 %463 OpBranch %70 %72 = OpLabel OpBranch %65 %65 = OpLabel %464 = OpLoad %6 %61 %465 = OpIAdd %6 %464 %58 OpStore %61 %465 OpBranch %62 %64 = OpLabel OpBranch %55 %55 = OpLabel %466 = OpLoad %6 %51 %467 = OpIAdd %6 %466 %58 OpStore %51 %467 OpBranch %52 %54 = OpLabel OpStore %468 %15 OpStore %469 %9 OpBranch %470 %470 = OpLabel OpLoopMerge %472 %473 None OpBranch %474 %474 = OpLabel %475 = OpLoad %6 %8 %477 = OpSLessThan %59 %475 %476 OpBranchConditional %477 %471 %472 %471 = OpLabel %478 = OpLoad %6 %8 %479 = OpIAdd %6 %478 %58 OpStore %8 %479 %480 = OpLoad %6 %469 %481 = OpAccessChain %369 %14 %9 %480 %482 = OpLoad %10 %481 %483 = OpLoad %10 %468 %484 = OpFAdd %10 %483 %482 OpStore %468 %484 %485 = OpLoad %6 %469 %486 = OpAccessChain %369 %21 %9 %485 %487 = OpLoad %10 %486 %488 = OpLoad %10 %468 %489 = OpFAdd %10 %488 %487 OpStore %468 %489 %490 = OpLoad %6 %469 %491 = OpAccessChain %369 %27 %9 %490 %492 = OpLoad %10 %491 %493 = OpLoad %10 %468 %494 = OpFAdd %10 %493 %492 OpStore %468 %494 %495 = OpLoad %6 %469 %496 = OpAccessChain %369 %32 %9 %495 %497 = OpLoad %10 %496 %498 = OpLoad %10 %468 %499 = OpFAdd %10 %498 %497 OpStore %468 %499 %500 = OpLoad %6 %469 %501 = OpAccessChain %369 %36 %9 %500 %502 = OpLoad %10 %501 %503 = OpLoad %10 %468 %504 = OpFAdd %10 %503 %502 OpStore %468 %504 %505 = OpLoad %6 %469 %506 = OpAccessChain %369 %40 %9 %505 %507 = OpLoad %10 %506 %508 = OpLoad %10 %468 %509 = OpFAdd %10 %508 %507 OpStore %468 %509 %510 = OpLoad %6 %469 %511 = OpAccessChain %369 %44 %9 %510 %512 = OpLoad %10 %511 %513 = OpLoad %10 %468 %514 = OpFAdd %10 %513 %512 OpStore %468 %514 %515 = OpLoad %6 %469 %516 = OpAccessChain %369 %48 %9 %515 %517 = OpLoad %10 %516 %518 = OpLoad %10 %468 %519 = OpFAdd %10 %518 %517 OpStore %468 %519 OpBranch %473 %473 = OpLabel %520 = OpLoad %6 %469 %521 = OpIAdd %6 %520 %58 OpStore %469 %521 OpBranch %470 %472 = OpLabel %522 = OpLoad %10 %468 %524 = OpFOrdEqual %59 %522 %523 OpSelectionMerge %526 None OpBranchConditional %524 %525 %530 %525 = OpLabel OpStore %528 %529 OpBranch %526 %530 = OpLabel OpStore %528 %22 OpBranch %526 %526 = OpLabel OpReturn OpFunctionEnd END BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM PIPELINE graphics variant_pipeline ATTACH variant_vertex_shader ATTACH variant_fragment_shader FRAMEBUFFER_SIZE 256 256 BIND BUFFER variant_framebuffer AS color LOCATION 0 END CLEAR_COLOR variant_pipeline 0 0 0 255 CLEAR variant_pipeline RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256 EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255