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 loop that writes then reads a global array 21e5c31af7Sopenharmony_ci 22e5c31af7Sopenharmony_ci# The test passes because the first 4-iteration loop increments acc, and then the 23e5c31af7Sopenharmony_ci# shader writes red if acc == 4, which is always the case. 24e5c31af7Sopenharmony_ci 25e5c31af7Sopenharmony_ci# Optimized using spirv-opt with the following arguments: 26e5c31af7Sopenharmony_ci# '--reduce-load-size' 27e5c31af7Sopenharmony_ci# '--combine-access-chains' 28e5c31af7Sopenharmony_ci# '--ccp' 29e5c31af7Sopenharmony_ci# '--inline-entry-points-exhaustive' 30e5c31af7Sopenharmony_ci# '--eliminate-dead-code-aggressive' 31e5c31af7Sopenharmony_ci# '--eliminate-dead-branches' 32e5c31af7Sopenharmony_ci# '--merge-return' 33e5c31af7Sopenharmony_ci# '--combine-access-chains' 34e5c31af7Sopenharmony_ci# '--scalar-replacement=100' 35e5c31af7Sopenharmony_ci# '--private-to-local' 36e5c31af7Sopenharmony_ci# '--convert-local-access-chains' 37e5c31af7Sopenharmony_ci# '--private-to-local' 38e5c31af7Sopenharmony_ci# '--scalar-replacement=100' 39e5c31af7Sopenharmony_ci# '--eliminate-local-single-block' 40e5c31af7Sopenharmony_ci# '--scalar-replacement=100' 41e5c31af7Sopenharmony_ci# '--vector-dce' 42e5c31af7Sopenharmony_ci# '--eliminate-local-multi-store' 43e5c31af7Sopenharmony_ci# '--redundancy-elimination' 44e5c31af7Sopenharmony_ci# '--eliminate-local-multi-store' 45e5c31af7Sopenharmony_ci# '--vector-dce' 46e5c31af7Sopenharmony_ci# '--inline-entry-points-exhaustive' 47e5c31af7Sopenharmony_ci# spirv-opt commit hash: 18b3b94567a9251a6f8491a6d07c4422abadd22c 48e5c31af7Sopenharmony_ci 49e5c31af7Sopenharmony_ci 50e5c31af7Sopenharmony_ci 51e5c31af7Sopenharmony_ciSHADER vertex variant_vertex_shader PASSTHROUGH 52e5c31af7Sopenharmony_ci 53e5c31af7Sopenharmony_ci# variant_fragment_shader is derived from the following GLSL: 54e5c31af7Sopenharmony_ci# #version 310 es 55e5c31af7Sopenharmony_ci# precision highp float; 56e5c31af7Sopenharmony_ci# 57e5c31af7Sopenharmony_ci# layout(location = 0) out vec4 _GLF_color; 58e5c31af7Sopenharmony_ci# 59e5c31af7Sopenharmony_ci# layout(set = 0, binding = 0) uniform buf0 60e5c31af7Sopenharmony_ci# { 61e5c31af7Sopenharmony_ci# float one; 62e5c31af7Sopenharmony_ci# }; 63e5c31af7Sopenharmony_ci# 64e5c31af7Sopenharmony_ci# int globalNumbers[10]; 65e5c31af7Sopenharmony_ci# 66e5c31af7Sopenharmony_ci# // Sets globalNumbers[0] to 1. 67e5c31af7Sopenharmony_ci# // We assume: 68e5c31af7Sopenharmony_ci# // n == 0 69e5c31af7Sopenharmony_ci# // globalNumbers[0] == 0 70e5c31af7Sopenharmony_ci# int setGlobalNumberZeroToOne(int n) 71e5c31af7Sopenharmony_ci# { 72e5c31af7Sopenharmony_ci# for ( 73e5c31af7Sopenharmony_ci# int i = 0; 74e5c31af7Sopenharmony_ci# i <= n; 75e5c31af7Sopenharmony_ci# i++) 76e5c31af7Sopenharmony_ci# { 77e5c31af7Sopenharmony_ci# if (globalNumbers[n] <= 1) 78e5c31af7Sopenharmony_ci# { 79e5c31af7Sopenharmony_ci# globalNumbers[n] = 1; 80e5c31af7Sopenharmony_ci# } 81e5c31af7Sopenharmony_ci# } 82e5c31af7Sopenharmony_ci# return 2; 83e5c31af7Sopenharmony_ci# } 84e5c31af7Sopenharmony_ci# 85e5c31af7Sopenharmony_ci# int yieldsZero() 86e5c31af7Sopenharmony_ci# { 87e5c31af7Sopenharmony_ci# for ( 88e5c31af7Sopenharmony_ci# int i = 0; 89e5c31af7Sopenharmony_ci# i < int(one); 90e5c31af7Sopenharmony_ci# i++) 91e5c31af7Sopenharmony_ci# { 92e5c31af7Sopenharmony_ci# return i; 93e5c31af7Sopenharmony_ci# } 94e5c31af7Sopenharmony_ci# } 95e5c31af7Sopenharmony_ci# 96e5c31af7Sopenharmony_ci# void main() 97e5c31af7Sopenharmony_ci# { 98e5c31af7Sopenharmony_ci# int acc = 0; 99e5c31af7Sopenharmony_ci# int localNumbers[2]; 100e5c31af7Sopenharmony_ci# for ( 101e5c31af7Sopenharmony_ci# int i = 0; 102e5c31af7Sopenharmony_ci# i < 4; 103e5c31af7Sopenharmony_ci# i++) 104e5c31af7Sopenharmony_ci# { 105e5c31af7Sopenharmony_ci# localNumbers[1] = yieldsZero(); 106e5c31af7Sopenharmony_ci# globalNumbers[0] = 0; 107e5c31af7Sopenharmony_ci# setGlobalNumberZeroToOne(localNumbers[1]); 108e5c31af7Sopenharmony_ci# acc += globalNumbers[int(one) - 1]; // acc += 1; 109e5c31af7Sopenharmony_ci# } 110e5c31af7Sopenharmony_ci# 111e5c31af7Sopenharmony_ci# // acc should be 4. 112e5c31af7Sopenharmony_ci# 113e5c31af7Sopenharmony_ci# if (acc == 4) 114e5c31af7Sopenharmony_ci# _GLF_color = vec4(1.0, 0.0, 0.0, 1.0); 115e5c31af7Sopenharmony_ci# else 116e5c31af7Sopenharmony_ci# _GLF_color = vec4(0.0, 0.0, 0.0, 1.0); 117e5c31af7Sopenharmony_ci# } 118e5c31af7Sopenharmony_ciSHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 119e5c31af7Sopenharmony_ci; SPIR-V 120e5c31af7Sopenharmony_ci; Version: 1.0 121e5c31af7Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 8 122e5c31af7Sopenharmony_ci; Bound: 191 123e5c31af7Sopenharmony_ci; Schema: 0 124e5c31af7Sopenharmony_ci OpCapability Shader 125e5c31af7Sopenharmony_ci %1 = OpExtInstImport "GLSL.std.450" 126e5c31af7Sopenharmony_ci OpMemoryModel Logical GLSL450 127e5c31af7Sopenharmony_ci OpEntryPoint Fragment %4 "main" %104 128e5c31af7Sopenharmony_ci OpExecutionMode %4 OriginUpperLeft 129e5c31af7Sopenharmony_ci OpSource ESSL 310 130e5c31af7Sopenharmony_ci OpName %4 "main" 131e5c31af7Sopenharmony_ci OpName %13 "yieldsZero(" 132e5c31af7Sopenharmony_ci OpName %30 "globalNumbers" 133e5c31af7Sopenharmony_ci OpName %46 "i" 134e5c31af7Sopenharmony_ci OpName %54 "buf0" 135e5c31af7Sopenharmony_ci OpMemberName %54 0 "one" 136e5c31af7Sopenharmony_ci OpName %56 "" 137e5c31af7Sopenharmony_ci OpName %67 "acc" 138e5c31af7Sopenharmony_ci OpName %68 "i" 139e5c31af7Sopenharmony_ci OpName %80 "localNumbers" 140e5c31af7Sopenharmony_ci OpName %84 "param" 141e5c31af7Sopenharmony_ci OpName %104 "_GLF_color" 142e5c31af7Sopenharmony_ci OpDecorate %13 RelaxedPrecision 143e5c31af7Sopenharmony_ci OpDecorate %30 RelaxedPrecision 144e5c31af7Sopenharmony_ci OpDecorate %46 RelaxedPrecision 145e5c31af7Sopenharmony_ci OpMemberDecorate %54 0 Offset 0 146e5c31af7Sopenharmony_ci OpDecorate %54 Block 147e5c31af7Sopenharmony_ci OpDecorate %56 DescriptorSet 0 148e5c31af7Sopenharmony_ci OpDecorate %56 Binding 0 149e5c31af7Sopenharmony_ci OpDecorate %67 RelaxedPrecision 150e5c31af7Sopenharmony_ci OpDecorate %68 RelaxedPrecision 151e5c31af7Sopenharmony_ci OpDecorate %80 RelaxedPrecision 152e5c31af7Sopenharmony_ci OpDecorate %86 RelaxedPrecision 153e5c31af7Sopenharmony_ci OpDecorate %93 RelaxedPrecision 154e5c31af7Sopenharmony_ci OpDecorate %95 RelaxedPrecision 155e5c31af7Sopenharmony_ci OpDecorate %97 RelaxedPrecision 156e5c31af7Sopenharmony_ci OpDecorate %104 Location 0 157e5c31af7Sopenharmony_ci OpDecorate %110 RelaxedPrecision 158e5c31af7Sopenharmony_ci OpDecorate %122 RelaxedPrecision 159e5c31af7Sopenharmony_ci OpDecorate %129 RelaxedPrecision 160e5c31af7Sopenharmony_ci OpDecorate %131 RelaxedPrecision 161e5c31af7Sopenharmony_ci OpDecorate %143 RelaxedPrecision 162e5c31af7Sopenharmony_ci OpDecorate %144 RelaxedPrecision 163e5c31af7Sopenharmony_ci OpDecorate %146 RelaxedPrecision 164e5c31af7Sopenharmony_ci OpDecorate %147 RelaxedPrecision 165e5c31af7Sopenharmony_ci OpDecorate %148 RelaxedPrecision 166e5c31af7Sopenharmony_ci OpDecorate %161 RelaxedPrecision 167e5c31af7Sopenharmony_ci OpDecorate %160 RelaxedPrecision 168e5c31af7Sopenharmony_ci OpDecorate %156 RelaxedPrecision 169e5c31af7Sopenharmony_ci OpDecorate %167 RelaxedPrecision 170e5c31af7Sopenharmony_ci OpDecorate %168 RelaxedPrecision 171e5c31af7Sopenharmony_ci OpDecorate %169 RelaxedPrecision 172e5c31af7Sopenharmony_ci OpDecorate %178 RelaxedPrecision 173e5c31af7Sopenharmony_ci OpDecorate %186 RelaxedPrecision 174e5c31af7Sopenharmony_ci OpDecorate %190 RelaxedPrecision 175e5c31af7Sopenharmony_ci %2 = OpTypeVoid 176e5c31af7Sopenharmony_ci %3 = OpTypeFunction %2 177e5c31af7Sopenharmony_ci %6 = OpTypeInt 32 1 178e5c31af7Sopenharmony_ci %7 = OpTypePointer Function %6 179e5c31af7Sopenharmony_ci %12 = OpTypeFunction %6 180e5c31af7Sopenharmony_ci %16 = OpConstant %6 0 181e5c31af7Sopenharmony_ci %24 = OpTypeBool 182e5c31af7Sopenharmony_ci %26 = OpTypeInt 32 0 183e5c31af7Sopenharmony_ci %27 = OpConstant %26 10 184e5c31af7Sopenharmony_ci %28 = OpTypeArray %6 %27 185e5c31af7Sopenharmony_ci %29 = OpTypePointer Private %28 186e5c31af7Sopenharmony_ci %32 = OpTypePointer Private %6 187e5c31af7Sopenharmony_ci %35 = OpConstant %6 1 188e5c31af7Sopenharmony_ci %53 = OpTypeFloat 32 189e5c31af7Sopenharmony_ci %54 = OpTypeStruct %53 190e5c31af7Sopenharmony_ci %55 = OpTypePointer Uniform %54 191e5c31af7Sopenharmony_ci %56 = OpVariable %55 Uniform 192e5c31af7Sopenharmony_ci %57 = OpTypePointer Uniform %53 193e5c31af7Sopenharmony_ci %75 = OpConstant %6 4 194e5c31af7Sopenharmony_ci %77 = OpConstant %26 2 195e5c31af7Sopenharmony_ci %78 = OpTypeArray %6 %77 196e5c31af7Sopenharmony_ci %79 = OpTypePointer Function %78 197e5c31af7Sopenharmony_ci %102 = OpTypeVector %53 4 198e5c31af7Sopenharmony_ci %103 = OpTypePointer Output %102 199e5c31af7Sopenharmony_ci %104 = OpVariable %103 Output 200e5c31af7Sopenharmony_ci %105 = OpConstant %53 1 201e5c31af7Sopenharmony_ci %106 = OpConstant %53 0 202e5c31af7Sopenharmony_ci %107 = OpConstantComposite %102 %105 %106 %106 %105 203e5c31af7Sopenharmony_ci %109 = OpConstantComposite %102 %106 %106 %106 %105 204e5c31af7Sopenharmony_ci %136 = OpConstantFalse %24 205e5c31af7Sopenharmony_ci %137 = OpTypePointer Function %24 206e5c31af7Sopenharmony_ci %139 = OpConstantTrue %24 207e5c31af7Sopenharmony_ci %142 = OpTypePointer Function %28 208e5c31af7Sopenharmony_ci %164 = OpUndef %6 209e5c31af7Sopenharmony_ci %165 = OpUndef %24 210e5c31af7Sopenharmony_ci %4 = OpFunction %2 None %3 211e5c31af7Sopenharmony_ci %5 = OpLabel 212e5c31af7Sopenharmony_ci %166 = OpVariable %137 Function %136 213e5c31af7Sopenharmony_ci %167 = OpVariable %7 Function 214e5c31af7Sopenharmony_ci %168 = OpVariable %7 Function 215e5c31af7Sopenharmony_ci %169 = OpVariable %7 Function 216e5c31af7Sopenharmony_ci %30 = OpVariable %142 Function 217e5c31af7Sopenharmony_ci %110 = OpVariable %7 Function 218e5c31af7Sopenharmony_ci %67 = OpVariable %7 Function 219e5c31af7Sopenharmony_ci %68 = OpVariable %7 Function 220e5c31af7Sopenharmony_ci %80 = OpVariable %79 Function 221e5c31af7Sopenharmony_ci %84 = OpVariable %7 Function 222e5c31af7Sopenharmony_ci OpStore %67 %16 223e5c31af7Sopenharmony_ci OpStore %68 %16 224e5c31af7Sopenharmony_ci OpBranch %69 225e5c31af7Sopenharmony_ci %69 = OpLabel 226e5c31af7Sopenharmony_ci %147 = OpPhi %6 %16 %5 %95 %72 227e5c31af7Sopenharmony_ci %146 = OpPhi %6 %16 %5 %97 %72 228e5c31af7Sopenharmony_ci OpLoopMerge %71 %72 None 229e5c31af7Sopenharmony_ci OpBranch %73 230e5c31af7Sopenharmony_ci %73 = OpLabel 231e5c31af7Sopenharmony_ci %76 = OpSLessThan %24 %146 %75 232e5c31af7Sopenharmony_ci OpBranchConditional %76 %70 %71 233e5c31af7Sopenharmony_ci %70 = OpLabel 234e5c31af7Sopenharmony_ci OpStore %166 %136 235e5c31af7Sopenharmony_ci OpBranch %170 236e5c31af7Sopenharmony_ci %170 = OpLabel 237e5c31af7Sopenharmony_ci %172 = OpPhi %24 %136 %70 %165 %171 238e5c31af7Sopenharmony_ci OpLoopMerge %173 %171 None 239e5c31af7Sopenharmony_ci OpBranch %174 240e5c31af7Sopenharmony_ci %174 = OpLabel 241e5c31af7Sopenharmony_ci OpStore %168 %16 242e5c31af7Sopenharmony_ci OpBranch %175 243e5c31af7Sopenharmony_ci %175 = OpLabel 244e5c31af7Sopenharmony_ci %177 = OpPhi %24 %172 %174 %165 %176 245e5c31af7Sopenharmony_ci %178 = OpPhi %6 %16 %174 %164 %176 246e5c31af7Sopenharmony_ci OpLoopMerge %179 %176 None 247e5c31af7Sopenharmony_ci OpBranch %180 248e5c31af7Sopenharmony_ci %180 = OpLabel 249e5c31af7Sopenharmony_ci %181 = OpAccessChain %57 %56 %16 250e5c31af7Sopenharmony_ci %182 = OpLoad %53 %181 251e5c31af7Sopenharmony_ci %183 = OpConvertFToS %6 %182 252e5c31af7Sopenharmony_ci %184 = OpSLessThan %24 %178 %183 253e5c31af7Sopenharmony_ci OpBranchConditional %184 %185 %179 254e5c31af7Sopenharmony_ci %185 = OpLabel 255e5c31af7Sopenharmony_ci OpStore %166 %139 256e5c31af7Sopenharmony_ci OpStore %167 %178 257e5c31af7Sopenharmony_ci OpBranch %179 258e5c31af7Sopenharmony_ci %176 = OpLabel 259e5c31af7Sopenharmony_ci OpBranch %175 260e5c31af7Sopenharmony_ci %179 = OpLabel 261e5c31af7Sopenharmony_ci %186 = OpPhi %6 %164 %180 %178 %185 262e5c31af7Sopenharmony_ci %187 = OpPhi %24 %177 %180 %139 %185 263e5c31af7Sopenharmony_ci OpSelectionMerge %188 None 264e5c31af7Sopenharmony_ci OpBranchConditional %187 %173 %188 265e5c31af7Sopenharmony_ci %188 = OpLabel 266e5c31af7Sopenharmony_ci %189 = OpUndef %6 267e5c31af7Sopenharmony_ci OpStore %166 %139 268e5c31af7Sopenharmony_ci OpStore %167 %189 269e5c31af7Sopenharmony_ci OpBranch %173 270e5c31af7Sopenharmony_ci %171 = OpLabel 271e5c31af7Sopenharmony_ci OpBranch %170 272e5c31af7Sopenharmony_ci %173 = OpLabel 273e5c31af7Sopenharmony_ci %190 = OpPhi %6 %186 %179 %189 %188 274e5c31af7Sopenharmony_ci OpStore %169 %190 275e5c31af7Sopenharmony_ci %81 = OpLoad %6 %169 276e5c31af7Sopenharmony_ci %143 = OpLoad %78 %80 277e5c31af7Sopenharmony_ci %144 = OpCompositeInsert %78 %81 %143 1 278e5c31af7Sopenharmony_ci OpStore %80 %144 279e5c31af7Sopenharmony_ci %83 = OpAccessChain %7 %30 %16 280e5c31af7Sopenharmony_ci OpStore %83 %16 281e5c31af7Sopenharmony_ci %85 = OpAccessChain %7 %80 %35 282e5c31af7Sopenharmony_ci %86 = OpCompositeExtract %6 %144 1 283e5c31af7Sopenharmony_ci OpStore %84 %86 284e5c31af7Sopenharmony_ci OpStore %110 %16 285e5c31af7Sopenharmony_ci OpBranch %112 286e5c31af7Sopenharmony_ci %112 = OpLabel 287e5c31af7Sopenharmony_ci %148 = OpPhi %6 %16 %173 %129 %114 288e5c31af7Sopenharmony_ci OpLoopMerge %113 %114 None 289e5c31af7Sopenharmony_ci OpBranch %115 290e5c31af7Sopenharmony_ci %115 = OpLabel 291e5c31af7Sopenharmony_ci %118 = OpSLessThanEqual %24 %148 %86 292e5c31af7Sopenharmony_ci OpBranchConditional %118 %119 %113 293e5c31af7Sopenharmony_ci %119 = OpLabel 294e5c31af7Sopenharmony_ci %121 = OpAccessChain %7 %30 %86 295e5c31af7Sopenharmony_ci %122 = OpLoad %6 %121 296e5c31af7Sopenharmony_ci %123 = OpSLessThanEqual %24 %122 %35 297e5c31af7Sopenharmony_ci OpSelectionMerge %124 None 298e5c31af7Sopenharmony_ci OpBranchConditional %123 %125 %124 299e5c31af7Sopenharmony_ci %125 = OpLabel 300e5c31af7Sopenharmony_ci OpStore %121 %35 301e5c31af7Sopenharmony_ci OpBranch %124 302e5c31af7Sopenharmony_ci %124 = OpLabel 303e5c31af7Sopenharmony_ci OpBranch %114 304e5c31af7Sopenharmony_ci %114 = OpLabel 305e5c31af7Sopenharmony_ci %129 = OpIAdd %6 %148 %35 306e5c31af7Sopenharmony_ci OpStore %110 %129 307e5c31af7Sopenharmony_ci OpBranch %112 308e5c31af7Sopenharmony_ci %113 = OpLabel 309e5c31af7Sopenharmony_ci %88 = OpAccessChain %57 %56 %16 310e5c31af7Sopenharmony_ci %89 = OpLoad %53 %88 311e5c31af7Sopenharmony_ci %90 = OpConvertFToS %6 %89 312e5c31af7Sopenharmony_ci %91 = OpISub %6 %90 %35 313e5c31af7Sopenharmony_ci %92 = OpAccessChain %7 %30 %91 314e5c31af7Sopenharmony_ci %93 = OpLoad %6 %92 315e5c31af7Sopenharmony_ci %95 = OpIAdd %6 %147 %93 316e5c31af7Sopenharmony_ci OpStore %67 %95 317e5c31af7Sopenharmony_ci OpBranch %72 318e5c31af7Sopenharmony_ci %72 = OpLabel 319e5c31af7Sopenharmony_ci %97 = OpIAdd %6 %146 %35 320e5c31af7Sopenharmony_ci OpStore %68 %97 321e5c31af7Sopenharmony_ci OpBranch %69 322e5c31af7Sopenharmony_ci %71 = OpLabel 323e5c31af7Sopenharmony_ci %99 = OpIEqual %24 %147 %75 324e5c31af7Sopenharmony_ci OpSelectionMerge %101 None 325e5c31af7Sopenharmony_ci OpBranchConditional %99 %100 %108 326e5c31af7Sopenharmony_ci %100 = OpLabel 327e5c31af7Sopenharmony_ci OpStore %104 %107 328e5c31af7Sopenharmony_ci OpBranch %101 329e5c31af7Sopenharmony_ci %108 = OpLabel 330e5c31af7Sopenharmony_ci OpStore %104 %109 331e5c31af7Sopenharmony_ci OpBranch %101 332e5c31af7Sopenharmony_ci %101 = OpLabel 333e5c31af7Sopenharmony_ci OpReturn 334e5c31af7Sopenharmony_ci OpFunctionEnd 335e5c31af7Sopenharmony_ci %13 = OpFunction %6 None %12 336e5c31af7Sopenharmony_ci %14 = OpLabel 337e5c31af7Sopenharmony_ci %138 = OpVariable %137 Function %136 338e5c31af7Sopenharmony_ci %131 = OpVariable %7 Function 339e5c31af7Sopenharmony_ci %46 = OpVariable %7 Function 340e5c31af7Sopenharmony_ci OpBranch %133 341e5c31af7Sopenharmony_ci %133 = OpLabel 342e5c31af7Sopenharmony_ci %159 = OpPhi %24 %136 %14 %165 %135 343e5c31af7Sopenharmony_ci OpLoopMerge %130 %135 None 344e5c31af7Sopenharmony_ci OpBranch %134 345e5c31af7Sopenharmony_ci %134 = OpLabel 346e5c31af7Sopenharmony_ci OpStore %46 %16 347e5c31af7Sopenharmony_ci OpBranch %47 348e5c31af7Sopenharmony_ci %47 = OpLabel 349e5c31af7Sopenharmony_ci %158 = OpPhi %24 %159 %134 %165 %50 350e5c31af7Sopenharmony_ci %156 = OpPhi %6 %16 %134 %164 %50 351e5c31af7Sopenharmony_ci OpLoopMerge %49 %50 None 352e5c31af7Sopenharmony_ci OpBranch %51 353e5c31af7Sopenharmony_ci %51 = OpLabel 354e5c31af7Sopenharmony_ci %58 = OpAccessChain %57 %56 %16 355e5c31af7Sopenharmony_ci %59 = OpLoad %53 %58 356e5c31af7Sopenharmony_ci %60 = OpConvertFToS %6 %59 357e5c31af7Sopenharmony_ci %61 = OpSLessThan %24 %156 %60 358e5c31af7Sopenharmony_ci OpBranchConditional %61 %48 %49 359e5c31af7Sopenharmony_ci %48 = OpLabel 360e5c31af7Sopenharmony_ci OpStore %138 %139 361e5c31af7Sopenharmony_ci OpStore %131 %156 362e5c31af7Sopenharmony_ci OpBranch %49 363e5c31af7Sopenharmony_ci %50 = OpLabel 364e5c31af7Sopenharmony_ci OpBranch %47 365e5c31af7Sopenharmony_ci %49 = OpLabel 366e5c31af7Sopenharmony_ci %161 = OpPhi %6 %164 %51 %156 %48 367e5c31af7Sopenharmony_ci %157 = OpPhi %24 %158 %51 %139 %48 368e5c31af7Sopenharmony_ci OpSelectionMerge %140 None 369e5c31af7Sopenharmony_ci OpBranchConditional %157 %130 %140 370e5c31af7Sopenharmony_ci %140 = OpLabel 371e5c31af7Sopenharmony_ci %66 = OpUndef %6 372e5c31af7Sopenharmony_ci OpStore %138 %139 373e5c31af7Sopenharmony_ci OpStore %131 %66 374e5c31af7Sopenharmony_ci OpBranch %130 375e5c31af7Sopenharmony_ci %135 = OpLabel 376e5c31af7Sopenharmony_ci OpBranch %133 377e5c31af7Sopenharmony_ci %130 = OpLabel 378e5c31af7Sopenharmony_ci %160 = OpPhi %6 %161 %49 %66 %140 379e5c31af7Sopenharmony_ci OpReturnValue %160 380e5c31af7Sopenharmony_ci OpFunctionEnd 381e5c31af7Sopenharmony_ciEND 382e5c31af7Sopenharmony_ci 383e5c31af7Sopenharmony_ci# uniforms for variant 384e5c31af7Sopenharmony_ci 385e5c31af7Sopenharmony_ci# one 386e5c31af7Sopenharmony_ciBUFFER variant_one DATA_TYPE float DATA 387e5c31af7Sopenharmony_ci 1.0 388e5c31af7Sopenharmony_ciEND 389e5c31af7Sopenharmony_ci 390e5c31af7Sopenharmony_ciBUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM 391e5c31af7Sopenharmony_ci 392e5c31af7Sopenharmony_ciPIPELINE graphics variant_pipeline 393e5c31af7Sopenharmony_ci ATTACH variant_vertex_shader 394e5c31af7Sopenharmony_ci ATTACH variant_fragment_shader 395e5c31af7Sopenharmony_ci FRAMEBUFFER_SIZE 256 256 396e5c31af7Sopenharmony_ci BIND BUFFER variant_framebuffer AS color LOCATION 0 397e5c31af7Sopenharmony_ci BIND BUFFER variant_one AS uniform DESCRIPTOR_SET 0 BINDING 0 398e5c31af7Sopenharmony_ciEND 399e5c31af7Sopenharmony_ciCLEAR_COLOR variant_pipeline 0 0 0 255 400e5c31af7Sopenharmony_ci 401e5c31af7Sopenharmony_ciCLEAR variant_pipeline 402e5c31af7Sopenharmony_ciRUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256 403e5c31af7Sopenharmony_ci 404e5c31af7Sopenharmony_ciEXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255 405