1e5c31af7Sopenharmony_ci#!amber 2e5c31af7Sopenharmony_ci 3e5c31af7Sopenharmony_ci# Copyright 2020 Google LLC 4e5c31af7Sopenharmony_ci# 5e5c31af7Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 6e5c31af7Sopenharmony_ci# you may not use this file except in compliance with the License. 7e5c31af7Sopenharmony_ci# You may obtain a copy of the License at 8e5c31af7Sopenharmony_ci# 9e5c31af7Sopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 10e5c31af7Sopenharmony_ci# 11e5c31af7Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software 12e5c31af7Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 13e5c31af7Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14e5c31af7Sopenharmony_ci# See the License for the specific language governing permissions and 15e5c31af7Sopenharmony_ci# limitations under the License. 16e5c31af7Sopenharmony_ci 17e5c31af7Sopenharmony_ci 18e5c31af7Sopenharmony_ci# A test for a bug found by GraphicsFuzz. 19e5c31af7Sopenharmony_ci 20e5c31af7Sopenharmony_ci# Short description: A fragment shader that compares a float and a coordinate 21e5c31af7Sopenharmony_ci 22e5c31af7Sopenharmony_ci# The test passes because shader always writes red. 23e5c31af7Sopenharmony_ci 24e5c31af7Sopenharmony_ci# Optimized using spirv-opt with the following arguments: 25e5c31af7Sopenharmony_ci# '--redundancy-elimination' 26e5c31af7Sopenharmony_ci# '--redundancy-elimination' 27e5c31af7Sopenharmony_ci# '--private-to-local' 28e5c31af7Sopenharmony_ci# '--eliminate-dead-inserts' 29e5c31af7Sopenharmony_ci# '--eliminate-dead-code-aggressive' 30e5c31af7Sopenharmony_ci# '--combine-access-chains' 31e5c31af7Sopenharmony_ci# '--reduce-load-size' 32e5c31af7Sopenharmony_ci# '--inline-entry-points-exhaustive' 33e5c31af7Sopenharmony_ci# '--vector-dce' 34e5c31af7Sopenharmony_ci# '--eliminate-dead-branches' 35e5c31af7Sopenharmony_ci# '--merge-blocks' 36e5c31af7Sopenharmony_ci# '--copy-propagate-arrays' 37e5c31af7Sopenharmony_ci# '--vector-dce' 38e5c31af7Sopenharmony_ci# '--eliminate-dead-branches' 39e5c31af7Sopenharmony_ci# '--merge-blocks' 40e5c31af7Sopenharmony_ci# '--eliminate-dead-branches' 41e5c31af7Sopenharmony_ci# '--merge-return' 42e5c31af7Sopenharmony_ci# '--combine-access-chains' 43e5c31af7Sopenharmony_ci# '--eliminate-dead-inserts' 44e5c31af7Sopenharmony_ci# '--eliminate-dead-branches' 45e5c31af7Sopenharmony_ci# '--if-conversion' 46e5c31af7Sopenharmony_ci# '--inline-entry-points-exhaustive' 47e5c31af7Sopenharmony_ci# '--simplify-instructions' 48e5c31af7Sopenharmony_ci# '--eliminate-local-single-store' 49e5c31af7Sopenharmony_ci# '--eliminate-dead-branches' 50e5c31af7Sopenharmony_ci# '--eliminate-local-single-block' 51e5c31af7Sopenharmony_ci# '--eliminate-local-multi-store' 52e5c31af7Sopenharmony_ci# '--convert-local-access-chains' 53e5c31af7Sopenharmony_ci# '--ccp' 54e5c31af7Sopenharmony_ci# spirv-opt commit hash: ab7ac60f14ae66006bed5c989a2cfd4c4881704c 55e5c31af7Sopenharmony_ci 56e5c31af7Sopenharmony_ci 57e5c31af7Sopenharmony_ci 58e5c31af7Sopenharmony_ciSHADER vertex variant_vertex_shader PASSTHROUGH 59e5c31af7Sopenharmony_ci 60e5c31af7Sopenharmony_ci# variant_fragment_shader is derived from the following GLSL: 61e5c31af7Sopenharmony_ci# #version 310 es 62e5c31af7Sopenharmony_ci# precision highp float; 63e5c31af7Sopenharmony_ci# precision highp int; 64e5c31af7Sopenharmony_ci# 65e5c31af7Sopenharmony_ci# layout(set = 0, binding = 0) uniform buf0 66e5c31af7Sopenharmony_ci# { 67e5c31af7Sopenharmony_ci# vec2 injectionSwitch; 68e5c31af7Sopenharmony_ci# }; 69e5c31af7Sopenharmony_ci# layout(location = 0) out vec4 _GLF_color; 70e5c31af7Sopenharmony_ci# 71e5c31af7Sopenharmony_ci# // Always returns 5. 72e5c31af7Sopenharmony_ci# float func() 73e5c31af7Sopenharmony_ci# { 74e5c31af7Sopenharmony_ci# float zero = 0.0; 75e5c31af7Sopenharmony_ci# bool alwaysFalse = gl_FragCoord.x < 0.0; 76e5c31af7Sopenharmony_ci# 77e5c31af7Sopenharmony_ci# do 78e5c31af7Sopenharmony_ci# { 79e5c31af7Sopenharmony_ci# if (injectionSwitch.x < injectionSwitch.y) // Always true 80e5c31af7Sopenharmony_ci# { 81e5c31af7Sopenharmony_ci# while (int(zero) <= bitfieldInsert(101, 0, 0, 0)) 82e5c31af7Sopenharmony_ci# { 83e5c31af7Sopenharmony_ci# if (zero <= gl_FragCoord.x) 84e5c31af7Sopenharmony_ci# return 5.0; // Always returns here 85e5c31af7Sopenharmony_ci# 86e5c31af7Sopenharmony_ci# zero++; 87e5c31af7Sopenharmony_ci# } 88e5c31af7Sopenharmony_ci# } 89e5c31af7Sopenharmony_ci# } while (alwaysFalse); 90e5c31af7Sopenharmony_ci# 91e5c31af7Sopenharmony_ci# for (int u = 0; u < 1; u++) 92e5c31af7Sopenharmony_ci# { 93e5c31af7Sopenharmony_ci# if (!alwaysFalse) 94e5c31af7Sopenharmony_ci# return zero; 95e5c31af7Sopenharmony_ci# } 96e5c31af7Sopenharmony_ci# 97e5c31af7Sopenharmony_ci# return 0.0; 98e5c31af7Sopenharmony_ci# } 99e5c31af7Sopenharmony_ci# 100e5c31af7Sopenharmony_ci# void main() 101e5c31af7Sopenharmony_ci# { 102e5c31af7Sopenharmony_ci# float c = 0.0; 103e5c31af7Sopenharmony_ci# for (int i = 0; i < 1; i++) 104e5c31af7Sopenharmony_ci# { 105e5c31af7Sopenharmony_ci# if (!(gl_FragCoord.x < 0.0)) // Always true 106e5c31af7Sopenharmony_ci# c = func(); 107e5c31af7Sopenharmony_ci# } 108e5c31af7Sopenharmony_ci# 109e5c31af7Sopenharmony_ci# if (c == 5.0) 110e5c31af7Sopenharmony_ci# _GLF_color = vec4(1, 0, 0, 1); 111e5c31af7Sopenharmony_ci# else 112e5c31af7Sopenharmony_ci# _GLF_color = vec4(0); 113e5c31af7Sopenharmony_ci# } 114e5c31af7Sopenharmony_ciSHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 115e5c31af7Sopenharmony_ci; SPIR-V 116e5c31af7Sopenharmony_ci; Version: 1.0 117e5c31af7Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 8 118e5c31af7Sopenharmony_ci; Bound: 261 119e5c31af7Sopenharmony_ci; Schema: 0 120e5c31af7Sopenharmony_ci OpCapability Shader 121e5c31af7Sopenharmony_ci %1 = OpExtInstImport "GLSL.std.450" 122e5c31af7Sopenharmony_ci OpMemoryModel Logical GLSL450 123e5c31af7Sopenharmony_ci OpEntryPoint Fragment %4 "main" %18 %109 124e5c31af7Sopenharmony_ci OpExecutionMode %4 OriginUpperLeft 125e5c31af7Sopenharmony_ci OpSource ESSL 310 126e5c31af7Sopenharmony_ci OpName %4 "main" 127e5c31af7Sopenharmony_ci OpName %8 "func(" 128e5c31af7Sopenharmony_ci OpName %11 "zero" 129e5c31af7Sopenharmony_ci OpName %15 "alwaysFalse" 130e5c31af7Sopenharmony_ci OpName %18 "gl_FragCoord" 131e5c31af7Sopenharmony_ci OpName %30 "buf0" 132e5c31af7Sopenharmony_ci OpMemberName %30 0 "injectionSwitch" 133e5c31af7Sopenharmony_ci OpName %32 "" 134e5c31af7Sopenharmony_ci OpName %67 "u" 135e5c31af7Sopenharmony_ci OpName %86 "c" 136e5c31af7Sopenharmony_ci OpName %87 "i" 137e5c31af7Sopenharmony_ci OpName %109 "_GLF_color" 138e5c31af7Sopenharmony_ci OpDecorate %18 BuiltIn FragCoord 139e5c31af7Sopenharmony_ci OpMemberDecorate %30 0 Offset 0 140e5c31af7Sopenharmony_ci OpDecorate %30 Block 141e5c31af7Sopenharmony_ci OpDecorate %32 DescriptorSet 0 142e5c31af7Sopenharmony_ci OpDecorate %32 Binding 0 143e5c31af7Sopenharmony_ci OpDecorate %109 Location 0 144e5c31af7Sopenharmony_ci %2 = OpTypeVoid 145e5c31af7Sopenharmony_ci %3 = OpTypeFunction %2 146e5c31af7Sopenharmony_ci %6 = OpTypeFloat 32 147e5c31af7Sopenharmony_ci %7 = OpTypeFunction %6 148e5c31af7Sopenharmony_ci %10 = OpTypePointer Function %6 149e5c31af7Sopenharmony_ci %12 = OpConstant %6 0 150e5c31af7Sopenharmony_ci %13 = OpTypeBool 151e5c31af7Sopenharmony_ci %14 = OpTypePointer Function %13 152e5c31af7Sopenharmony_ci %16 = OpTypeVector %6 4 153e5c31af7Sopenharmony_ci %17 = OpTypePointer Input %16 154e5c31af7Sopenharmony_ci %18 = OpVariable %17 Input 155e5c31af7Sopenharmony_ci %19 = OpTypeInt 32 0 156e5c31af7Sopenharmony_ci %20 = OpConstant %19 0 157e5c31af7Sopenharmony_ci %21 = OpTypePointer Input %6 158e5c31af7Sopenharmony_ci %29 = OpTypeVector %6 2 159e5c31af7Sopenharmony_ci %30 = OpTypeStruct %29 160e5c31af7Sopenharmony_ci %31 = OpTypePointer Uniform %30 161e5c31af7Sopenharmony_ci %32 = OpVariable %31 Uniform 162e5c31af7Sopenharmony_ci %33 = OpTypeInt 32 1 163e5c31af7Sopenharmony_ci %34 = OpConstant %33 0 164e5c31af7Sopenharmony_ci %35 = OpTypePointer Uniform %6 165e5c31af7Sopenharmony_ci %38 = OpConstant %19 1 166e5c31af7Sopenharmony_ci %51 = OpConstant %33 101 167e5c31af7Sopenharmony_ci %60 = OpConstant %6 5 168e5c31af7Sopenharmony_ci %63 = OpConstant %6 1 169e5c31af7Sopenharmony_ci %66 = OpTypePointer Function %33 170e5c31af7Sopenharmony_ci %74 = OpConstant %33 1 171e5c31af7Sopenharmony_ci %108 = OpTypePointer Output %16 172e5c31af7Sopenharmony_ci %109 = OpVariable %108 Output 173e5c31af7Sopenharmony_ci %110 = OpConstantComposite %16 %63 %12 %12 %63 174e5c31af7Sopenharmony_ci %112 = OpConstantComposite %16 %12 %12 %12 %12 175e5c31af7Sopenharmony_ci %119 = OpConstantFalse %13 176e5c31af7Sopenharmony_ci %121 = OpConstantTrue %13 177e5c31af7Sopenharmony_ci %211 = OpUndef %6 178e5c31af7Sopenharmony_ci %226 = OpUndef %13 179e5c31af7Sopenharmony_ci %228 = OpUndef %33 180e5c31af7Sopenharmony_ci %256 = OpUndef %6 181e5c31af7Sopenharmony_ci %260 = OpUndef %13 182e5c31af7Sopenharmony_ci %4 = OpFunction %2 None %3 183e5c31af7Sopenharmony_ci %5 = OpLabel 184e5c31af7Sopenharmony_ci %128 = OpVariable %14 Function %119 185e5c31af7Sopenharmony_ci %129 = OpVariable %10 Function 186e5c31af7Sopenharmony_ci %130 = OpVariable %10 Function 187e5c31af7Sopenharmony_ci %131 = OpVariable %14 Function 188e5c31af7Sopenharmony_ci %132 = OpVariable %66 Function 189e5c31af7Sopenharmony_ci %133 = OpVariable %10 Function 190e5c31af7Sopenharmony_ci %86 = OpVariable %10 Function 191e5c31af7Sopenharmony_ci %87 = OpVariable %66 Function 192e5c31af7Sopenharmony_ci OpStore %86 %12 193e5c31af7Sopenharmony_ci OpStore %87 %34 194e5c31af7Sopenharmony_ci OpBranch %88 195e5c31af7Sopenharmony_ci %88 = OpLabel 196e5c31af7Sopenharmony_ci %210 = OpPhi %6 %211 %5 %227 %91 197e5c31af7Sopenharmony_ci %188 = OpPhi %6 %12 %5 %225 %91 198e5c31af7Sopenharmony_ci %187 = OpPhi %33 %34 %5 %103 %91 199e5c31af7Sopenharmony_ci %94 = OpSLessThan %13 %187 %74 200e5c31af7Sopenharmony_ci OpLoopMerge %90 %91 None 201e5c31af7Sopenharmony_ci OpBranchConditional %94 %89 %90 202e5c31af7Sopenharmony_ci %89 = OpLabel 203e5c31af7Sopenharmony_ci %95 = OpAccessChain %21 %18 %20 204e5c31af7Sopenharmony_ci %96 = OpLoad %6 %95 205e5c31af7Sopenharmony_ci %97 = OpFOrdLessThan %13 %96 %12 206e5c31af7Sopenharmony_ci %98 = OpLogicalNot %13 %97 207e5c31af7Sopenharmony_ci OpSelectionMerge %100 None 208e5c31af7Sopenharmony_ci OpBranchConditional %98 %99 %100 209e5c31af7Sopenharmony_ci %99 = OpLabel 210e5c31af7Sopenharmony_ci OpStore %128 %119 211e5c31af7Sopenharmony_ci OpBranch %134 212e5c31af7Sopenharmony_ci %134 = OpLabel 213e5c31af7Sopenharmony_ci %221 = OpPhi %33 %187 %99 %228 %136 214e5c31af7Sopenharmony_ci %209 = OpPhi %6 %210 %99 %211 %136 215e5c31af7Sopenharmony_ci %194 = OpPhi %13 %119 %99 %226 %136 216e5c31af7Sopenharmony_ci OpLoopMerge %135 %136 None 217e5c31af7Sopenharmony_ci OpBranch %137 218e5c31af7Sopenharmony_ci %137 = OpLabel 219e5c31af7Sopenharmony_ci OpStore %130 %12 220e5c31af7Sopenharmony_ci %138 = OpAccessChain %21 %18 %20 221e5c31af7Sopenharmony_ci %139 = OpLoad %6 %138 222e5c31af7Sopenharmony_ci %140 = OpFOrdLessThan %13 %139 %12 223e5c31af7Sopenharmony_ci OpStore %131 %140 224e5c31af7Sopenharmony_ci OpBranch %141 225e5c31af7Sopenharmony_ci %141 = OpLabel 226e5c31af7Sopenharmony_ci %193 = OpPhi %13 %119 %137 %196 %143 227e5c31af7Sopenharmony_ci %190 = OpPhi %6 %12 %137 %201 %143 228e5c31af7Sopenharmony_ci %220 = OpPhi %33 %221 %137 %222 %143 229e5c31af7Sopenharmony_ci %208 = OpPhi %6 %209 %137 %212 %143 230e5c31af7Sopenharmony_ci OpLoopMerge %142 %143 None 231e5c31af7Sopenharmony_ci OpBranch %144 232e5c31af7Sopenharmony_ci %144 = OpLabel 233e5c31af7Sopenharmony_ci %145 = OpAccessChain %35 %32 %34 %20 234e5c31af7Sopenharmony_ci %146 = OpLoad %6 %145 235e5c31af7Sopenharmony_ci %147 = OpAccessChain %35 %32 %34 %38 236e5c31af7Sopenharmony_ci %148 = OpLoad %6 %147 237e5c31af7Sopenharmony_ci %149 = OpFOrdLessThan %13 %146 %148 238e5c31af7Sopenharmony_ci OpSelectionMerge %150 None 239e5c31af7Sopenharmony_ci OpBranchConditional %149 %151 %150 240e5c31af7Sopenharmony_ci %151 = OpLabel 241e5c31af7Sopenharmony_ci OpBranch %152 242e5c31af7Sopenharmony_ci %152 = OpLabel 243e5c31af7Sopenharmony_ci %189 = OpPhi %6 %190 %151 %165 %158 244e5c31af7Sopenharmony_ci %154 = OpConvertFToS %33 %189 245e5c31af7Sopenharmony_ci %155 = OpBitFieldInsert %33 %51 %34 %34 %34 246e5c31af7Sopenharmony_ci %156 = OpSLessThanEqual %13 %154 %155 247e5c31af7Sopenharmony_ci OpLoopMerge %157 %158 None 248e5c31af7Sopenharmony_ci OpBranchConditional %156 %159 %157 249e5c31af7Sopenharmony_ci %159 = OpLabel 250e5c31af7Sopenharmony_ci %161 = OpFOrdLessThanEqual %13 %189 %139 251e5c31af7Sopenharmony_ci OpSelectionMerge %162 None 252e5c31af7Sopenharmony_ci OpBranchConditional %161 %163 %162 253e5c31af7Sopenharmony_ci %163 = OpLabel 254e5c31af7Sopenharmony_ci OpStore %128 %121 255e5c31af7Sopenharmony_ci OpStore %129 %60 256e5c31af7Sopenharmony_ci OpBranch %157 257e5c31af7Sopenharmony_ci %162 = OpLabel 258e5c31af7Sopenharmony_ci %165 = OpFAdd %6 %189 %63 259e5c31af7Sopenharmony_ci OpStore %130 %165 260e5c31af7Sopenharmony_ci OpBranch %158 261e5c31af7Sopenharmony_ci %158 = OpLabel 262e5c31af7Sopenharmony_ci OpBranch %152 263e5c31af7Sopenharmony_ci %157 = OpLabel 264e5c31af7Sopenharmony_ci %206 = OpPhi %6 %208 %152 %60 %163 265e5c31af7Sopenharmony_ci %191 = OpPhi %13 %193 %152 %121 %163 266e5c31af7Sopenharmony_ci OpSelectionMerge %167 None 267e5c31af7Sopenharmony_ci OpBranchConditional %191 %142 %167 268e5c31af7Sopenharmony_ci %167 = OpLabel 269e5c31af7Sopenharmony_ci OpBranch %150 270e5c31af7Sopenharmony_ci %150 = OpLabel 271e5c31af7Sopenharmony_ci %222 = OpPhi %33 %220 %144 %220 %167 272e5c31af7Sopenharmony_ci %212 = OpPhi %6 %208 %144 %206 %167 273e5c31af7Sopenharmony_ci %201 = OpPhi %6 %190 %144 %189 %167 274e5c31af7Sopenharmony_ci %196 = OpPhi %13 %193 %144 %191 %167 275e5c31af7Sopenharmony_ci OpBranch %143 276e5c31af7Sopenharmony_ci %143 = OpLabel 277e5c31af7Sopenharmony_ci OpBranchConditional %140 %141 %142 278e5c31af7Sopenharmony_ci %142 = OpLabel 279e5c31af7Sopenharmony_ci %217 = OpPhi %33 %220 %157 %222 %143 280e5c31af7Sopenharmony_ci %205 = OpPhi %6 %206 %157 %212 %143 281e5c31af7Sopenharmony_ci %199 = OpPhi %6 %189 %157 %201 %143 282e5c31af7Sopenharmony_ci %195 = OpPhi %13 %191 %157 %196 %143 283e5c31af7Sopenharmony_ci OpSelectionMerge %170 None 284e5c31af7Sopenharmony_ci OpBranchConditional %195 %135 %170 285e5c31af7Sopenharmony_ci %170 = OpLabel 286e5c31af7Sopenharmony_ci OpStore %132 %34 287e5c31af7Sopenharmony_ci OpBranch %171 288e5c31af7Sopenharmony_ci %171 = OpLabel 289e5c31af7Sopenharmony_ci %197 = OpPhi %33 %34 %170 %183 %175 290e5c31af7Sopenharmony_ci %173 = OpSLessThan %13 %197 %74 291e5c31af7Sopenharmony_ci OpLoopMerge %174 %175 None 292e5c31af7Sopenharmony_ci OpBranchConditional %173 %176 %174 293e5c31af7Sopenharmony_ci %176 = OpLabel 294e5c31af7Sopenharmony_ci %178 = OpLogicalNot %13 %140 295e5c31af7Sopenharmony_ci OpSelectionMerge %179 None 296e5c31af7Sopenharmony_ci OpBranchConditional %178 %180 %179 297e5c31af7Sopenharmony_ci %180 = OpLabel 298e5c31af7Sopenharmony_ci OpStore %128 %121 299e5c31af7Sopenharmony_ci OpStore %129 %199 300e5c31af7Sopenharmony_ci OpBranch %174 301e5c31af7Sopenharmony_ci %179 = OpLabel 302e5c31af7Sopenharmony_ci OpBranch %175 303e5c31af7Sopenharmony_ci %175 = OpLabel 304e5c31af7Sopenharmony_ci %183 = OpIAdd %33 %197 %74 305e5c31af7Sopenharmony_ci OpStore %132 %183 306e5c31af7Sopenharmony_ci OpBranch %171 307e5c31af7Sopenharmony_ci %174 = OpLabel 308e5c31af7Sopenharmony_ci %213 = OpPhi %6 %205 %171 %199 %180 309e5c31af7Sopenharmony_ci %202 = OpPhi %13 %195 %171 %121 %180 310e5c31af7Sopenharmony_ci OpSelectionMerge %185 None 311e5c31af7Sopenharmony_ci OpBranchConditional %202 %135 %185 312e5c31af7Sopenharmony_ci %185 = OpLabel 313e5c31af7Sopenharmony_ci OpStore %128 %121 314e5c31af7Sopenharmony_ci OpStore %129 %12 315e5c31af7Sopenharmony_ci OpBranch %135 316e5c31af7Sopenharmony_ci %136 = OpLabel 317e5c31af7Sopenharmony_ci OpBranch %134 318e5c31af7Sopenharmony_ci %135 = OpLabel 319e5c31af7Sopenharmony_ci %204 = OpPhi %6 %205 %142 %213 %174 %12 %185 320e5c31af7Sopenharmony_ci OpStore %133 %204 321e5c31af7Sopenharmony_ci OpStore %86 %204 322e5c31af7Sopenharmony_ci OpBranch %100 323e5c31af7Sopenharmony_ci %100 = OpLabel 324e5c31af7Sopenharmony_ci %227 = OpPhi %6 %210 %89 %204 %135 325e5c31af7Sopenharmony_ci %225 = OpPhi %6 %188 %89 %204 %135 326e5c31af7Sopenharmony_ci %215 = OpPhi %33 %187 %89 %217 %135 327e5c31af7Sopenharmony_ci OpBranch %91 328e5c31af7Sopenharmony_ci %91 = OpLabel 329e5c31af7Sopenharmony_ci %103 = OpIAdd %33 %215 %74 330e5c31af7Sopenharmony_ci OpStore %87 %103 331e5c31af7Sopenharmony_ci OpBranch %88 332e5c31af7Sopenharmony_ci %90 = OpLabel 333e5c31af7Sopenharmony_ci %105 = OpFOrdEqual %13 %188 %60 334e5c31af7Sopenharmony_ci OpSelectionMerge %107 None 335e5c31af7Sopenharmony_ci OpBranchConditional %105 %106 %111 336e5c31af7Sopenharmony_ci %106 = OpLabel 337e5c31af7Sopenharmony_ci OpStore %109 %110 338e5c31af7Sopenharmony_ci OpBranch %107 339e5c31af7Sopenharmony_ci %111 = OpLabel 340e5c31af7Sopenharmony_ci OpStore %109 %112 341e5c31af7Sopenharmony_ci OpBranch %107 342e5c31af7Sopenharmony_ci %107 = OpLabel 343e5c31af7Sopenharmony_ci OpReturn 344e5c31af7Sopenharmony_ci OpFunctionEnd 345e5c31af7Sopenharmony_ci %8 = OpFunction %6 None %7 346e5c31af7Sopenharmony_ci %9 = OpLabel 347e5c31af7Sopenharmony_ci %120 = OpVariable %14 Function %119 348e5c31af7Sopenharmony_ci %114 = OpVariable %10 Function 349e5c31af7Sopenharmony_ci %11 = OpVariable %10 Function 350e5c31af7Sopenharmony_ci %15 = OpVariable %14 Function 351e5c31af7Sopenharmony_ci %67 = OpVariable %66 Function 352e5c31af7Sopenharmony_ci OpBranch %116 353e5c31af7Sopenharmony_ci %116 = OpLabel 354e5c31af7Sopenharmony_ci %234 = OpPhi %13 %119 %9 %260 %118 355e5c31af7Sopenharmony_ci OpLoopMerge %113 %118 None 356e5c31af7Sopenharmony_ci OpBranch %117 357e5c31af7Sopenharmony_ci %117 = OpLabel 358e5c31af7Sopenharmony_ci OpStore %11 %12 359e5c31af7Sopenharmony_ci %22 = OpAccessChain %21 %18 %20 360e5c31af7Sopenharmony_ci %23 = OpLoad %6 %22 361e5c31af7Sopenharmony_ci %24 = OpFOrdLessThan %13 %23 %12 362e5c31af7Sopenharmony_ci OpStore %15 %24 363e5c31af7Sopenharmony_ci OpBranch %25 364e5c31af7Sopenharmony_ci %25 = OpLabel 365e5c31af7Sopenharmony_ci %233 = OpPhi %13 %234 %117 %240 %28 366e5c31af7Sopenharmony_ci %230 = OpPhi %6 %12 %117 %247 %28 367e5c31af7Sopenharmony_ci %254 = OpPhi %6 %256 %117 %257 %28 368e5c31af7Sopenharmony_ci OpLoopMerge %27 %28 None 369e5c31af7Sopenharmony_ci OpBranch %26 370e5c31af7Sopenharmony_ci %26 = OpLabel 371e5c31af7Sopenharmony_ci %36 = OpAccessChain %35 %32 %34 %20 372e5c31af7Sopenharmony_ci %37 = OpLoad %6 %36 373e5c31af7Sopenharmony_ci %39 = OpAccessChain %35 %32 %34 %38 374e5c31af7Sopenharmony_ci %40 = OpLoad %6 %39 375e5c31af7Sopenharmony_ci %41 = OpFOrdLessThan %13 %37 %40 376e5c31af7Sopenharmony_ci OpSelectionMerge %43 None 377e5c31af7Sopenharmony_ci OpBranchConditional %41 %42 %43 378e5c31af7Sopenharmony_ci %42 = OpLabel 379e5c31af7Sopenharmony_ci OpBranch %44 380e5c31af7Sopenharmony_ci %44 = OpLabel 381e5c31af7Sopenharmony_ci %229 = OpPhi %6 %230 %42 %64 %47 382e5c31af7Sopenharmony_ci %50 = OpConvertFToS %33 %229 383e5c31af7Sopenharmony_ci %52 = OpBitFieldInsert %33 %51 %34 %34 %34 384e5c31af7Sopenharmony_ci %53 = OpSLessThanEqual %13 %50 %52 385e5c31af7Sopenharmony_ci OpLoopMerge %46 %47 None 386e5c31af7Sopenharmony_ci OpBranchConditional %53 %45 %46 387e5c31af7Sopenharmony_ci %45 = OpLabel 388e5c31af7Sopenharmony_ci %57 = OpFOrdLessThanEqual %13 %229 %23 389e5c31af7Sopenharmony_ci OpSelectionMerge %59 None 390e5c31af7Sopenharmony_ci OpBranchConditional %57 %58 %59 391e5c31af7Sopenharmony_ci %58 = OpLabel 392e5c31af7Sopenharmony_ci OpStore %120 %121 393e5c31af7Sopenharmony_ci OpStore %114 %60 394e5c31af7Sopenharmony_ci OpBranch %46 395e5c31af7Sopenharmony_ci %59 = OpLabel 396e5c31af7Sopenharmony_ci %64 = OpFAdd %6 %229 %63 397e5c31af7Sopenharmony_ci OpStore %11 %64 398e5c31af7Sopenharmony_ci OpBranch %47 399e5c31af7Sopenharmony_ci %47 = OpLabel 400e5c31af7Sopenharmony_ci OpBranch %44 401e5c31af7Sopenharmony_ci %46 = OpLabel 402e5c31af7Sopenharmony_ci %252 = OpPhi %6 %254 %44 %60 %58 403e5c31af7Sopenharmony_ci %231 = OpPhi %13 %233 %44 %121 %58 404e5c31af7Sopenharmony_ci OpSelectionMerge %122 None 405e5c31af7Sopenharmony_ci OpBranchConditional %231 %27 %122 406e5c31af7Sopenharmony_ci %122 = OpLabel 407e5c31af7Sopenharmony_ci OpBranch %43 408e5c31af7Sopenharmony_ci %43 = OpLabel 409e5c31af7Sopenharmony_ci %257 = OpPhi %6 %254 %26 %252 %122 410e5c31af7Sopenharmony_ci %247 = OpPhi %6 %230 %26 %229 %122 411e5c31af7Sopenharmony_ci %240 = OpPhi %13 %233 %26 %231 %122 412e5c31af7Sopenharmony_ci OpBranch %28 413e5c31af7Sopenharmony_ci %28 = OpLabel 414e5c31af7Sopenharmony_ci OpBranchConditional %24 %25 %27 415e5c31af7Sopenharmony_ci %27 = OpLabel 416e5c31af7Sopenharmony_ci %251 = OpPhi %6 %252 %46 %257 %28 417e5c31af7Sopenharmony_ci %245 = OpPhi %6 %229 %46 %247 %28 418e5c31af7Sopenharmony_ci %239 = OpPhi %13 %231 %46 %240 %28 419e5c31af7Sopenharmony_ci OpSelectionMerge %124 None 420e5c31af7Sopenharmony_ci OpBranchConditional %239 %113 %124 421e5c31af7Sopenharmony_ci %124 = OpLabel 422e5c31af7Sopenharmony_ci OpStore %67 %34 423e5c31af7Sopenharmony_ci OpBranch %68 424e5c31af7Sopenharmony_ci %68 = OpLabel 425e5c31af7Sopenharmony_ci %241 = OpPhi %33 %34 %124 %83 %71 426e5c31af7Sopenharmony_ci %75 = OpSLessThan %13 %241 %74 427e5c31af7Sopenharmony_ci OpLoopMerge %70 %71 None 428e5c31af7Sopenharmony_ci OpBranchConditional %75 %69 %70 429e5c31af7Sopenharmony_ci %69 = OpLabel 430e5c31af7Sopenharmony_ci %77 = OpLogicalNot %13 %24 431e5c31af7Sopenharmony_ci OpSelectionMerge %79 None 432e5c31af7Sopenharmony_ci OpBranchConditional %77 %78 %79 433e5c31af7Sopenharmony_ci %78 = OpLabel 434e5c31af7Sopenharmony_ci OpStore %120 %121 435e5c31af7Sopenharmony_ci OpStore %114 %245 436e5c31af7Sopenharmony_ci OpBranch %70 437e5c31af7Sopenharmony_ci %79 = OpLabel 438e5c31af7Sopenharmony_ci OpBranch %71 439e5c31af7Sopenharmony_ci %71 = OpLabel 440e5c31af7Sopenharmony_ci %83 = OpIAdd %33 %241 %74 441e5c31af7Sopenharmony_ci OpStore %67 %83 442e5c31af7Sopenharmony_ci OpBranch %68 443e5c31af7Sopenharmony_ci %70 = OpLabel 444e5c31af7Sopenharmony_ci %258 = OpPhi %6 %251 %68 %245 %78 445e5c31af7Sopenharmony_ci %248 = OpPhi %13 %239 %68 %121 %78 446e5c31af7Sopenharmony_ci OpSelectionMerge %126 None 447e5c31af7Sopenharmony_ci OpBranchConditional %248 %113 %126 448e5c31af7Sopenharmony_ci %126 = OpLabel 449e5c31af7Sopenharmony_ci OpStore %120 %121 450e5c31af7Sopenharmony_ci OpStore %114 %12 451e5c31af7Sopenharmony_ci OpBranch %113 452e5c31af7Sopenharmony_ci %118 = OpLabel 453e5c31af7Sopenharmony_ci OpBranch %116 454e5c31af7Sopenharmony_ci %113 = OpLabel 455e5c31af7Sopenharmony_ci %250 = OpPhi %6 %251 %27 %258 %70 %12 %126 456e5c31af7Sopenharmony_ci OpReturnValue %250 457e5c31af7Sopenharmony_ci OpFunctionEnd 458e5c31af7Sopenharmony_ciEND 459e5c31af7Sopenharmony_ci 460e5c31af7Sopenharmony_ci# uniforms for variant 461e5c31af7Sopenharmony_ci 462e5c31af7Sopenharmony_ci# resolution 463e5c31af7Sopenharmony_ciBUFFER variant_resolution DATA_TYPE vec2<float> DATA 464e5c31af7Sopenharmony_ci 256.0 256.0 465e5c31af7Sopenharmony_ciEND 466e5c31af7Sopenharmony_ci# injectionSwitch 467e5c31af7Sopenharmony_ciBUFFER variant_injectionSwitch DATA_TYPE vec2<float> DATA 468e5c31af7Sopenharmony_ci 0.0 1.0 469e5c31af7Sopenharmony_ciEND 470e5c31af7Sopenharmony_ci 471e5c31af7Sopenharmony_ciBUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM 472e5c31af7Sopenharmony_ci 473e5c31af7Sopenharmony_ciPIPELINE graphics variant_pipeline 474e5c31af7Sopenharmony_ci ATTACH variant_vertex_shader 475e5c31af7Sopenharmony_ci ATTACH variant_fragment_shader 476e5c31af7Sopenharmony_ci FRAMEBUFFER_SIZE 256 256 477e5c31af7Sopenharmony_ci BIND BUFFER variant_framebuffer AS color LOCATION 0 478e5c31af7Sopenharmony_ci BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 1 479e5c31af7Sopenharmony_ci BIND BUFFER variant_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0 480e5c31af7Sopenharmony_ciEND 481e5c31af7Sopenharmony_ciCLEAR_COLOR variant_pipeline 0 0 0 255 482e5c31af7Sopenharmony_ci 483e5c31af7Sopenharmony_ciCLEAR variant_pipeline 484e5c31af7Sopenharmony_ciRUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256 485e5c31af7Sopenharmony_ci 486e5c31af7Sopenharmony_ciEXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255 487