| #!amber |
| |
| # Copyright 2019 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 bug found by GraphicsFuzz. |
| |
| # Short description: A fragment shader with a lot of control flow |
| |
| # The test passes because the fragment shader does not enter the first if statement, then writes |
| # the color red. |
| |
| SHADER vertex variant_vertex_shader PASSTHROUGH |
| |
| # variant_fragment_shader is derived from the following GLSL: |
| # #version 310 es |
| # precision highp float; |
| # |
| # layout(set = 0, binding = 0) uniform buf0 |
| # { |
| # vec2 injectionSwitch; |
| # }; |
| # layout(location = 0) out vec4 _GLF_color; |
| # |
| # vec3 drawShape(vec2 pos) |
| # { |
| # bool c2; |
| # c2 = pos.x > 1.0; |
| # if (c2) |
| # { |
| # return vec3(1.0); |
| # } |
| # bool c3; |
| # c3 = pos.y < 1.0; |
| # if (c3) |
| # { |
| # return vec3(1.0); |
| # } |
| # bool c4; |
| # c4 = pos.y > 1.0; |
| # if (c4) |
| # { |
| # return vec3(1.0); |
| # } |
| # bool c5; |
| # c5 = pos.x < 1.0; |
| # if (c5) |
| # { |
| # return vec3(1.0); |
| # } |
| # bool c6; |
| # c6 = pos.x + 1.0 > 1.0; |
| # if (c6) |
| # { |
| # return vec3(1.0); |
| # } |
| # int GLF_live4_looplimiter5; |
| # for ( |
| # int GLF_live4i = 0; |
| # GLF_live4i < 4; |
| # ++GLF_live4i) |
| # { |
| # if (GLF_live4_looplimiter5 >= 7) |
| # { |
| # break; |
| # } |
| # GLF_live4_looplimiter5++; |
| # mat4x2 GLF_live7m42; |
| # GLF_live7m42 = mat4x2(1.0); |
| # mat3 GLF_live7m33; |
| # GLF_live7m33 = mat3(1.0); |
| # int GLF_live7_looplimiter3; |
| # for ( |
| # int GLF_live7cols = 2; |
| # GLF_live7cols < 4; |
| # ++GLF_live7cols) |
| # { |
| # if (GLF_live7_looplimiter3 >= 7) |
| # { |
| # break; |
| # } |
| # GLF_live7_looplimiter3++; |
| # int GLF_live7_looplimiter2; |
| # for ( |
| # int GLF_live7rows = 2; |
| # GLF_live7rows < 4; |
| # ++GLF_live7rows) |
| # { |
| # if (GLF_live7_looplimiter2 >= 7) |
| # { |
| # break; |
| # } |
| # GLF_live7_looplimiter2++; |
| # int GLF_live7_looplimiter1; |
| # GLF_live7_looplimiter1 = 0; |
| # for ( |
| # int GLF_live7c = 0; |
| # GLF_live7c < 3; |
| # GLF_live7c++) |
| # { |
| # if (GLF_live7_looplimiter1 >= 7) |
| # { |
| # break; |
| # } |
| # GLF_live7_looplimiter1++; |
| # int GLF_live7_looplimiter0; |
| # for ( |
| # int GLF_live7r = 0; |
| # GLF_live7r < 2; |
| # ++GLF_live7r) |
| # { |
| # if (GLF_live7_looplimiter0 >= 7) |
| # { |
| # break; |
| # } |
| # GLF_live7_looplimiter0++; |
| # GLF_live7m33[GLF_live7c >= 0 && GLF_live7c < 3 ? GLF_live7c : 0][GLF_live7r >= 0 && GLF_live7r < 3 ? GLF_live7r : 0] = 1.0; |
| # if (0.0 > injectionSwitch.y) |
| # { |
| # } |
| # else |
| # { |
| # GLF_live7m42[GLF_live7c >= 0 && GLF_live7c < 4 ? GLF_live7c : 0][GLF_live7r >= 0 && GLF_live7r < 2 ? GLF_live7r : 0] = 1.0; |
| # } |
| # } |
| # } |
| # } |
| # } |
| # float GLF_live7sums[9]; |
| # int GLF_live7sum_index; |
| # GLF_live7sum_index = 0; |
| # int GLF_live7_looplimiter7; |
| # GLF_live7_looplimiter7 = 0; |
| # for ( |
| # int GLF_live7cols = 2; |
| # GLF_live7cols < 4; |
| # ++GLF_live7cols) |
| # { |
| # if (GLF_live7_looplimiter7 >= 7) |
| # { |
| # break; |
| # } |
| # GLF_live7_looplimiter7++; |
| # int GLF_live7rows; |
| # GLF_live7rows = 2; |
| # GLF_live7sums[GLF_live7sum_index >= 0 && GLF_live7sum_index < 9 ? GLF_live7sum_index : 0] = 0.0; |
| # for ( |
| # int GLF_live7c = 0; |
| # GLF_live7c < 1; |
| # GLF_live7c++) |
| # { |
| # for ( |
| # int GLF_live7r = 0; |
| # GLF_live7r < GLF_live7rows; |
| # GLF_live7r++) |
| # { |
| # GLF_live7sums[GLF_live7sum_index >= 0 && GLF_live7sum_index < 9 ? GLF_live7sum_index : 0] += transpose(GLF_live7m33)[GLF_live7c < 3 ? 1 : int(injectionSwitch.x)][GLF_live7r < 3 ? 1 : 0]; |
| # GLF_live7sums[GLF_live7sum_index >= 0 && GLF_live7sum_index < 9 ? GLF_live7sum_index : 0] += GLF_live7m42[1][GLF_live7r]; |
| # } |
| # } |
| # GLF_live7sum_index++; |
| # } |
| # } |
| # return vec3(1.0); |
| # } |
| # void main() |
| # { |
| # if (injectionSwitch.x >= 2.0) // always false |
| # { |
| # vec2 position = gl_FragCoord.xy; |
| # drawShape(position); |
| # drawShape(position); |
| # |
| # for ( |
| # int i = 25; |
| # i > 0; |
| # --i) |
| # { |
| # drawShape(position); |
| # } |
| # } |
| # _GLF_color = vec4(1.0, 0.0, 0.0, 1.0); |
| # } |
| SHADER fragment variant_fragment_shader SPIRV-ASM |
| ; SPIR-V |
| ; Version: 1.0 |
| ; Generator: Khronos Glslang Reference Front End; 7 |
| ; Bound: 352 |
| ; Schema: 0 |
| OpCapability Shader |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint Fragment %4 "main" %326 %350 |
| OpExecutionMode %4 OriginUpperLeft |
| OpSource ESSL 310 |
| OpName %4 "main" |
| OpName %12 "drawShape(vf2;" |
| OpName %11 "pos" |
| OpName %16 "c2" |
| OpName %29 "c3" |
| OpName %38 "c4" |
| OpName %46 "c5" |
| OpName %54 "c6" |
| OpName %65 "GLF_live4i" |
| OpName %75 "GLF_live4_looplimiter5" |
| OpName %87 "GLF_live7m42" |
| OpName %95 "GLF_live7m33" |
| OpName %100 "GLF_live7cols" |
| OpName %109 "GLF_live7_looplimiter3" |
| OpName %117 "GLF_live7rows" |
| OpName %125 "GLF_live7_looplimiter2" |
| OpName %133 "GLF_live7_looplimiter1" |
| OpName %134 "GLF_live7c" |
| OpName %150 "GLF_live7r" |
| OpName %158 "GLF_live7_looplimiter0" |
| OpName %181 "buf0" |
| OpMemberName %181 0 "injectionSwitch" |
| OpName %183 "" |
| OpName %214 "GLF_live7sum_index" |
| OpName %215 "GLF_live7_looplimiter7" |
| OpName %216 "GLF_live7cols" |
| OpName %231 "GLF_live7rows" |
| OpName %235 "GLF_live7sums" |
| OpName %245 "GLF_live7c" |
| OpName %253 "GLF_live7r" |
| OpName %284 "indexable" |
| OpName %323 "position" |
| OpName %326 "gl_FragCoord" |
| OpName %329 "param" |
| OpName %332 "param" |
| OpName %335 "i" |
| OpName %344 "param" |
| OpName %350 "_GLF_color" |
| OpDecorate %65 RelaxedPrecision |
| OpDecorate %72 RelaxedPrecision |
| OpDecorate %75 RelaxedPrecision |
| OpDecorate %76 RelaxedPrecision |
| OpDecorate %82 RelaxedPrecision |
| OpDecorate %84 RelaxedPrecision |
| OpDecorate %100 RelaxedPrecision |
| OpDecorate %107 RelaxedPrecision |
| OpDecorate %109 RelaxedPrecision |
| OpDecorate %110 RelaxedPrecision |
| OpDecorate %115 RelaxedPrecision |
| OpDecorate %116 RelaxedPrecision |
| OpDecorate %117 RelaxedPrecision |
| OpDecorate %123 RelaxedPrecision |
| OpDecorate %125 RelaxedPrecision |
| OpDecorate %126 RelaxedPrecision |
| OpDecorate %131 RelaxedPrecision |
| OpDecorate %132 RelaxedPrecision |
| OpDecorate %133 RelaxedPrecision |
| OpDecorate %134 RelaxedPrecision |
| OpDecorate %140 RelaxedPrecision |
| OpDecorate %143 RelaxedPrecision |
| OpDecorate %148 RelaxedPrecision |
| OpDecorate %149 RelaxedPrecision |
| OpDecorate %150 RelaxedPrecision |
| OpDecorate %156 RelaxedPrecision |
| OpDecorate %158 RelaxedPrecision |
| OpDecorate %159 RelaxedPrecision |
| OpDecorate %164 RelaxedPrecision |
| OpDecorate %165 RelaxedPrecision |
| OpDecorate %166 RelaxedPrecision |
| OpDecorate %168 RelaxedPrecision |
| OpDecorate %171 RelaxedPrecision |
| OpDecorate %173 RelaxedPrecision |
| OpDecorate %175 RelaxedPrecision |
| OpDecorate %178 RelaxedPrecision |
| OpMemberDecorate %181 0 Offset 0 |
| OpDecorate %181 Block |
| OpDecorate %183 DescriptorSet 0 |
| OpDecorate %183 Binding 0 |
| OpDecorate %191 RelaxedPrecision |
| OpDecorate %193 RelaxedPrecision |
| OpDecorate %196 RelaxedPrecision |
| OpDecorate %198 RelaxedPrecision |
| OpDecorate %200 RelaxedPrecision |
| OpDecorate %203 RelaxedPrecision |
| OpDecorate %206 RelaxedPrecision |
| OpDecorate %207 RelaxedPrecision |
| OpDecorate %208 RelaxedPrecision |
| OpDecorate %209 RelaxedPrecision |
| OpDecorate %210 RelaxedPrecision |
| OpDecorate %211 RelaxedPrecision |
| OpDecorate %212 RelaxedPrecision |
| OpDecorate %213 RelaxedPrecision |
| OpDecorate %214 RelaxedPrecision |
| OpDecorate %215 RelaxedPrecision |
| OpDecorate %216 RelaxedPrecision |
| OpDecorate %222 RelaxedPrecision |
| OpDecorate %224 RelaxedPrecision |
| OpDecorate %229 RelaxedPrecision |
| OpDecorate %230 RelaxedPrecision |
| OpDecorate %231 RelaxedPrecision |
| OpDecorate %236 RelaxedPrecision |
| OpDecorate %238 RelaxedPrecision |
| OpDecorate %242 RelaxedPrecision |
| OpDecorate %245 RelaxedPrecision |
| OpDecorate %251 RelaxedPrecision |
| OpDecorate %253 RelaxedPrecision |
| OpDecorate %259 RelaxedPrecision |
| OpDecorate %260 RelaxedPrecision |
| OpDecorate %262 RelaxedPrecision |
| OpDecorate %264 RelaxedPrecision |
| OpDecorate %267 RelaxedPrecision |
| OpDecorate %271 RelaxedPrecision |
| OpDecorate %281 RelaxedPrecision |
| OpDecorate %291 RelaxedPrecision |
| OpDecorate %293 RelaxedPrecision |
| OpDecorate %296 RelaxedPrecision |
| OpDecorate %298 RelaxedPrecision |
| OpDecorate %305 RelaxedPrecision |
| OpDecorate %306 RelaxedPrecision |
| OpDecorate %307 RelaxedPrecision |
| OpDecorate %308 RelaxedPrecision |
| OpDecorate %309 RelaxedPrecision |
| OpDecorate %310 RelaxedPrecision |
| OpDecorate %311 RelaxedPrecision |
| OpDecorate %312 RelaxedPrecision |
| OpDecorate %313 RelaxedPrecision |
| OpDecorate %314 RelaxedPrecision |
| OpDecorate %326 BuiltIn FragCoord |
| OpDecorate %335 RelaxedPrecision |
| OpDecorate %342 RelaxedPrecision |
| OpDecorate %347 RelaxedPrecision |
| OpDecorate %348 RelaxedPrecision |
| OpDecorate %350 Location 0 |
| %2 = OpTypeVoid |
| %3 = OpTypeFunction %2 |
| %6 = OpTypeFloat 32 |
| %7 = OpTypeVector %6 2 |
| %8 = OpTypePointer Function %7 |
| %9 = OpTypeVector %6 3 |
| %10 = OpTypeFunction %9 %8 |
| %14 = OpTypeBool |
| %15 = OpTypePointer Function %14 |
| %17 = OpTypeInt 32 0 |
| %18 = OpConstant %17 0 |
| %19 = OpTypePointer Function %6 |
| %22 = OpConstant %6 1 |
| %27 = OpConstantComposite %9 %22 %22 %22 |
| %30 = OpConstant %17 1 |
| %63 = OpTypeInt 32 1 |
| %64 = OpTypePointer Function %63 |
| %66 = OpConstant %63 0 |
| %73 = OpConstant %63 4 |
| %77 = OpConstant %63 7 |
| %83 = OpConstant %63 1 |
| %85 = OpTypeMatrix %7 4 |
| %86 = OpTypePointer Function %85 |
| %88 = OpConstant %6 0 |
| %89 = OpConstantComposite %7 %22 %88 |
| %90 = OpConstantComposite %7 %88 %22 |
| %91 = OpConstantComposite %7 %88 %88 |
| %92 = OpConstantComposite %85 %89 %90 %91 %89 |
| %93 = OpTypeMatrix %9 3 |
| %94 = OpTypePointer Function %93 |
| %96 = OpConstantComposite %9 %22 %88 %88 |
| %97 = OpConstantComposite %9 %88 %22 %88 |
| %98 = OpConstantComposite %9 %88 %88 %22 |
| %99 = OpConstantComposite %93 %96 %97 %98 |
| %101 = OpConstant %63 2 |
| %141 = OpConstant %63 3 |
| %181 = OpTypeStruct %7 |
| %182 = OpTypePointer Uniform %181 |
| %183 = OpVariable %182 Uniform |
| %184 = OpTypePointer Uniform %6 |
| %232 = OpConstant %17 9 |
| %233 = OpTypeArray %6 %232 |
| %234 = OpTypePointer Function %233 |
| %239 = OpConstant %63 9 |
| %319 = OpConstant %6 2 |
| %324 = OpTypeVector %6 4 |
| %325 = OpTypePointer Input %324 |
| %326 = OpVariable %325 Input |
| %336 = OpConstant %63 25 |
| %349 = OpTypePointer Output %324 |
| %350 = OpVariable %349 Output |
| %351 = OpConstantComposite %324 %22 %88 %88 %22 |
| %4 = OpFunction %2 None %3 |
| %5 = OpLabel |
| %323 = OpVariable %8 Function |
| %329 = OpVariable %8 Function |
| %332 = OpVariable %8 Function |
| %335 = OpVariable %64 Function |
| %344 = OpVariable %8 Function |
| %317 = OpAccessChain %184 %183 %66 %18 |
| %318 = OpLoad %6 %317 |
| %320 = OpFOrdGreaterThanEqual %14 %318 %319 |
| OpSelectionMerge %322 None |
| OpBranchConditional %320 %321 %322 |
| %321 = OpLabel |
| %327 = OpLoad %324 %326 |
| %328 = OpVectorShuffle %7 %327 %327 0 1 |
| OpStore %323 %328 |
| %330 = OpLoad %7 %323 |
| OpStore %329 %330 |
| %331 = OpFunctionCall %9 %12 %329 |
| %333 = OpLoad %7 %323 |
| OpStore %332 %333 |
| %334 = OpFunctionCall %9 %12 %332 |
| OpStore %335 %336 |
| OpBranch %337 |
| %337 = OpLabel |
| OpLoopMerge %339 %340 None |
| OpBranch %341 |
| %341 = OpLabel |
| %342 = OpLoad %63 %335 |
| %343 = OpSGreaterThan %14 %342 %66 |
| OpBranchConditional %343 %338 %339 |
| %338 = OpLabel |
| %345 = OpLoad %7 %323 |
| OpStore %344 %345 |
| %346 = OpFunctionCall %9 %12 %344 |
| OpBranch %340 |
| %340 = OpLabel |
| %347 = OpLoad %63 %335 |
| %348 = OpISub %63 %347 %83 |
| OpStore %335 %348 |
| OpBranch %337 |
| %339 = OpLabel |
| OpBranch %322 |
| %322 = OpLabel |
| OpStore %350 %351 |
| OpReturn |
| OpFunctionEnd |
| %12 = OpFunction %9 None %10 |
| %11 = OpFunctionParameter %8 |
| %13 = OpLabel |
| %16 = OpVariable %15 Function |
| %29 = OpVariable %15 Function |
| %38 = OpVariable %15 Function |
| %46 = OpVariable %15 Function |
| %54 = OpVariable %15 Function |
| %65 = OpVariable %64 Function |
| %75 = OpVariable %64 Function |
| %87 = OpVariable %86 Function |
| %95 = OpVariable %94 Function |
| %100 = OpVariable %64 Function |
| %109 = OpVariable %64 Function |
| %117 = OpVariable %64 Function |
| %125 = OpVariable %64 Function |
| %133 = OpVariable %64 Function |
| %134 = OpVariable %64 Function |
| %150 = OpVariable %64 Function |
| %158 = OpVariable %64 Function |
| %214 = OpVariable %64 Function |
| %215 = OpVariable %64 Function |
| %216 = OpVariable %64 Function |
| %231 = OpVariable %64 Function |
| %235 = OpVariable %234 Function |
| %245 = OpVariable %64 Function |
| %253 = OpVariable %64 Function |
| %273 = OpVariable %64 Function |
| %284 = OpVariable %94 Function |
| %20 = OpAccessChain %19 %11 %18 |
| %21 = OpLoad %6 %20 |
| %23 = OpFOrdGreaterThan %14 %21 %22 |
| OpStore %16 %23 |
| %24 = OpLoad %14 %16 |
| OpSelectionMerge %26 None |
| OpBranchConditional %24 %25 %26 |
| %25 = OpLabel |
| OpReturnValue %27 |
| %26 = OpLabel |
| %31 = OpAccessChain %19 %11 %30 |
| %32 = OpLoad %6 %31 |
| %33 = OpFOrdLessThan %14 %32 %22 |
| OpStore %29 %33 |
| %34 = OpLoad %14 %29 |
| OpSelectionMerge %36 None |
| OpBranchConditional %34 %35 %36 |
| %35 = OpLabel |
| OpReturnValue %27 |
| %36 = OpLabel |
| %39 = OpAccessChain %19 %11 %30 |
| %40 = OpLoad %6 %39 |
| %41 = OpFOrdGreaterThan %14 %40 %22 |
| OpStore %38 %41 |
| %42 = OpLoad %14 %38 |
| OpSelectionMerge %44 None |
| OpBranchConditional %42 %43 %44 |
| %43 = OpLabel |
| OpReturnValue %27 |
| %44 = OpLabel |
| %47 = OpAccessChain %19 %11 %18 |
| %48 = OpLoad %6 %47 |
| %49 = OpFOrdLessThan %14 %48 %22 |
| OpStore %46 %49 |
| %50 = OpLoad %14 %46 |
| OpSelectionMerge %52 None |
| OpBranchConditional %50 %51 %52 |
| %51 = OpLabel |
| OpReturnValue %27 |
| %52 = OpLabel |
| %55 = OpAccessChain %19 %11 %18 |
| %56 = OpLoad %6 %55 |
| %57 = OpFAdd %6 %56 %22 |
| %58 = OpFOrdGreaterThan %14 %57 %22 |
| OpStore %54 %58 |
| %59 = OpLoad %14 %54 |
| OpSelectionMerge %61 None |
| OpBranchConditional %59 %60 %61 |
| %60 = OpLabel |
| OpReturnValue %27 |
| %61 = OpLabel |
| OpStore %65 %66 |
| OpBranch %67 |
| %67 = OpLabel |
| OpLoopMerge %69 %70 None |
| OpBranch %71 |
| %71 = OpLabel |
| %72 = OpLoad %63 %65 |
| %74 = OpSLessThan %14 %72 %73 |
| OpBranchConditional %74 %68 %69 |
| %68 = OpLabel |
| %76 = OpLoad %63 %75 |
| %78 = OpSGreaterThanEqual %14 %76 %77 |
| OpSelectionMerge %80 None |
| OpBranchConditional %78 %79 %80 |
| %79 = OpLabel |
| OpBranch %69 |
| %80 = OpLabel |
| %82 = OpLoad %63 %75 |
| %84 = OpIAdd %63 %82 %83 |
| OpStore %75 %84 |
| OpStore %87 %92 |
| OpStore %95 %99 |
| OpStore %100 %101 |
| OpBranch %102 |
| %102 = OpLabel |
| OpLoopMerge %104 %105 None |
| OpBranch %106 |
| %106 = OpLabel |
| %107 = OpLoad %63 %100 |
| %108 = OpSLessThan %14 %107 %73 |
| OpBranchConditional %108 %103 %104 |
| %103 = OpLabel |
| %110 = OpLoad %63 %109 |
| %111 = OpSGreaterThanEqual %14 %110 %77 |
| OpSelectionMerge %113 None |
| OpBranchConditional %111 %112 %113 |
| %112 = OpLabel |
| OpBranch %104 |
| %113 = OpLabel |
| %115 = OpLoad %63 %109 |
| %116 = OpIAdd %63 %115 %83 |
| OpStore %109 %116 |
| OpStore %117 %101 |
| OpBranch %118 |
| %118 = OpLabel |
| OpLoopMerge %120 %121 None |
| OpBranch %122 |
| %122 = OpLabel |
| %123 = OpLoad %63 %117 |
| %124 = OpSLessThan %14 %123 %73 |
| OpBranchConditional %124 %119 %120 |
| %119 = OpLabel |
| %126 = OpLoad %63 %125 |
| %127 = OpSGreaterThanEqual %14 %126 %77 |
| OpSelectionMerge %129 None |
| OpBranchConditional %127 %128 %129 |
| %128 = OpLabel |
| OpBranch %120 |
| %129 = OpLabel |
| %131 = OpLoad %63 %125 |
| %132 = OpIAdd %63 %131 %83 |
| OpStore %125 %132 |
| OpStore %133 %66 |
| OpStore %134 %66 |
| OpBranch %135 |
| %135 = OpLabel |
| OpLoopMerge %137 %138 None |
| OpBranch %139 |
| %139 = OpLabel |
| %140 = OpLoad %63 %134 |
| %142 = OpSLessThan %14 %140 %141 |
| OpBranchConditional %142 %136 %137 |
| %136 = OpLabel |
| %143 = OpLoad %63 %133 |
| %144 = OpSGreaterThanEqual %14 %143 %77 |
| OpSelectionMerge %146 None |
| OpBranchConditional %144 %145 %146 |
| %145 = OpLabel |
| OpBranch %137 |
| %146 = OpLabel |
| %148 = OpLoad %63 %133 |
| %149 = OpIAdd %63 %148 %83 |
| OpStore %133 %149 |
| OpStore %150 %66 |
| OpBranch %151 |
| %151 = OpLabel |
| OpLoopMerge %153 %154 None |
| OpBranch %155 |
| %155 = OpLabel |
| %156 = OpLoad %63 %150 |
| %157 = OpSLessThan %14 %156 %101 |
| OpBranchConditional %157 %152 %153 |
| %152 = OpLabel |
| %159 = OpLoad %63 %158 |
| %160 = OpSGreaterThanEqual %14 %159 %77 |
| OpSelectionMerge %162 None |
| OpBranchConditional %160 %161 %162 |
| %161 = OpLabel |
| OpBranch %153 |
| %162 = OpLabel |
| %164 = OpLoad %63 %158 |
| %165 = OpIAdd %63 %164 %83 |
| OpStore %158 %165 |
| %166 = OpLoad %63 %134 |
| %167 = OpSGreaterThanEqual %14 %166 %66 |
| %168 = OpLoad %63 %134 |
| %169 = OpSLessThan %14 %168 %141 |
| %170 = OpLogicalAnd %14 %167 %169 |
| %171 = OpLoad %63 %134 |
| %172 = OpSelect %63 %170 %171 %66 |
| %173 = OpLoad %63 %150 |
| %174 = OpSGreaterThanEqual %14 %173 %66 |
| %175 = OpLoad %63 %150 |
| %176 = OpSLessThan %14 %175 %141 |
| %177 = OpLogicalAnd %14 %174 %176 |
| %178 = OpLoad %63 %150 |
| %179 = OpSelect %63 %177 %178 %66 |
| %180 = OpAccessChain %19 %95 %172 %179 |
| OpStore %180 %22 |
| %185 = OpAccessChain %184 %183 %66 %30 |
| %186 = OpLoad %6 %185 |
| %187 = OpFOrdGreaterThan %14 %88 %186 |
| OpSelectionMerge %189 None |
| OpBranchConditional %187 %188 %190 |
| %188 = OpLabel |
| OpBranch %189 |
| %190 = OpLabel |
| %191 = OpLoad %63 %134 |
| %192 = OpSGreaterThanEqual %14 %191 %66 |
| %193 = OpLoad %63 %134 |
| %194 = OpSLessThan %14 %193 %73 |
| %195 = OpLogicalAnd %14 %192 %194 |
| %196 = OpLoad %63 %134 |
| %197 = OpSelect %63 %195 %196 %66 |
| %198 = OpLoad %63 %150 |
| %199 = OpSGreaterThanEqual %14 %198 %66 |
| %200 = OpLoad %63 %150 |
| %201 = OpSLessThan %14 %200 %101 |
| %202 = OpLogicalAnd %14 %199 %201 |
| %203 = OpLoad %63 %150 |
| %204 = OpSelect %63 %202 %203 %66 |
| %205 = OpAccessChain %19 %87 %197 %204 |
| OpStore %205 %22 |
| OpBranch %189 |
| %189 = OpLabel |
| OpBranch %154 |
| %154 = OpLabel |
| %206 = OpLoad %63 %150 |
| %207 = OpIAdd %63 %206 %83 |
| OpStore %150 %207 |
| OpBranch %151 |
| %153 = OpLabel |
| OpBranch %138 |
| %138 = OpLabel |
| %208 = OpLoad %63 %134 |
| %209 = OpIAdd %63 %208 %83 |
| OpStore %134 %209 |
| OpBranch %135 |
| %137 = OpLabel |
| OpBranch %121 |
| %121 = OpLabel |
| %210 = OpLoad %63 %117 |
| %211 = OpIAdd %63 %210 %83 |
| OpStore %117 %211 |
| OpBranch %118 |
| %120 = OpLabel |
| OpBranch %105 |
| %105 = OpLabel |
| %212 = OpLoad %63 %100 |
| %213 = OpIAdd %63 %212 %83 |
| OpStore %100 %213 |
| OpBranch %102 |
| %104 = OpLabel |
| OpStore %214 %66 |
| OpStore %215 %66 |
| OpStore %216 %101 |
| OpBranch %217 |
| %217 = OpLabel |
| OpLoopMerge %219 %220 None |
| OpBranch %221 |
| %221 = OpLabel |
| %222 = OpLoad %63 %216 |
| %223 = OpSLessThan %14 %222 %73 |
| OpBranchConditional %223 %218 %219 |
| %218 = OpLabel |
| %224 = OpLoad %63 %215 |
| %225 = OpSGreaterThanEqual %14 %224 %77 |
| OpSelectionMerge %227 None |
| OpBranchConditional %225 %226 %227 |
| %226 = OpLabel |
| OpBranch %219 |
| %227 = OpLabel |
| %229 = OpLoad %63 %215 |
| %230 = OpIAdd %63 %229 %83 |
| OpStore %215 %230 |
| OpStore %231 %101 |
| %236 = OpLoad %63 %214 |
| %237 = OpSGreaterThanEqual %14 %236 %66 |
| %238 = OpLoad %63 %214 |
| %240 = OpSLessThan %14 %238 %239 |
| %241 = OpLogicalAnd %14 %237 %240 |
| %242 = OpLoad %63 %214 |
| %243 = OpSelect %63 %241 %242 %66 |
| %244 = OpAccessChain %19 %235 %243 |
| OpStore %244 %88 |
| OpStore %245 %66 |
| OpBranch %246 |
| %246 = OpLabel |
| OpLoopMerge %248 %249 None |
| OpBranch %250 |
| %250 = OpLabel |
| %251 = OpLoad %63 %245 |
| %252 = OpSLessThan %14 %251 %83 |
| OpBranchConditional %252 %247 %248 |
| %247 = OpLabel |
| OpStore %253 %66 |
| OpBranch %254 |
| %254 = OpLabel |
| OpLoopMerge %256 %257 None |
| OpBranch %258 |
| %258 = OpLabel |
| %259 = OpLoad %63 %253 |
| %260 = OpLoad %63 %231 |
| %261 = OpSLessThan %14 %259 %260 |
| OpBranchConditional %261 %255 %256 |
| %255 = OpLabel |
| %262 = OpLoad %63 %214 |
| %263 = OpSGreaterThanEqual %14 %262 %66 |
| %264 = OpLoad %63 %214 |
| %265 = OpSLessThan %14 %264 %239 |
| %266 = OpLogicalAnd %14 %263 %265 |
| %267 = OpLoad %63 %214 |
| %268 = OpSelect %63 %266 %267 %66 |
| %269 = OpLoad %93 %95 |
| %270 = OpTranspose %93 %269 |
| %271 = OpLoad %63 %245 |
| %272 = OpSLessThan %14 %271 %141 |
| OpSelectionMerge %275 None |
| OpBranchConditional %272 %274 %276 |
| %274 = OpLabel |
| OpStore %273 %83 |
| OpBranch %275 |
| %276 = OpLabel |
| %277 = OpAccessChain %184 %183 %66 %18 |
| %278 = OpLoad %6 %277 |
| %279 = OpConvertFToS %63 %278 |
| OpStore %273 %279 |
| OpBranch %275 |
| %275 = OpLabel |
| %280 = OpLoad %63 %273 |
| %281 = OpLoad %63 %253 |
| %282 = OpSLessThan %14 %281 %141 |
| %283 = OpSelect %63 %282 %83 %66 |
| OpStore %284 %270 |
| %285 = OpAccessChain %19 %284 %280 %283 |
| %286 = OpLoad %6 %285 |
| %287 = OpAccessChain %19 %235 %268 |
| %288 = OpLoad %6 %287 |
| %289 = OpFAdd %6 %288 %286 |
| %290 = OpAccessChain %19 %235 %268 |
| OpStore %290 %289 |
| %291 = OpLoad %63 %214 |
| %292 = OpSGreaterThanEqual %14 %291 %66 |
| %293 = OpLoad %63 %214 |
| %294 = OpSLessThan %14 %293 %239 |
| %295 = OpLogicalAnd %14 %292 %294 |
| %296 = OpLoad %63 %214 |
| %297 = OpSelect %63 %295 %296 %66 |
| %298 = OpLoad %63 %253 |
| %299 = OpAccessChain %19 %87 %83 %298 |
| %300 = OpLoad %6 %299 |
| %301 = OpAccessChain %19 %235 %297 |
| %302 = OpLoad %6 %301 |
| %303 = OpFAdd %6 %302 %300 |
| %304 = OpAccessChain %19 %235 %297 |
| OpStore %304 %303 |
| OpBranch %257 |
| %257 = OpLabel |
| %305 = OpLoad %63 %253 |
| %306 = OpIAdd %63 %305 %83 |
| OpStore %253 %306 |
| OpBranch %254 |
| %256 = OpLabel |
| OpBranch %249 |
| %249 = OpLabel |
| %307 = OpLoad %63 %245 |
| %308 = OpIAdd %63 %307 %83 |
| OpStore %245 %308 |
| OpBranch %246 |
| %248 = OpLabel |
| %309 = OpLoad %63 %214 |
| %310 = OpIAdd %63 %309 %83 |
| OpStore %214 %310 |
| OpBranch %220 |
| %220 = OpLabel |
| %311 = OpLoad %63 %216 |
| %312 = OpIAdd %63 %311 %83 |
| OpStore %216 %312 |
| OpBranch %217 |
| %219 = OpLabel |
| OpBranch %70 |
| %70 = OpLabel |
| %313 = OpLoad %63 %65 |
| %314 = OpIAdd %63 %313 %83 |
| OpStore %65 %314 |
| OpBranch %67 |
| %69 = OpLabel |
| OpReturnValue %27 |
| OpFunctionEnd |
| END |
| |
| # uniforms for variant |
| |
| # injectionSwitch |
| BUFFER variant_injectionSwitch DATA_TYPE vec2<float> DATA |
| 0.0 1.0 |
| 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 |
| BIND BUFFER variant_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 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 |