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 with nested if and conditional statement 21e5c31af7Sopenharmony_ci 22e5c31af7Sopenharmony_ci# The test passes because both shaders render the same image. 23e5c31af7Sopenharmony_ci 24e5c31af7Sopenharmony_ciSHADER vertex reference_vertex_shader PASSTHROUGH 25e5c31af7Sopenharmony_ci 26e5c31af7Sopenharmony_ci# reference_fragment_shader is derived from the following GLSL: 27e5c31af7Sopenharmony_ci# #version 320 es 28e5c31af7Sopenharmony_ci# precision highp float; 29e5c31af7Sopenharmony_ci# 30e5c31af7Sopenharmony_ci# precision highp int; 31e5c31af7Sopenharmony_ci# 32e5c31af7Sopenharmony_ci# layout(location = 0) out vec4 _GLF_color; 33e5c31af7Sopenharmony_ci# 34e5c31af7Sopenharmony_ci# struct BST 35e5c31af7Sopenharmony_ci# { 36e5c31af7Sopenharmony_ci# int data; 37e5c31af7Sopenharmony_ci# int leftIndex; 38e5c31af7Sopenharmony_ci# int rightIndex; 39e5c31af7Sopenharmony_ci# }; 40e5c31af7Sopenharmony_ci# 41e5c31af7Sopenharmony_ci# BST tree[10]; 42e5c31af7Sopenharmony_ci# 43e5c31af7Sopenharmony_ci# void makeTreeNode(inout BST tree, int data) 44e5c31af7Sopenharmony_ci# { 45e5c31af7Sopenharmony_ci# tree.data = data; 46e5c31af7Sopenharmony_ci# tree.leftIndex = -1; 47e5c31af7Sopenharmony_ci# tree.rightIndex = -1; 48e5c31af7Sopenharmony_ci# } 49e5c31af7Sopenharmony_ci# void insert(int treeIndex, int data) 50e5c31af7Sopenharmony_ci# { 51e5c31af7Sopenharmony_ci# int baseIndex = 0; 52e5c31af7Sopenharmony_ci# while (baseIndex <= treeIndex) 53e5c31af7Sopenharmony_ci# { 54e5c31af7Sopenharmony_ci# if (data <= tree[baseIndex].data) 55e5c31af7Sopenharmony_ci# { 56e5c31af7Sopenharmony_ci# if (tree[baseIndex].leftIndex == -1) 57e5c31af7Sopenharmony_ci# { 58e5c31af7Sopenharmony_ci# tree[baseIndex].leftIndex = treeIndex; 59e5c31af7Sopenharmony_ci# makeTreeNode(tree[treeIndex], data); 60e5c31af7Sopenharmony_ci# return; 61e5c31af7Sopenharmony_ci# } 62e5c31af7Sopenharmony_ci# else 63e5c31af7Sopenharmony_ci# { 64e5c31af7Sopenharmony_ci# baseIndex = tree[baseIndex].leftIndex; 65e5c31af7Sopenharmony_ci# continue; 66e5c31af7Sopenharmony_ci# } 67e5c31af7Sopenharmony_ci# } 68e5c31af7Sopenharmony_ci# else 69e5c31af7Sopenharmony_ci# { 70e5c31af7Sopenharmony_ci# if (tree[baseIndex].rightIndex == -1) 71e5c31af7Sopenharmony_ci# { 72e5c31af7Sopenharmony_ci# tree[baseIndex].rightIndex = treeIndex; 73e5c31af7Sopenharmony_ci# makeTreeNode(tree[treeIndex], data); 74e5c31af7Sopenharmony_ci# return; 75e5c31af7Sopenharmony_ci# } 76e5c31af7Sopenharmony_ci# else 77e5c31af7Sopenharmony_ci# { 78e5c31af7Sopenharmony_ci# baseIndex = tree[baseIndex].rightIndex; 79e5c31af7Sopenharmony_ci# continue; 80e5c31af7Sopenharmony_ci# } 81e5c31af7Sopenharmony_ci# } 82e5c31af7Sopenharmony_ci# } 83e5c31af7Sopenharmony_ci# } 84e5c31af7Sopenharmony_ci# int search(int target) 85e5c31af7Sopenharmony_ci# { 86e5c31af7Sopenharmony_ci# BST currentNode; 87e5c31af7Sopenharmony_ci# int index = 0; 88e5c31af7Sopenharmony_ci# while (index != -1) 89e5c31af7Sopenharmony_ci# { 90e5c31af7Sopenharmony_ci# currentNode = tree[index]; 91e5c31af7Sopenharmony_ci# if (currentNode.data == target) 92e5c31af7Sopenharmony_ci# { 93e5c31af7Sopenharmony_ci# return target; 94e5c31af7Sopenharmony_ci# } 95e5c31af7Sopenharmony_ci# index = target > currentNode.data ? currentNode.rightIndex : currentNode.leftIndex; 96e5c31af7Sopenharmony_ci# } 97e5c31af7Sopenharmony_ci# return -1; 98e5c31af7Sopenharmony_ci# } 99e5c31af7Sopenharmony_ci# void main() 100e5c31af7Sopenharmony_ci# { 101e5c31af7Sopenharmony_ci# int treeIndex = 0; 102e5c31af7Sopenharmony_ci# makeTreeNode(tree[0], 9); 103e5c31af7Sopenharmony_ci# treeIndex++; 104e5c31af7Sopenharmony_ci# insert(treeIndex, 5); 105e5c31af7Sopenharmony_ci# treeIndex++; 106e5c31af7Sopenharmony_ci# insert(treeIndex, 12); 107e5c31af7Sopenharmony_ci# treeIndex++; 108e5c31af7Sopenharmony_ci# insert(treeIndex, 15); 109e5c31af7Sopenharmony_ci# treeIndex++; 110e5c31af7Sopenharmony_ci# insert(treeIndex, 7); 111e5c31af7Sopenharmony_ci# treeIndex++; 112e5c31af7Sopenharmony_ci# insert(treeIndex, 8); 113e5c31af7Sopenharmony_ci# treeIndex++; 114e5c31af7Sopenharmony_ci# insert(treeIndex, 2); 115e5c31af7Sopenharmony_ci# treeIndex++; 116e5c31af7Sopenharmony_ci# insert(treeIndex, 6); 117e5c31af7Sopenharmony_ci# treeIndex++; 118e5c31af7Sopenharmony_ci# insert(treeIndex, 17); 119e5c31af7Sopenharmony_ci# treeIndex++; 120e5c31af7Sopenharmony_ci# insert(treeIndex, 13); 121e5c31af7Sopenharmony_ci# int count = 0; 122e5c31af7Sopenharmony_ci# for (int i = 0; i < 20; i++) 123e5c31af7Sopenharmony_ci# { 124e5c31af7Sopenharmony_ci# int result = search(i); 125e5c31af7Sopenharmony_ci# switch (i) 126e5c31af7Sopenharmony_ci# { 127e5c31af7Sopenharmony_ci# case 9: 128e5c31af7Sopenharmony_ci# case 5: 129e5c31af7Sopenharmony_ci# case 12: 130e5c31af7Sopenharmony_ci# case 15: 131e5c31af7Sopenharmony_ci# case 7: 132e5c31af7Sopenharmony_ci# case 8: 133e5c31af7Sopenharmony_ci# case 2: 134e5c31af7Sopenharmony_ci# case 6: 135e5c31af7Sopenharmony_ci# case 17: 136e5c31af7Sopenharmony_ci# case 13: 137e5c31af7Sopenharmony_ci# if (result == i) 138e5c31af7Sopenharmony_ci# { 139e5c31af7Sopenharmony_ci# count++; 140e5c31af7Sopenharmony_ci# } 141e5c31af7Sopenharmony_ci# break; 142e5c31af7Sopenharmony_ci# default: 143e5c31af7Sopenharmony_ci# if (result == -1) 144e5c31af7Sopenharmony_ci# { 145e5c31af7Sopenharmony_ci# count++; 146e5c31af7Sopenharmony_ci# } 147e5c31af7Sopenharmony_ci# break; 148e5c31af7Sopenharmony_ci# } 149e5c31af7Sopenharmony_ci# } 150e5c31af7Sopenharmony_ci# if (count == 20) 151e5c31af7Sopenharmony_ci# { 152e5c31af7Sopenharmony_ci# _GLF_color = vec4(1.0, 0.0, 0.0, 1.0); 153e5c31af7Sopenharmony_ci# } 154e5c31af7Sopenharmony_ci# else 155e5c31af7Sopenharmony_ci# { 156e5c31af7Sopenharmony_ci# _GLF_color = vec4(0.0, 0.0, 1.0, 1.0); 157e5c31af7Sopenharmony_ci# } 158e5c31af7Sopenharmony_ci# } 159e5c31af7Sopenharmony_ciSHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 160e5c31af7Sopenharmony_ci; SPIR-V 161e5c31af7Sopenharmony_ci; Version: 1.0 162e5c31af7Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 10 163e5c31af7Sopenharmony_ci; Bound: 260 164e5c31af7Sopenharmony_ci; Schema: 0 165e5c31af7Sopenharmony_ci OpCapability Shader 166e5c31af7Sopenharmony_ci %1 = OpExtInstImport "GLSL.std.450" 167e5c31af7Sopenharmony_ci OpMemoryModel Logical GLSL450 168e5c31af7Sopenharmony_ci OpEntryPoint Fragment %4 "main" %254 169e5c31af7Sopenharmony_ci OpExecutionMode %4 OriginUpperLeft 170e5c31af7Sopenharmony_ci OpSource ESSL 320 171e5c31af7Sopenharmony_ci OpName %4 "main" 172e5c31af7Sopenharmony_ci OpName %7 "BST" 173e5c31af7Sopenharmony_ci OpMemberName %7 0 "data" 174e5c31af7Sopenharmony_ci OpMemberName %7 1 "leftIndex" 175e5c31af7Sopenharmony_ci OpMemberName %7 2 "rightIndex" 176e5c31af7Sopenharmony_ci OpName %13 "makeTreeNode(struct-BST-i1-i1-i11;i1;" 177e5c31af7Sopenharmony_ci OpName %11 "tree" 178e5c31af7Sopenharmony_ci OpName %12 "data" 179e5c31af7Sopenharmony_ci OpName %18 "insert(i1;i1;" 180e5c31af7Sopenharmony_ci OpName %16 "treeIndex" 181e5c31af7Sopenharmony_ci OpName %17 "data" 182e5c31af7Sopenharmony_ci OpName %22 "search(i1;" 183e5c31af7Sopenharmony_ci OpName %21 "target" 184e5c31af7Sopenharmony_ci OpName %32 "baseIndex" 185e5c31af7Sopenharmony_ci OpName %47 "tree" 186e5c31af7Sopenharmony_ci OpName %65 "param" 187e5c31af7Sopenharmony_ci OpName %69 "param" 188e5c31af7Sopenharmony_ci OpName %91 "param" 189e5c31af7Sopenharmony_ci OpName %94 "param" 190e5c31af7Sopenharmony_ci OpName %105 "index" 191e5c31af7Sopenharmony_ci OpName %113 "currentNode" 192e5c31af7Sopenharmony_ci OpName %140 "treeIndex" 193e5c31af7Sopenharmony_ci OpName %142 "param" 194e5c31af7Sopenharmony_ci OpName %145 "param" 195e5c31af7Sopenharmony_ci OpName %152 "param" 196e5c31af7Sopenharmony_ci OpName %154 "param" 197e5c31af7Sopenharmony_ci OpName %159 "param" 198e5c31af7Sopenharmony_ci OpName %161 "param" 199e5c31af7Sopenharmony_ci OpName %166 "param" 200e5c31af7Sopenharmony_ci OpName %168 "param" 201e5c31af7Sopenharmony_ci OpName %173 "param" 202e5c31af7Sopenharmony_ci OpName %175 "param" 203e5c31af7Sopenharmony_ci OpName %180 "param" 204e5c31af7Sopenharmony_ci OpName %182 "param" 205e5c31af7Sopenharmony_ci OpName %186 "param" 206e5c31af7Sopenharmony_ci OpName %188 "param" 207e5c31af7Sopenharmony_ci OpName %193 "param" 208e5c31af7Sopenharmony_ci OpName %195 "param" 209e5c31af7Sopenharmony_ci OpName %200 "param" 210e5c31af7Sopenharmony_ci OpName %202 "param" 211e5c31af7Sopenharmony_ci OpName %207 "param" 212e5c31af7Sopenharmony_ci OpName %209 "param" 213e5c31af7Sopenharmony_ci OpName %211 "count" 214e5c31af7Sopenharmony_ci OpName %212 "i" 215e5c31af7Sopenharmony_ci OpName %221 "result" 216e5c31af7Sopenharmony_ci OpName %222 "param" 217e5c31af7Sopenharmony_ci OpName %254 "_GLF_color" 218e5c31af7Sopenharmony_ci OpDecorate %254 Location 0 219e5c31af7Sopenharmony_ci %2 = OpTypeVoid 220e5c31af7Sopenharmony_ci %3 = OpTypeFunction %2 221e5c31af7Sopenharmony_ci %6 = OpTypeInt 32 1 222e5c31af7Sopenharmony_ci %7 = OpTypeStruct %6 %6 %6 223e5c31af7Sopenharmony_ci %8 = OpTypePointer Function %7 224e5c31af7Sopenharmony_ci %9 = OpTypePointer Function %6 225e5c31af7Sopenharmony_ci %10 = OpTypeFunction %2 %8 %9 226e5c31af7Sopenharmony_ci %15 = OpTypeFunction %2 %9 %9 227e5c31af7Sopenharmony_ci %20 = OpTypeFunction %6 %9 228e5c31af7Sopenharmony_ci %24 = OpConstant %6 0 229e5c31af7Sopenharmony_ci %27 = OpConstant %6 1 230e5c31af7Sopenharmony_ci %28 = OpConstant %6 -1 231e5c31af7Sopenharmony_ci %30 = OpConstant %6 2 232e5c31af7Sopenharmony_ci %40 = OpTypeBool 233e5c31af7Sopenharmony_ci %43 = OpTypeInt 32 0 234e5c31af7Sopenharmony_ci %44 = OpConstant %43 10 235e5c31af7Sopenharmony_ci %45 = OpTypeArray %7 %44 236e5c31af7Sopenharmony_ci %46 = OpTypePointer Private %45 237e5c31af7Sopenharmony_ci %47 = OpVariable %46 Private 238e5c31af7Sopenharmony_ci %49 = OpTypePointer Private %6 239e5c31af7Sopenharmony_ci %66 = OpTypePointer Private %7 240e5c31af7Sopenharmony_ci %141 = OpConstant %6 9 241e5c31af7Sopenharmony_ci %151 = OpConstant %6 5 242e5c31af7Sopenharmony_ci %158 = OpConstant %6 12 243e5c31af7Sopenharmony_ci %165 = OpConstant %6 15 244e5c31af7Sopenharmony_ci %172 = OpConstant %6 7 245e5c31af7Sopenharmony_ci %179 = OpConstant %6 8 246e5c31af7Sopenharmony_ci %192 = OpConstant %6 6 247e5c31af7Sopenharmony_ci %199 = OpConstant %6 17 248e5c31af7Sopenharmony_ci %206 = OpConstant %6 13 249e5c31af7Sopenharmony_ci %219 = OpConstant %6 20 250e5c31af7Sopenharmony_ci %251 = OpTypeFloat 32 251e5c31af7Sopenharmony_ci %252 = OpTypeVector %251 4 252e5c31af7Sopenharmony_ci %253 = OpTypePointer Output %252 253e5c31af7Sopenharmony_ci %254 = OpVariable %253 Output 254e5c31af7Sopenharmony_ci %255 = OpConstant %251 1 255e5c31af7Sopenharmony_ci %256 = OpConstant %251 0 256e5c31af7Sopenharmony_ci %257 = OpConstantComposite %252 %255 %256 %256 %255 257e5c31af7Sopenharmony_ci %259 = OpConstantComposite %252 %256 %256 %255 %255 258e5c31af7Sopenharmony_ci %4 = OpFunction %2 None %3 259e5c31af7Sopenharmony_ci %5 = OpLabel 260e5c31af7Sopenharmony_ci %140 = OpVariable %9 Function 261e5c31af7Sopenharmony_ci %142 = OpVariable %8 Function 262e5c31af7Sopenharmony_ci %145 = OpVariable %9 Function 263e5c31af7Sopenharmony_ci %152 = OpVariable %9 Function 264e5c31af7Sopenharmony_ci %154 = OpVariable %9 Function 265e5c31af7Sopenharmony_ci %159 = OpVariable %9 Function 266e5c31af7Sopenharmony_ci %161 = OpVariable %9 Function 267e5c31af7Sopenharmony_ci %166 = OpVariable %9 Function 268e5c31af7Sopenharmony_ci %168 = OpVariable %9 Function 269e5c31af7Sopenharmony_ci %173 = OpVariable %9 Function 270e5c31af7Sopenharmony_ci %175 = OpVariable %9 Function 271e5c31af7Sopenharmony_ci %180 = OpVariable %9 Function 272e5c31af7Sopenharmony_ci %182 = OpVariable %9 Function 273e5c31af7Sopenharmony_ci %186 = OpVariable %9 Function 274e5c31af7Sopenharmony_ci %188 = OpVariable %9 Function 275e5c31af7Sopenharmony_ci %193 = OpVariable %9 Function 276e5c31af7Sopenharmony_ci %195 = OpVariable %9 Function 277e5c31af7Sopenharmony_ci %200 = OpVariable %9 Function 278e5c31af7Sopenharmony_ci %202 = OpVariable %9 Function 279e5c31af7Sopenharmony_ci %207 = OpVariable %9 Function 280e5c31af7Sopenharmony_ci %209 = OpVariable %9 Function 281e5c31af7Sopenharmony_ci %211 = OpVariable %9 Function 282e5c31af7Sopenharmony_ci %212 = OpVariable %9 Function 283e5c31af7Sopenharmony_ci %221 = OpVariable %9 Function 284e5c31af7Sopenharmony_ci %222 = OpVariable %9 Function 285e5c31af7Sopenharmony_ci OpStore %140 %24 286e5c31af7Sopenharmony_ci %143 = OpAccessChain %66 %47 %24 287e5c31af7Sopenharmony_ci %144 = OpLoad %7 %143 288e5c31af7Sopenharmony_ci OpStore %142 %144 289e5c31af7Sopenharmony_ci OpStore %145 %141 290e5c31af7Sopenharmony_ci %146 = OpFunctionCall %2 %13 %142 %145 291e5c31af7Sopenharmony_ci %147 = OpLoad %7 %142 292e5c31af7Sopenharmony_ci %148 = OpAccessChain %66 %47 %24 293e5c31af7Sopenharmony_ci OpStore %148 %147 294e5c31af7Sopenharmony_ci %149 = OpLoad %6 %140 295e5c31af7Sopenharmony_ci %150 = OpIAdd %6 %149 %27 296e5c31af7Sopenharmony_ci OpStore %140 %150 297e5c31af7Sopenharmony_ci %153 = OpLoad %6 %140 298e5c31af7Sopenharmony_ci OpStore %152 %153 299e5c31af7Sopenharmony_ci OpStore %154 %151 300e5c31af7Sopenharmony_ci %155 = OpFunctionCall %2 %18 %152 %154 301e5c31af7Sopenharmony_ci %156 = OpLoad %6 %140 302e5c31af7Sopenharmony_ci %157 = OpIAdd %6 %156 %27 303e5c31af7Sopenharmony_ci OpStore %140 %157 304e5c31af7Sopenharmony_ci %160 = OpLoad %6 %140 305e5c31af7Sopenharmony_ci OpStore %159 %160 306e5c31af7Sopenharmony_ci OpStore %161 %158 307e5c31af7Sopenharmony_ci %162 = OpFunctionCall %2 %18 %159 %161 308e5c31af7Sopenharmony_ci %163 = OpLoad %6 %140 309e5c31af7Sopenharmony_ci %164 = OpIAdd %6 %163 %27 310e5c31af7Sopenharmony_ci OpStore %140 %164 311e5c31af7Sopenharmony_ci %167 = OpLoad %6 %140 312e5c31af7Sopenharmony_ci OpStore %166 %167 313e5c31af7Sopenharmony_ci OpStore %168 %165 314e5c31af7Sopenharmony_ci %169 = OpFunctionCall %2 %18 %166 %168 315e5c31af7Sopenharmony_ci %170 = OpLoad %6 %140 316e5c31af7Sopenharmony_ci %171 = OpIAdd %6 %170 %27 317e5c31af7Sopenharmony_ci OpStore %140 %171 318e5c31af7Sopenharmony_ci %174 = OpLoad %6 %140 319e5c31af7Sopenharmony_ci OpStore %173 %174 320e5c31af7Sopenharmony_ci OpStore %175 %172 321e5c31af7Sopenharmony_ci %176 = OpFunctionCall %2 %18 %173 %175 322e5c31af7Sopenharmony_ci %177 = OpLoad %6 %140 323e5c31af7Sopenharmony_ci %178 = OpIAdd %6 %177 %27 324e5c31af7Sopenharmony_ci OpStore %140 %178 325e5c31af7Sopenharmony_ci %181 = OpLoad %6 %140 326e5c31af7Sopenharmony_ci OpStore %180 %181 327e5c31af7Sopenharmony_ci OpStore %182 %179 328e5c31af7Sopenharmony_ci %183 = OpFunctionCall %2 %18 %180 %182 329e5c31af7Sopenharmony_ci %184 = OpLoad %6 %140 330e5c31af7Sopenharmony_ci %185 = OpIAdd %6 %184 %27 331e5c31af7Sopenharmony_ci OpStore %140 %185 332e5c31af7Sopenharmony_ci %187 = OpLoad %6 %140 333e5c31af7Sopenharmony_ci OpStore %186 %187 334e5c31af7Sopenharmony_ci OpStore %188 %30 335e5c31af7Sopenharmony_ci %189 = OpFunctionCall %2 %18 %186 %188 336e5c31af7Sopenharmony_ci %190 = OpLoad %6 %140 337e5c31af7Sopenharmony_ci %191 = OpIAdd %6 %190 %27 338e5c31af7Sopenharmony_ci OpStore %140 %191 339e5c31af7Sopenharmony_ci %194 = OpLoad %6 %140 340e5c31af7Sopenharmony_ci OpStore %193 %194 341e5c31af7Sopenharmony_ci OpStore %195 %192 342e5c31af7Sopenharmony_ci %196 = OpFunctionCall %2 %18 %193 %195 343e5c31af7Sopenharmony_ci %197 = OpLoad %6 %140 344e5c31af7Sopenharmony_ci %198 = OpIAdd %6 %197 %27 345e5c31af7Sopenharmony_ci OpStore %140 %198 346e5c31af7Sopenharmony_ci %201 = OpLoad %6 %140 347e5c31af7Sopenharmony_ci OpStore %200 %201 348e5c31af7Sopenharmony_ci OpStore %202 %199 349e5c31af7Sopenharmony_ci %203 = OpFunctionCall %2 %18 %200 %202 350e5c31af7Sopenharmony_ci %204 = OpLoad %6 %140 351e5c31af7Sopenharmony_ci %205 = OpIAdd %6 %204 %27 352e5c31af7Sopenharmony_ci OpStore %140 %205 353e5c31af7Sopenharmony_ci %208 = OpLoad %6 %140 354e5c31af7Sopenharmony_ci OpStore %207 %208 355e5c31af7Sopenharmony_ci OpStore %209 %206 356e5c31af7Sopenharmony_ci %210 = OpFunctionCall %2 %18 %207 %209 357e5c31af7Sopenharmony_ci OpStore %211 %24 358e5c31af7Sopenharmony_ci OpStore %212 %24 359e5c31af7Sopenharmony_ci OpBranch %213 360e5c31af7Sopenharmony_ci %213 = OpLabel 361e5c31af7Sopenharmony_ci OpLoopMerge %215 %216 None 362e5c31af7Sopenharmony_ci OpBranch %217 363e5c31af7Sopenharmony_ci %217 = OpLabel 364e5c31af7Sopenharmony_ci %218 = OpLoad %6 %212 365e5c31af7Sopenharmony_ci %220 = OpSLessThan %40 %218 %219 366e5c31af7Sopenharmony_ci OpBranchConditional %220 %214 %215 367e5c31af7Sopenharmony_ci %214 = OpLabel 368e5c31af7Sopenharmony_ci %223 = OpLoad %6 %212 369e5c31af7Sopenharmony_ci OpStore %222 %223 370e5c31af7Sopenharmony_ci %224 = OpFunctionCall %6 %22 %222 371e5c31af7Sopenharmony_ci OpStore %221 %224 372e5c31af7Sopenharmony_ci %225 = OpLoad %6 %212 373e5c31af7Sopenharmony_ci OpSelectionMerge %228 None 374e5c31af7Sopenharmony_ci OpSwitch %225 %227 9 %226 5 %226 12 %226 15 %226 7 %226 8 %226 2 %226 6 %226 17 %226 13 %226 375e5c31af7Sopenharmony_ci %227 = OpLabel 376e5c31af7Sopenharmony_ci %237 = OpLoad %6 %221 377e5c31af7Sopenharmony_ci %238 = OpIEqual %40 %237 %28 378e5c31af7Sopenharmony_ci OpSelectionMerge %240 None 379e5c31af7Sopenharmony_ci OpBranchConditional %238 %239 %240 380e5c31af7Sopenharmony_ci %239 = OpLabel 381e5c31af7Sopenharmony_ci %241 = OpLoad %6 %211 382e5c31af7Sopenharmony_ci %242 = OpIAdd %6 %241 %27 383e5c31af7Sopenharmony_ci OpStore %211 %242 384e5c31af7Sopenharmony_ci OpBranch %240 385e5c31af7Sopenharmony_ci %240 = OpLabel 386e5c31af7Sopenharmony_ci OpBranch %228 387e5c31af7Sopenharmony_ci %226 = OpLabel 388e5c31af7Sopenharmony_ci %229 = OpLoad %6 %221 389e5c31af7Sopenharmony_ci %230 = OpLoad %6 %212 390e5c31af7Sopenharmony_ci %231 = OpIEqual %40 %229 %230 391e5c31af7Sopenharmony_ci OpSelectionMerge %233 None 392e5c31af7Sopenharmony_ci OpBranchConditional %231 %232 %233 393e5c31af7Sopenharmony_ci %232 = OpLabel 394e5c31af7Sopenharmony_ci %234 = OpLoad %6 %211 395e5c31af7Sopenharmony_ci %235 = OpIAdd %6 %234 %27 396e5c31af7Sopenharmony_ci OpStore %211 %235 397e5c31af7Sopenharmony_ci OpBranch %233 398e5c31af7Sopenharmony_ci %233 = OpLabel 399e5c31af7Sopenharmony_ci OpBranch %228 400e5c31af7Sopenharmony_ci %228 = OpLabel 401e5c31af7Sopenharmony_ci OpBranch %216 402e5c31af7Sopenharmony_ci %216 = OpLabel 403e5c31af7Sopenharmony_ci %245 = OpLoad %6 %212 404e5c31af7Sopenharmony_ci %246 = OpIAdd %6 %245 %27 405e5c31af7Sopenharmony_ci OpStore %212 %246 406e5c31af7Sopenharmony_ci OpBranch %213 407e5c31af7Sopenharmony_ci %215 = OpLabel 408e5c31af7Sopenharmony_ci %247 = OpLoad %6 %211 409e5c31af7Sopenharmony_ci %248 = OpIEqual %40 %247 %219 410e5c31af7Sopenharmony_ci OpSelectionMerge %250 None 411e5c31af7Sopenharmony_ci OpBranchConditional %248 %249 %258 412e5c31af7Sopenharmony_ci %249 = OpLabel 413e5c31af7Sopenharmony_ci OpStore %254 %257 414e5c31af7Sopenharmony_ci OpBranch %250 415e5c31af7Sopenharmony_ci %258 = OpLabel 416e5c31af7Sopenharmony_ci OpStore %254 %259 417e5c31af7Sopenharmony_ci OpBranch %250 418e5c31af7Sopenharmony_ci %250 = OpLabel 419e5c31af7Sopenharmony_ci OpReturn 420e5c31af7Sopenharmony_ci OpFunctionEnd 421e5c31af7Sopenharmony_ci %13 = OpFunction %2 None %10 422e5c31af7Sopenharmony_ci %11 = OpFunctionParameter %8 423e5c31af7Sopenharmony_ci %12 = OpFunctionParameter %9 424e5c31af7Sopenharmony_ci %14 = OpLabel 425e5c31af7Sopenharmony_ci %25 = OpLoad %6 %12 426e5c31af7Sopenharmony_ci %26 = OpAccessChain %9 %11 %24 427e5c31af7Sopenharmony_ci OpStore %26 %25 428e5c31af7Sopenharmony_ci %29 = OpAccessChain %9 %11 %27 429e5c31af7Sopenharmony_ci OpStore %29 %28 430e5c31af7Sopenharmony_ci %31 = OpAccessChain %9 %11 %30 431e5c31af7Sopenharmony_ci OpStore %31 %28 432e5c31af7Sopenharmony_ci OpReturn 433e5c31af7Sopenharmony_ci OpFunctionEnd 434e5c31af7Sopenharmony_ci %18 = OpFunction %2 None %15 435e5c31af7Sopenharmony_ci %16 = OpFunctionParameter %9 436e5c31af7Sopenharmony_ci %17 = OpFunctionParameter %9 437e5c31af7Sopenharmony_ci %19 = OpLabel 438e5c31af7Sopenharmony_ci %32 = OpVariable %9 Function 439e5c31af7Sopenharmony_ci %65 = OpVariable %8 Function 440e5c31af7Sopenharmony_ci %69 = OpVariable %9 Function 441e5c31af7Sopenharmony_ci %91 = OpVariable %8 Function 442e5c31af7Sopenharmony_ci %94 = OpVariable %9 Function 443e5c31af7Sopenharmony_ci OpStore %32 %24 444e5c31af7Sopenharmony_ci OpBranch %33 445e5c31af7Sopenharmony_ci %33 = OpLabel 446e5c31af7Sopenharmony_ci OpLoopMerge %35 %36 None 447e5c31af7Sopenharmony_ci OpBranch %37 448e5c31af7Sopenharmony_ci %37 = OpLabel 449e5c31af7Sopenharmony_ci %38 = OpLoad %6 %32 450e5c31af7Sopenharmony_ci %39 = OpLoad %6 %16 451e5c31af7Sopenharmony_ci %41 = OpSLessThanEqual %40 %38 %39 452e5c31af7Sopenharmony_ci OpBranchConditional %41 %34 %35 453e5c31af7Sopenharmony_ci %34 = OpLabel 454e5c31af7Sopenharmony_ci %42 = OpLoad %6 %17 455e5c31af7Sopenharmony_ci %48 = OpLoad %6 %32 456e5c31af7Sopenharmony_ci %50 = OpAccessChain %49 %47 %48 %24 457e5c31af7Sopenharmony_ci %51 = OpLoad %6 %50 458e5c31af7Sopenharmony_ci %52 = OpSLessThanEqual %40 %42 %51 459e5c31af7Sopenharmony_ci OpSelectionMerge %54 None 460e5c31af7Sopenharmony_ci OpBranchConditional %52 %53 %80 461e5c31af7Sopenharmony_ci %53 = OpLabel 462e5c31af7Sopenharmony_ci %55 = OpLoad %6 %32 463e5c31af7Sopenharmony_ci %56 = OpAccessChain %49 %47 %55 %27 464e5c31af7Sopenharmony_ci %57 = OpLoad %6 %56 465e5c31af7Sopenharmony_ci %58 = OpIEqual %40 %57 %28 466e5c31af7Sopenharmony_ci OpSelectionMerge %60 None 467e5c31af7Sopenharmony_ci OpBranchConditional %58 %59 %75 468e5c31af7Sopenharmony_ci %59 = OpLabel 469e5c31af7Sopenharmony_ci %61 = OpLoad %6 %32 470e5c31af7Sopenharmony_ci %62 = OpLoad %6 %16 471e5c31af7Sopenharmony_ci %63 = OpAccessChain %49 %47 %61 %27 472e5c31af7Sopenharmony_ci OpStore %63 %62 473e5c31af7Sopenharmony_ci %64 = OpLoad %6 %16 474e5c31af7Sopenharmony_ci %67 = OpAccessChain %66 %47 %64 475e5c31af7Sopenharmony_ci %68 = OpLoad %7 %67 476e5c31af7Sopenharmony_ci OpStore %65 %68 477e5c31af7Sopenharmony_ci %70 = OpLoad %6 %17 478e5c31af7Sopenharmony_ci OpStore %69 %70 479e5c31af7Sopenharmony_ci %71 = OpFunctionCall %2 %13 %65 %69 480e5c31af7Sopenharmony_ci %72 = OpLoad %7 %65 481e5c31af7Sopenharmony_ci %73 = OpAccessChain %66 %47 %64 482e5c31af7Sopenharmony_ci OpStore %73 %72 483e5c31af7Sopenharmony_ci OpReturn 484e5c31af7Sopenharmony_ci %75 = OpLabel 485e5c31af7Sopenharmony_ci %76 = OpLoad %6 %32 486e5c31af7Sopenharmony_ci %77 = OpAccessChain %49 %47 %76 %27 487e5c31af7Sopenharmony_ci %78 = OpLoad %6 %77 488e5c31af7Sopenharmony_ci OpStore %32 %78 489e5c31af7Sopenharmony_ci OpBranch %36 490e5c31af7Sopenharmony_ci %60 = OpLabel 491e5c31af7Sopenharmony_ci OpUnreachable 492e5c31af7Sopenharmony_ci %80 = OpLabel 493e5c31af7Sopenharmony_ci %81 = OpLoad %6 %32 494e5c31af7Sopenharmony_ci %82 = OpAccessChain %49 %47 %81 %30 495e5c31af7Sopenharmony_ci %83 = OpLoad %6 %82 496e5c31af7Sopenharmony_ci %84 = OpIEqual %40 %83 %28 497e5c31af7Sopenharmony_ci OpSelectionMerge %86 None 498e5c31af7Sopenharmony_ci OpBranchConditional %84 %85 %100 499e5c31af7Sopenharmony_ci %85 = OpLabel 500e5c31af7Sopenharmony_ci %87 = OpLoad %6 %32 501e5c31af7Sopenharmony_ci %88 = OpLoad %6 %16 502e5c31af7Sopenharmony_ci %89 = OpAccessChain %49 %47 %87 %30 503e5c31af7Sopenharmony_ci OpStore %89 %88 504e5c31af7Sopenharmony_ci %90 = OpLoad %6 %16 505e5c31af7Sopenharmony_ci %92 = OpAccessChain %66 %47 %90 506e5c31af7Sopenharmony_ci %93 = OpLoad %7 %92 507e5c31af7Sopenharmony_ci OpStore %91 %93 508e5c31af7Sopenharmony_ci %95 = OpLoad %6 %17 509e5c31af7Sopenharmony_ci OpStore %94 %95 510e5c31af7Sopenharmony_ci %96 = OpFunctionCall %2 %13 %91 %94 511e5c31af7Sopenharmony_ci %97 = OpLoad %7 %91 512e5c31af7Sopenharmony_ci %98 = OpAccessChain %66 %47 %90 513e5c31af7Sopenharmony_ci OpStore %98 %97 514e5c31af7Sopenharmony_ci OpReturn 515e5c31af7Sopenharmony_ci %100 = OpLabel 516e5c31af7Sopenharmony_ci %101 = OpLoad %6 %32 517e5c31af7Sopenharmony_ci %102 = OpAccessChain %49 %47 %101 %30 518e5c31af7Sopenharmony_ci %103 = OpLoad %6 %102 519e5c31af7Sopenharmony_ci OpStore %32 %103 520e5c31af7Sopenharmony_ci OpBranch %36 521e5c31af7Sopenharmony_ci %86 = OpLabel 522e5c31af7Sopenharmony_ci OpUnreachable 523e5c31af7Sopenharmony_ci %54 = OpLabel 524e5c31af7Sopenharmony_ci OpUnreachable 525e5c31af7Sopenharmony_ci %36 = OpLabel 526e5c31af7Sopenharmony_ci OpBranch %33 527e5c31af7Sopenharmony_ci %35 = OpLabel 528e5c31af7Sopenharmony_ci OpReturn 529e5c31af7Sopenharmony_ci OpFunctionEnd 530e5c31af7Sopenharmony_ci %22 = OpFunction %6 None %20 531e5c31af7Sopenharmony_ci %21 = OpFunctionParameter %9 532e5c31af7Sopenharmony_ci %23 = OpLabel 533e5c31af7Sopenharmony_ci %105 = OpVariable %9 Function 534e5c31af7Sopenharmony_ci %113 = OpVariable %8 Function 535e5c31af7Sopenharmony_ci %129 = OpVariable %9 Function 536e5c31af7Sopenharmony_ci OpStore %105 %24 537e5c31af7Sopenharmony_ci OpBranch %106 538e5c31af7Sopenharmony_ci %106 = OpLabel 539e5c31af7Sopenharmony_ci OpLoopMerge %108 %109 None 540e5c31af7Sopenharmony_ci OpBranch %110 541e5c31af7Sopenharmony_ci %110 = OpLabel 542e5c31af7Sopenharmony_ci %111 = OpLoad %6 %105 543e5c31af7Sopenharmony_ci %112 = OpINotEqual %40 %111 %28 544e5c31af7Sopenharmony_ci OpBranchConditional %112 %107 %108 545e5c31af7Sopenharmony_ci %107 = OpLabel 546e5c31af7Sopenharmony_ci %114 = OpLoad %6 %105 547e5c31af7Sopenharmony_ci %115 = OpAccessChain %66 %47 %114 548e5c31af7Sopenharmony_ci %116 = OpLoad %7 %115 549e5c31af7Sopenharmony_ci OpStore %113 %116 550e5c31af7Sopenharmony_ci %117 = OpAccessChain %9 %113 %24 551e5c31af7Sopenharmony_ci %118 = OpLoad %6 %117 552e5c31af7Sopenharmony_ci %119 = OpLoad %6 %21 553e5c31af7Sopenharmony_ci %120 = OpIEqual %40 %118 %119 554e5c31af7Sopenharmony_ci OpSelectionMerge %122 None 555e5c31af7Sopenharmony_ci OpBranchConditional %120 %121 %122 556e5c31af7Sopenharmony_ci %121 = OpLabel 557e5c31af7Sopenharmony_ci %123 = OpLoad %6 %21 558e5c31af7Sopenharmony_ci OpReturnValue %123 559e5c31af7Sopenharmony_ci %122 = OpLabel 560e5c31af7Sopenharmony_ci %125 = OpLoad %6 %21 561e5c31af7Sopenharmony_ci %126 = OpAccessChain %9 %113 %24 562e5c31af7Sopenharmony_ci %127 = OpLoad %6 %126 563e5c31af7Sopenharmony_ci %128 = OpSGreaterThan %40 %125 %127 564e5c31af7Sopenharmony_ci OpSelectionMerge %131 None 565e5c31af7Sopenharmony_ci OpBranchConditional %128 %130 %134 566e5c31af7Sopenharmony_ci %130 = OpLabel 567e5c31af7Sopenharmony_ci %132 = OpAccessChain %9 %113 %30 568e5c31af7Sopenharmony_ci %133 = OpLoad %6 %132 569e5c31af7Sopenharmony_ci OpStore %129 %133 570e5c31af7Sopenharmony_ci OpBranch %131 571e5c31af7Sopenharmony_ci %134 = OpLabel 572e5c31af7Sopenharmony_ci %135 = OpAccessChain %9 %113 %27 573e5c31af7Sopenharmony_ci %136 = OpLoad %6 %135 574e5c31af7Sopenharmony_ci OpStore %129 %136 575e5c31af7Sopenharmony_ci OpBranch %131 576e5c31af7Sopenharmony_ci %131 = OpLabel 577e5c31af7Sopenharmony_ci %137 = OpLoad %6 %129 578e5c31af7Sopenharmony_ci OpStore %105 %137 579e5c31af7Sopenharmony_ci OpBranch %109 580e5c31af7Sopenharmony_ci %109 = OpLabel 581e5c31af7Sopenharmony_ci OpBranch %106 582e5c31af7Sopenharmony_ci %108 = OpLabel 583e5c31af7Sopenharmony_ci OpReturnValue %28 584e5c31af7Sopenharmony_ci OpFunctionEnd 585e5c31af7Sopenharmony_ciEND 586e5c31af7Sopenharmony_ci 587e5c31af7Sopenharmony_ci 588e5c31af7Sopenharmony_ciBUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM 589e5c31af7Sopenharmony_ci 590e5c31af7Sopenharmony_ciPIPELINE graphics reference_pipeline 591e5c31af7Sopenharmony_ci ATTACH reference_vertex_shader 592e5c31af7Sopenharmony_ci ATTACH reference_fragment_shader 593e5c31af7Sopenharmony_ci FRAMEBUFFER_SIZE 256 256 594e5c31af7Sopenharmony_ci BIND BUFFER reference_framebuffer AS color LOCATION 0 595e5c31af7Sopenharmony_ciEND 596e5c31af7Sopenharmony_ciCLEAR_COLOR reference_pipeline 0 0 0 255 597e5c31af7Sopenharmony_ci 598e5c31af7Sopenharmony_ciCLEAR reference_pipeline 599e5c31af7Sopenharmony_ciRUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256 600e5c31af7Sopenharmony_ci 601e5c31af7Sopenharmony_ci 602e5c31af7Sopenharmony_ciSHADER vertex variant_vertex_shader PASSTHROUGH 603e5c31af7Sopenharmony_ci 604e5c31af7Sopenharmony_ci# variant_fragment_shader is derived from the following GLSL: 605e5c31af7Sopenharmony_ci# #version 320 es 606e5c31af7Sopenharmony_ci# precision highp float; 607e5c31af7Sopenharmony_ci# 608e5c31af7Sopenharmony_ci# precision highp int; 609e5c31af7Sopenharmony_ci# 610e5c31af7Sopenharmony_ci# layout(set = 0, binding = 0) uniform buf0 611e5c31af7Sopenharmony_ci# { 612e5c31af7Sopenharmony_ci# vec2 injectionSwitch; // x == 0.0, y == 1.0 613e5c31af7Sopenharmony_ci# }; 614e5c31af7Sopenharmony_ci# layout(location = 0) out vec4 _GLF_color; 615e5c31af7Sopenharmony_ci# 616e5c31af7Sopenharmony_ci# struct BST 617e5c31af7Sopenharmony_ci# { 618e5c31af7Sopenharmony_ci# int data; 619e5c31af7Sopenharmony_ci# int leftIndex; 620e5c31af7Sopenharmony_ci# int rightIndex; 621e5c31af7Sopenharmony_ci# }; 622e5c31af7Sopenharmony_ci# 623e5c31af7Sopenharmony_ci# BST tree[10]; 624e5c31af7Sopenharmony_ci# 625e5c31af7Sopenharmony_ci# void makeTreeNode(inout BST tree, int data) 626e5c31af7Sopenharmony_ci# { 627e5c31af7Sopenharmony_ci# tree.data = data; 628e5c31af7Sopenharmony_ci# tree.leftIndex = -1; 629e5c31af7Sopenharmony_ci# tree.rightIndex = -1; 630e5c31af7Sopenharmony_ci# } 631e5c31af7Sopenharmony_ci# void insert(int treeIndex, int data) 632e5c31af7Sopenharmony_ci# { 633e5c31af7Sopenharmony_ci# int baseIndex = 0; 634e5c31af7Sopenharmony_ci# while (baseIndex <= treeIndex) 635e5c31af7Sopenharmony_ci# { 636e5c31af7Sopenharmony_ci# if (data <= tree[baseIndex].data) 637e5c31af7Sopenharmony_ci# { 638e5c31af7Sopenharmony_ci# if (tree[baseIndex].leftIndex == -1) 639e5c31af7Sopenharmony_ci# { 640e5c31af7Sopenharmony_ci# tree[baseIndex].leftIndex = treeIndex; 641e5c31af7Sopenharmony_ci# // Always true. 642e5c31af7Sopenharmony_ci# if (injectionSwitch.x < injectionSwitch.y) 643e5c31af7Sopenharmony_ci# { 644e5c31af7Sopenharmony_ci# makeTreeNode(tree[treeIndex], data); 645e5c31af7Sopenharmony_ci# } 646e5c31af7Sopenharmony_ci# // Always true. 647e5c31af7Sopenharmony_ci# if (injectionSwitch.x < injectionSwitch.y) 648e5c31af7Sopenharmony_ci# { 649e5c31af7Sopenharmony_ci# return; 650e5c31af7Sopenharmony_ci# } 651e5c31af7Sopenharmony_ci# } 652e5c31af7Sopenharmony_ci# else 653e5c31af7Sopenharmony_ci# { 654e5c31af7Sopenharmony_ci# baseIndex = tree[baseIndex].leftIndex; 655e5c31af7Sopenharmony_ci# continue; 656e5c31af7Sopenharmony_ci# } 657e5c31af7Sopenharmony_ci# } 658e5c31af7Sopenharmony_ci# else 659e5c31af7Sopenharmony_ci# { 660e5c31af7Sopenharmony_ci# // Conditional statement's result is irrelevant. 661e5c31af7Sopenharmony_ci# if ((injectionSwitch.x < injectionSwitch.y ? tree[baseIndex].rightIndex : tree[baseIndex].rightIndex) == -1) 662e5c31af7Sopenharmony_ci# { 663e5c31af7Sopenharmony_ci# tree[baseIndex].rightIndex = treeIndex; 664e5c31af7Sopenharmony_ci# makeTreeNode(tree[treeIndex], data); 665e5c31af7Sopenharmony_ci# return; 666e5c31af7Sopenharmony_ci# } 667e5c31af7Sopenharmony_ci# else 668e5c31af7Sopenharmony_ci# { 669e5c31af7Sopenharmony_ci# baseIndex = tree[baseIndex].rightIndex; 670e5c31af7Sopenharmony_ci# continue; 671e5c31af7Sopenharmony_ci# } 672e5c31af7Sopenharmony_ci# } 673e5c31af7Sopenharmony_ci# // Always false. 674e5c31af7Sopenharmony_ci# if (injectionSwitch.x > injectionSwitch.y) 675e5c31af7Sopenharmony_ci# { 676e5c31af7Sopenharmony_ci# return; 677e5c31af7Sopenharmony_ci# } 678e5c31af7Sopenharmony_ci# } 679e5c31af7Sopenharmony_ci# } 680e5c31af7Sopenharmony_ci# int search(int target) 681e5c31af7Sopenharmony_ci# { 682e5c31af7Sopenharmony_ci# BST currentNode; 683e5c31af7Sopenharmony_ci# int index = 0; 684e5c31af7Sopenharmony_ci# while (index != -1) 685e5c31af7Sopenharmony_ci# { 686e5c31af7Sopenharmony_ci# currentNode = tree[index]; 687e5c31af7Sopenharmony_ci# if (currentNode.data == target) 688e5c31af7Sopenharmony_ci# { 689e5c31af7Sopenharmony_ci# return target; 690e5c31af7Sopenharmony_ci# } 691e5c31af7Sopenharmony_ci# index = target > currentNode.data ? currentNode.rightIndex : currentNode.leftIndex; 692e5c31af7Sopenharmony_ci# } 693e5c31af7Sopenharmony_ci# return -1; 694e5c31af7Sopenharmony_ci# } 695e5c31af7Sopenharmony_ci# void main() 696e5c31af7Sopenharmony_ci# { 697e5c31af7Sopenharmony_ci# int treeIndex = 0; 698e5c31af7Sopenharmony_ci# makeTreeNode(tree[0], 9); 699e5c31af7Sopenharmony_ci# treeIndex++; 700e5c31af7Sopenharmony_ci# insert(treeIndex, 5); 701e5c31af7Sopenharmony_ci# treeIndex++; 702e5c31af7Sopenharmony_ci# insert(treeIndex, 12); 703e5c31af7Sopenharmony_ci# treeIndex++; 704e5c31af7Sopenharmony_ci# insert(treeIndex, 15); 705e5c31af7Sopenharmony_ci# treeIndex++; 706e5c31af7Sopenharmony_ci# insert(treeIndex, 7); 707e5c31af7Sopenharmony_ci# treeIndex++; 708e5c31af7Sopenharmony_ci# insert(treeIndex, 8); 709e5c31af7Sopenharmony_ci# treeIndex++; 710e5c31af7Sopenharmony_ci# insert(treeIndex, 2); 711e5c31af7Sopenharmony_ci# treeIndex++; 712e5c31af7Sopenharmony_ci# insert(treeIndex, 6); 713e5c31af7Sopenharmony_ci# treeIndex++; 714e5c31af7Sopenharmony_ci# insert(treeIndex, 17); 715e5c31af7Sopenharmony_ci# treeIndex++; 716e5c31af7Sopenharmony_ci# insert(treeIndex, 13); 717e5c31af7Sopenharmony_ci# int count = 0; 718e5c31af7Sopenharmony_ci# for (int i = 0; i < 20; i++) 719e5c31af7Sopenharmony_ci# { 720e5c31af7Sopenharmony_ci# int result = search(i); 721e5c31af7Sopenharmony_ci# switch (i) 722e5c31af7Sopenharmony_ci# { 723e5c31af7Sopenharmony_ci# case 9: 724e5c31af7Sopenharmony_ci# case 5: 725e5c31af7Sopenharmony_ci# case 12: 726e5c31af7Sopenharmony_ci# case 15: 727e5c31af7Sopenharmony_ci# case 7: 728e5c31af7Sopenharmony_ci# case 8: 729e5c31af7Sopenharmony_ci# case 2: 730e5c31af7Sopenharmony_ci# case 6: 731e5c31af7Sopenharmony_ci# case 17: 732e5c31af7Sopenharmony_ci# case 13: 733e5c31af7Sopenharmony_ci# if (result == i) 734e5c31af7Sopenharmony_ci# { 735e5c31af7Sopenharmony_ci# count++; 736e5c31af7Sopenharmony_ci# } 737e5c31af7Sopenharmony_ci# break; 738e5c31af7Sopenharmony_ci# default: 739e5c31af7Sopenharmony_ci# if (result == -1) 740e5c31af7Sopenharmony_ci# { 741e5c31af7Sopenharmony_ci# count++; 742e5c31af7Sopenharmony_ci# } 743e5c31af7Sopenharmony_ci# break; 744e5c31af7Sopenharmony_ci# } 745e5c31af7Sopenharmony_ci# } 746e5c31af7Sopenharmony_ci# if (count == 20) 747e5c31af7Sopenharmony_ci# { 748e5c31af7Sopenharmony_ci# _GLF_color = vec4(1.0, 0.0, 0.0, 1.0); 749e5c31af7Sopenharmony_ci# } 750e5c31af7Sopenharmony_ci# else 751e5c31af7Sopenharmony_ci# { 752e5c31af7Sopenharmony_ci# _GLF_color = vec4(0.0, 0.0, 1.0, 1.0); 753e5c31af7Sopenharmony_ci# } 754e5c31af7Sopenharmony_ci# } 755e5c31af7Sopenharmony_ciSHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 756e5c31af7Sopenharmony_ci; SPIR-V 757e5c31af7Sopenharmony_ci; Version: 1.0 758e5c31af7Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 10 759e5c31af7Sopenharmony_ci; Bound: 302 760e5c31af7Sopenharmony_ci; Schema: 0 761e5c31af7Sopenharmony_ci OpCapability Shader 762e5c31af7Sopenharmony_ci %1 = OpExtInstImport "GLSL.std.450" 763e5c31af7Sopenharmony_ci OpMemoryModel Logical GLSL450 764e5c31af7Sopenharmony_ci OpEntryPoint Fragment %4 "main" %296 765e5c31af7Sopenharmony_ci OpExecutionMode %4 OriginUpperLeft 766e5c31af7Sopenharmony_ci OpSource ESSL 320 767e5c31af7Sopenharmony_ci OpName %4 "main" 768e5c31af7Sopenharmony_ci OpName %7 "BST" 769e5c31af7Sopenharmony_ci OpMemberName %7 0 "data" 770e5c31af7Sopenharmony_ci OpMemberName %7 1 "leftIndex" 771e5c31af7Sopenharmony_ci OpMemberName %7 2 "rightIndex" 772e5c31af7Sopenharmony_ci OpName %13 "makeTreeNode(struct-BST-i1-i1-i11;i1;" 773e5c31af7Sopenharmony_ci OpName %11 "tree" 774e5c31af7Sopenharmony_ci OpName %12 "data" 775e5c31af7Sopenharmony_ci OpName %18 "insert(i1;i1;" 776e5c31af7Sopenharmony_ci OpName %16 "treeIndex" 777e5c31af7Sopenharmony_ci OpName %17 "data" 778e5c31af7Sopenharmony_ci OpName %22 "search(i1;" 779e5c31af7Sopenharmony_ci OpName %21 "target" 780e5c31af7Sopenharmony_ci OpName %32 "baseIndex" 781e5c31af7Sopenharmony_ci OpName %47 "tree" 782e5c31af7Sopenharmony_ci OpName %66 "buf0" 783e5c31af7Sopenharmony_ci OpMemberName %66 0 "injectionSwitch" 784e5c31af7Sopenharmony_ci OpName %68 "" 785e5c31af7Sopenharmony_ci OpName %80 "param" 786e5c31af7Sopenharmony_ci OpName %84 "param" 787e5c31af7Sopenharmony_ci OpName %126 "param" 788e5c31af7Sopenharmony_ci OpName %129 "param" 789e5c31af7Sopenharmony_ci OpName %148 "index" 790e5c31af7Sopenharmony_ci OpName %156 "currentNode" 791e5c31af7Sopenharmony_ci OpName %183 "treeIndex" 792e5c31af7Sopenharmony_ci OpName %185 "param" 793e5c31af7Sopenharmony_ci OpName %188 "param" 794e5c31af7Sopenharmony_ci OpName %195 "param" 795e5c31af7Sopenharmony_ci OpName %197 "param" 796e5c31af7Sopenharmony_ci OpName %202 "param" 797e5c31af7Sopenharmony_ci OpName %204 "param" 798e5c31af7Sopenharmony_ci OpName %209 "param" 799e5c31af7Sopenharmony_ci OpName %211 "param" 800e5c31af7Sopenharmony_ci OpName %216 "param" 801e5c31af7Sopenharmony_ci OpName %218 "param" 802e5c31af7Sopenharmony_ci OpName %223 "param" 803e5c31af7Sopenharmony_ci OpName %225 "param" 804e5c31af7Sopenharmony_ci OpName %229 "param" 805e5c31af7Sopenharmony_ci OpName %231 "param" 806e5c31af7Sopenharmony_ci OpName %236 "param" 807e5c31af7Sopenharmony_ci OpName %238 "param" 808e5c31af7Sopenharmony_ci OpName %243 "param" 809e5c31af7Sopenharmony_ci OpName %245 "param" 810e5c31af7Sopenharmony_ci OpName %250 "param" 811e5c31af7Sopenharmony_ci OpName %252 "param" 812e5c31af7Sopenharmony_ci OpName %254 "count" 813e5c31af7Sopenharmony_ci OpName %255 "i" 814e5c31af7Sopenharmony_ci OpName %264 "result" 815e5c31af7Sopenharmony_ci OpName %265 "param" 816e5c31af7Sopenharmony_ci OpName %296 "_GLF_color" 817e5c31af7Sopenharmony_ci OpMemberDecorate %66 0 Offset 0 818e5c31af7Sopenharmony_ci OpDecorate %66 Block 819e5c31af7Sopenharmony_ci OpDecorate %68 DescriptorSet 0 820e5c31af7Sopenharmony_ci OpDecorate %68 Binding 0 821e5c31af7Sopenharmony_ci OpDecorate %296 Location 0 822e5c31af7Sopenharmony_ci %2 = OpTypeVoid 823e5c31af7Sopenharmony_ci %3 = OpTypeFunction %2 824e5c31af7Sopenharmony_ci %6 = OpTypeInt 32 1 825e5c31af7Sopenharmony_ci %7 = OpTypeStruct %6 %6 %6 826e5c31af7Sopenharmony_ci %8 = OpTypePointer Function %7 827e5c31af7Sopenharmony_ci %9 = OpTypePointer Function %6 828e5c31af7Sopenharmony_ci %10 = OpTypeFunction %2 %8 %9 829e5c31af7Sopenharmony_ci %15 = OpTypeFunction %2 %9 %9 830e5c31af7Sopenharmony_ci %20 = OpTypeFunction %6 %9 831e5c31af7Sopenharmony_ci %24 = OpConstant %6 0 832e5c31af7Sopenharmony_ci %27 = OpConstant %6 1 833e5c31af7Sopenharmony_ci %28 = OpConstant %6 -1 834e5c31af7Sopenharmony_ci %30 = OpConstant %6 2 835e5c31af7Sopenharmony_ci %40 = OpTypeBool 836e5c31af7Sopenharmony_ci %43 = OpTypeInt 32 0 837e5c31af7Sopenharmony_ci %44 = OpConstant %43 10 838e5c31af7Sopenharmony_ci %45 = OpTypeArray %7 %44 839e5c31af7Sopenharmony_ci %46 = OpTypePointer Private %45 840e5c31af7Sopenharmony_ci %47 = OpVariable %46 Private 841e5c31af7Sopenharmony_ci %49 = OpTypePointer Private %6 842e5c31af7Sopenharmony_ci %64 = OpTypeFloat 32 843e5c31af7Sopenharmony_ci %65 = OpTypeVector %64 2 844e5c31af7Sopenharmony_ci %66 = OpTypeStruct %65 845e5c31af7Sopenharmony_ci %67 = OpTypePointer Uniform %66 846e5c31af7Sopenharmony_ci %68 = OpVariable %67 Uniform 847e5c31af7Sopenharmony_ci %69 = OpConstant %43 0 848e5c31af7Sopenharmony_ci %70 = OpTypePointer Uniform %64 849e5c31af7Sopenharmony_ci %73 = OpConstant %43 1 850e5c31af7Sopenharmony_ci %81 = OpTypePointer Private %7 851e5c31af7Sopenharmony_ci %184 = OpConstant %6 9 852e5c31af7Sopenharmony_ci %194 = OpConstant %6 5 853e5c31af7Sopenharmony_ci %201 = OpConstant %6 12 854e5c31af7Sopenharmony_ci %208 = OpConstant %6 15 855e5c31af7Sopenharmony_ci %215 = OpConstant %6 7 856e5c31af7Sopenharmony_ci %222 = OpConstant %6 8 857e5c31af7Sopenharmony_ci %235 = OpConstant %6 6 858e5c31af7Sopenharmony_ci %242 = OpConstant %6 17 859e5c31af7Sopenharmony_ci %249 = OpConstant %6 13 860e5c31af7Sopenharmony_ci %262 = OpConstant %6 20 861e5c31af7Sopenharmony_ci %294 = OpTypeVector %64 4 862e5c31af7Sopenharmony_ci %295 = OpTypePointer Output %294 863e5c31af7Sopenharmony_ci %296 = OpVariable %295 Output 864e5c31af7Sopenharmony_ci %297 = OpConstant %64 1 865e5c31af7Sopenharmony_ci %298 = OpConstant %64 0 866e5c31af7Sopenharmony_ci %299 = OpConstantComposite %294 %297 %298 %298 %297 867e5c31af7Sopenharmony_ci %301 = OpConstantComposite %294 %298 %298 %297 %297 868e5c31af7Sopenharmony_ci %4 = OpFunction %2 None %3 869e5c31af7Sopenharmony_ci %5 = OpLabel 870e5c31af7Sopenharmony_ci %183 = OpVariable %9 Function 871e5c31af7Sopenharmony_ci %185 = OpVariable %8 Function 872e5c31af7Sopenharmony_ci %188 = OpVariable %9 Function 873e5c31af7Sopenharmony_ci %195 = OpVariable %9 Function 874e5c31af7Sopenharmony_ci %197 = OpVariable %9 Function 875e5c31af7Sopenharmony_ci %202 = OpVariable %9 Function 876e5c31af7Sopenharmony_ci %204 = OpVariable %9 Function 877e5c31af7Sopenharmony_ci %209 = OpVariable %9 Function 878e5c31af7Sopenharmony_ci %211 = OpVariable %9 Function 879e5c31af7Sopenharmony_ci %216 = OpVariable %9 Function 880e5c31af7Sopenharmony_ci %218 = OpVariable %9 Function 881e5c31af7Sopenharmony_ci %223 = OpVariable %9 Function 882e5c31af7Sopenharmony_ci %225 = OpVariable %9 Function 883e5c31af7Sopenharmony_ci %229 = OpVariable %9 Function 884e5c31af7Sopenharmony_ci %231 = OpVariable %9 Function 885e5c31af7Sopenharmony_ci %236 = OpVariable %9 Function 886e5c31af7Sopenharmony_ci %238 = OpVariable %9 Function 887e5c31af7Sopenharmony_ci %243 = OpVariable %9 Function 888e5c31af7Sopenharmony_ci %245 = OpVariable %9 Function 889e5c31af7Sopenharmony_ci %250 = OpVariable %9 Function 890e5c31af7Sopenharmony_ci %252 = OpVariable %9 Function 891e5c31af7Sopenharmony_ci %254 = OpVariable %9 Function 892e5c31af7Sopenharmony_ci %255 = OpVariable %9 Function 893e5c31af7Sopenharmony_ci %264 = OpVariable %9 Function 894e5c31af7Sopenharmony_ci %265 = OpVariable %9 Function 895e5c31af7Sopenharmony_ci OpStore %183 %24 896e5c31af7Sopenharmony_ci %186 = OpAccessChain %81 %47 %24 897e5c31af7Sopenharmony_ci %187 = OpLoad %7 %186 898e5c31af7Sopenharmony_ci OpStore %185 %187 899e5c31af7Sopenharmony_ci OpStore %188 %184 900e5c31af7Sopenharmony_ci %189 = OpFunctionCall %2 %13 %185 %188 901e5c31af7Sopenharmony_ci %190 = OpLoad %7 %185 902e5c31af7Sopenharmony_ci %191 = OpAccessChain %81 %47 %24 903e5c31af7Sopenharmony_ci OpStore %191 %190 904e5c31af7Sopenharmony_ci %192 = OpLoad %6 %183 905e5c31af7Sopenharmony_ci %193 = OpIAdd %6 %192 %27 906e5c31af7Sopenharmony_ci OpStore %183 %193 907e5c31af7Sopenharmony_ci %196 = OpLoad %6 %183 908e5c31af7Sopenharmony_ci OpStore %195 %196 909e5c31af7Sopenharmony_ci OpStore %197 %194 910e5c31af7Sopenharmony_ci %198 = OpFunctionCall %2 %18 %195 %197 911e5c31af7Sopenharmony_ci %199 = OpLoad %6 %183 912e5c31af7Sopenharmony_ci %200 = OpIAdd %6 %199 %27 913e5c31af7Sopenharmony_ci OpStore %183 %200 914e5c31af7Sopenharmony_ci %203 = OpLoad %6 %183 915e5c31af7Sopenharmony_ci OpStore %202 %203 916e5c31af7Sopenharmony_ci OpStore %204 %201 917e5c31af7Sopenharmony_ci %205 = OpFunctionCall %2 %18 %202 %204 918e5c31af7Sopenharmony_ci %206 = OpLoad %6 %183 919e5c31af7Sopenharmony_ci %207 = OpIAdd %6 %206 %27 920e5c31af7Sopenharmony_ci OpStore %183 %207 921e5c31af7Sopenharmony_ci %210 = OpLoad %6 %183 922e5c31af7Sopenharmony_ci OpStore %209 %210 923e5c31af7Sopenharmony_ci OpStore %211 %208 924e5c31af7Sopenharmony_ci %212 = OpFunctionCall %2 %18 %209 %211 925e5c31af7Sopenharmony_ci %213 = OpLoad %6 %183 926e5c31af7Sopenharmony_ci %214 = OpIAdd %6 %213 %27 927e5c31af7Sopenharmony_ci OpStore %183 %214 928e5c31af7Sopenharmony_ci %217 = OpLoad %6 %183 929e5c31af7Sopenharmony_ci OpStore %216 %217 930e5c31af7Sopenharmony_ci OpStore %218 %215 931e5c31af7Sopenharmony_ci %219 = OpFunctionCall %2 %18 %216 %218 932e5c31af7Sopenharmony_ci %220 = OpLoad %6 %183 933e5c31af7Sopenharmony_ci %221 = OpIAdd %6 %220 %27 934e5c31af7Sopenharmony_ci OpStore %183 %221 935e5c31af7Sopenharmony_ci %224 = OpLoad %6 %183 936e5c31af7Sopenharmony_ci OpStore %223 %224 937e5c31af7Sopenharmony_ci OpStore %225 %222 938e5c31af7Sopenharmony_ci %226 = OpFunctionCall %2 %18 %223 %225 939e5c31af7Sopenharmony_ci %227 = OpLoad %6 %183 940e5c31af7Sopenharmony_ci %228 = OpIAdd %6 %227 %27 941e5c31af7Sopenharmony_ci OpStore %183 %228 942e5c31af7Sopenharmony_ci %230 = OpLoad %6 %183 943e5c31af7Sopenharmony_ci OpStore %229 %230 944e5c31af7Sopenharmony_ci OpStore %231 %30 945e5c31af7Sopenharmony_ci %232 = OpFunctionCall %2 %18 %229 %231 946e5c31af7Sopenharmony_ci %233 = OpLoad %6 %183 947e5c31af7Sopenharmony_ci %234 = OpIAdd %6 %233 %27 948e5c31af7Sopenharmony_ci OpStore %183 %234 949e5c31af7Sopenharmony_ci %237 = OpLoad %6 %183 950e5c31af7Sopenharmony_ci OpStore %236 %237 951e5c31af7Sopenharmony_ci OpStore %238 %235 952e5c31af7Sopenharmony_ci %239 = OpFunctionCall %2 %18 %236 %238 953e5c31af7Sopenharmony_ci %240 = OpLoad %6 %183 954e5c31af7Sopenharmony_ci %241 = OpIAdd %6 %240 %27 955e5c31af7Sopenharmony_ci OpStore %183 %241 956e5c31af7Sopenharmony_ci %244 = OpLoad %6 %183 957e5c31af7Sopenharmony_ci OpStore %243 %244 958e5c31af7Sopenharmony_ci OpStore %245 %242 959e5c31af7Sopenharmony_ci %246 = OpFunctionCall %2 %18 %243 %245 960e5c31af7Sopenharmony_ci %247 = OpLoad %6 %183 961e5c31af7Sopenharmony_ci %248 = OpIAdd %6 %247 %27 962e5c31af7Sopenharmony_ci OpStore %183 %248 963e5c31af7Sopenharmony_ci %251 = OpLoad %6 %183 964e5c31af7Sopenharmony_ci OpStore %250 %251 965e5c31af7Sopenharmony_ci OpStore %252 %249 966e5c31af7Sopenharmony_ci %253 = OpFunctionCall %2 %18 %250 %252 967e5c31af7Sopenharmony_ci OpStore %254 %24 968e5c31af7Sopenharmony_ci OpStore %255 %24 969e5c31af7Sopenharmony_ci OpBranch %256 970e5c31af7Sopenharmony_ci %256 = OpLabel 971e5c31af7Sopenharmony_ci OpLoopMerge %258 %259 None 972e5c31af7Sopenharmony_ci OpBranch %260 973e5c31af7Sopenharmony_ci %260 = OpLabel 974e5c31af7Sopenharmony_ci %261 = OpLoad %6 %255 975e5c31af7Sopenharmony_ci %263 = OpSLessThan %40 %261 %262 976e5c31af7Sopenharmony_ci OpBranchConditional %263 %257 %258 977e5c31af7Sopenharmony_ci %257 = OpLabel 978e5c31af7Sopenharmony_ci %266 = OpLoad %6 %255 979e5c31af7Sopenharmony_ci OpStore %265 %266 980e5c31af7Sopenharmony_ci %267 = OpFunctionCall %6 %22 %265 981e5c31af7Sopenharmony_ci OpStore %264 %267 982e5c31af7Sopenharmony_ci %268 = OpLoad %6 %255 983e5c31af7Sopenharmony_ci OpSelectionMerge %271 None 984e5c31af7Sopenharmony_ci OpSwitch %268 %270 9 %269 5 %269 12 %269 15 %269 7 %269 8 %269 2 %269 6 %269 17 %269 13 %269 985e5c31af7Sopenharmony_ci %270 = OpLabel 986e5c31af7Sopenharmony_ci %280 = OpLoad %6 %264 987e5c31af7Sopenharmony_ci %281 = OpIEqual %40 %280 %28 988e5c31af7Sopenharmony_ci OpSelectionMerge %283 None 989e5c31af7Sopenharmony_ci OpBranchConditional %281 %282 %283 990e5c31af7Sopenharmony_ci %282 = OpLabel 991e5c31af7Sopenharmony_ci %284 = OpLoad %6 %254 992e5c31af7Sopenharmony_ci %285 = OpIAdd %6 %284 %27 993e5c31af7Sopenharmony_ci OpStore %254 %285 994e5c31af7Sopenharmony_ci OpBranch %283 995e5c31af7Sopenharmony_ci %283 = OpLabel 996e5c31af7Sopenharmony_ci OpBranch %271 997e5c31af7Sopenharmony_ci %269 = OpLabel 998e5c31af7Sopenharmony_ci %272 = OpLoad %6 %264 999e5c31af7Sopenharmony_ci %273 = OpLoad %6 %255 1000e5c31af7Sopenharmony_ci %274 = OpIEqual %40 %272 %273 1001e5c31af7Sopenharmony_ci OpSelectionMerge %276 None 1002e5c31af7Sopenharmony_ci OpBranchConditional %274 %275 %276 1003e5c31af7Sopenharmony_ci %275 = OpLabel 1004e5c31af7Sopenharmony_ci %277 = OpLoad %6 %254 1005e5c31af7Sopenharmony_ci %278 = OpIAdd %6 %277 %27 1006e5c31af7Sopenharmony_ci OpStore %254 %278 1007e5c31af7Sopenharmony_ci OpBranch %276 1008e5c31af7Sopenharmony_ci %276 = OpLabel 1009e5c31af7Sopenharmony_ci OpBranch %271 1010e5c31af7Sopenharmony_ci %271 = OpLabel 1011e5c31af7Sopenharmony_ci OpBranch %259 1012e5c31af7Sopenharmony_ci %259 = OpLabel 1013e5c31af7Sopenharmony_ci %288 = OpLoad %6 %255 1014e5c31af7Sopenharmony_ci %289 = OpIAdd %6 %288 %27 1015e5c31af7Sopenharmony_ci OpStore %255 %289 1016e5c31af7Sopenharmony_ci OpBranch %256 1017e5c31af7Sopenharmony_ci %258 = OpLabel 1018e5c31af7Sopenharmony_ci %290 = OpLoad %6 %254 1019e5c31af7Sopenharmony_ci %291 = OpIEqual %40 %290 %262 1020e5c31af7Sopenharmony_ci OpSelectionMerge %293 None 1021e5c31af7Sopenharmony_ci OpBranchConditional %291 %292 %300 1022e5c31af7Sopenharmony_ci %292 = OpLabel 1023e5c31af7Sopenharmony_ci OpStore %296 %299 1024e5c31af7Sopenharmony_ci OpBranch %293 1025e5c31af7Sopenharmony_ci %300 = OpLabel 1026e5c31af7Sopenharmony_ci OpStore %296 %301 1027e5c31af7Sopenharmony_ci OpBranch %293 1028e5c31af7Sopenharmony_ci %293 = OpLabel 1029e5c31af7Sopenharmony_ci OpReturn 1030e5c31af7Sopenharmony_ci OpFunctionEnd 1031e5c31af7Sopenharmony_ci %13 = OpFunction %2 None %10 1032e5c31af7Sopenharmony_ci %11 = OpFunctionParameter %8 1033e5c31af7Sopenharmony_ci %12 = OpFunctionParameter %9 1034e5c31af7Sopenharmony_ci %14 = OpLabel 1035e5c31af7Sopenharmony_ci %25 = OpLoad %6 %12 1036e5c31af7Sopenharmony_ci %26 = OpAccessChain %9 %11 %24 1037e5c31af7Sopenharmony_ci OpStore %26 %25 1038e5c31af7Sopenharmony_ci %29 = OpAccessChain %9 %11 %27 1039e5c31af7Sopenharmony_ci OpStore %29 %28 1040e5c31af7Sopenharmony_ci %31 = OpAccessChain %9 %11 %30 1041e5c31af7Sopenharmony_ci OpStore %31 %28 1042e5c31af7Sopenharmony_ci OpReturn 1043e5c31af7Sopenharmony_ci OpFunctionEnd 1044e5c31af7Sopenharmony_ci %18 = OpFunction %2 None %15 1045e5c31af7Sopenharmony_ci %16 = OpFunctionParameter %9 1046e5c31af7Sopenharmony_ci %17 = OpFunctionParameter %9 1047e5c31af7Sopenharmony_ci %19 = OpLabel 1048e5c31af7Sopenharmony_ci %32 = OpVariable %9 Function 1049e5c31af7Sopenharmony_ci %80 = OpVariable %8 Function 1050e5c31af7Sopenharmony_ci %84 = OpVariable %9 Function 1051e5c31af7Sopenharmony_ci %108 = OpVariable %9 Function 1052e5c31af7Sopenharmony_ci %126 = OpVariable %8 Function 1053e5c31af7Sopenharmony_ci %129 = OpVariable %9 Function 1054e5c31af7Sopenharmony_ci OpStore %32 %24 1055e5c31af7Sopenharmony_ci OpBranch %33 1056e5c31af7Sopenharmony_ci %33 = OpLabel 1057e5c31af7Sopenharmony_ci OpLoopMerge %35 %36 None 1058e5c31af7Sopenharmony_ci OpBranch %37 1059e5c31af7Sopenharmony_ci %37 = OpLabel 1060e5c31af7Sopenharmony_ci %38 = OpLoad %6 %32 1061e5c31af7Sopenharmony_ci %39 = OpLoad %6 %16 1062e5c31af7Sopenharmony_ci %41 = OpSLessThanEqual %40 %38 %39 1063e5c31af7Sopenharmony_ci OpBranchConditional %41 %34 %35 1064e5c31af7Sopenharmony_ci %34 = OpLabel 1065e5c31af7Sopenharmony_ci %42 = OpLoad %6 %17 1066e5c31af7Sopenharmony_ci %48 = OpLoad %6 %32 1067e5c31af7Sopenharmony_ci %50 = OpAccessChain %49 %47 %48 %24 1068e5c31af7Sopenharmony_ci %51 = OpLoad %6 %50 1069e5c31af7Sopenharmony_ci %52 = OpSLessThanEqual %40 %42 %51 1070e5c31af7Sopenharmony_ci OpSelectionMerge %54 None 1071e5c31af7Sopenharmony_ci OpBranchConditional %52 %53 %102 1072e5c31af7Sopenharmony_ci %53 = OpLabel 1073e5c31af7Sopenharmony_ci %55 = OpLoad %6 %32 1074e5c31af7Sopenharmony_ci %56 = OpAccessChain %49 %47 %55 %27 1075e5c31af7Sopenharmony_ci %57 = OpLoad %6 %56 1076e5c31af7Sopenharmony_ci %58 = OpIEqual %40 %57 %28 1077e5c31af7Sopenharmony_ci OpSelectionMerge %60 None 1078e5c31af7Sopenharmony_ci OpBranchConditional %58 %59 %97 1079e5c31af7Sopenharmony_ci %59 = OpLabel 1080e5c31af7Sopenharmony_ci %61 = OpLoad %6 %32 1081e5c31af7Sopenharmony_ci %62 = OpLoad %6 %16 1082e5c31af7Sopenharmony_ci %63 = OpAccessChain %49 %47 %61 %27 1083e5c31af7Sopenharmony_ci OpStore %63 %62 1084e5c31af7Sopenharmony_ci %71 = OpAccessChain %70 %68 %24 %69 1085e5c31af7Sopenharmony_ci %72 = OpLoad %64 %71 1086e5c31af7Sopenharmony_ci %74 = OpAccessChain %70 %68 %24 %73 1087e5c31af7Sopenharmony_ci %75 = OpLoad %64 %74 1088e5c31af7Sopenharmony_ci %76 = OpFOrdLessThan %40 %72 %75 1089e5c31af7Sopenharmony_ci OpSelectionMerge %78 None 1090e5c31af7Sopenharmony_ci OpBranchConditional %76 %77 %78 1091e5c31af7Sopenharmony_ci %77 = OpLabel 1092e5c31af7Sopenharmony_ci %79 = OpLoad %6 %16 1093e5c31af7Sopenharmony_ci %82 = OpAccessChain %81 %47 %79 1094e5c31af7Sopenharmony_ci %83 = OpLoad %7 %82 1095e5c31af7Sopenharmony_ci OpStore %80 %83 1096e5c31af7Sopenharmony_ci %85 = OpLoad %6 %17 1097e5c31af7Sopenharmony_ci OpStore %84 %85 1098e5c31af7Sopenharmony_ci %86 = OpFunctionCall %2 %13 %80 %84 1099e5c31af7Sopenharmony_ci %87 = OpLoad %7 %80 1100e5c31af7Sopenharmony_ci %88 = OpAccessChain %81 %47 %79 1101e5c31af7Sopenharmony_ci OpStore %88 %87 1102e5c31af7Sopenharmony_ci OpBranch %78 1103e5c31af7Sopenharmony_ci %78 = OpLabel 1104e5c31af7Sopenharmony_ci %89 = OpAccessChain %70 %68 %24 %69 1105e5c31af7Sopenharmony_ci %90 = OpLoad %64 %89 1106e5c31af7Sopenharmony_ci %91 = OpAccessChain %70 %68 %24 %73 1107e5c31af7Sopenharmony_ci %92 = OpLoad %64 %91 1108e5c31af7Sopenharmony_ci %93 = OpFOrdLessThan %40 %90 %92 1109e5c31af7Sopenharmony_ci OpSelectionMerge %95 None 1110e5c31af7Sopenharmony_ci OpBranchConditional %93 %94 %95 1111e5c31af7Sopenharmony_ci %94 = OpLabel 1112e5c31af7Sopenharmony_ci OpReturn 1113e5c31af7Sopenharmony_ci %95 = OpLabel 1114e5c31af7Sopenharmony_ci OpBranch %60 1115e5c31af7Sopenharmony_ci %97 = OpLabel 1116e5c31af7Sopenharmony_ci %98 = OpLoad %6 %32 1117e5c31af7Sopenharmony_ci %99 = OpAccessChain %49 %47 %98 %27 1118e5c31af7Sopenharmony_ci %100 = OpLoad %6 %99 1119e5c31af7Sopenharmony_ci OpStore %32 %100 1120e5c31af7Sopenharmony_ci OpBranch %36 1121e5c31af7Sopenharmony_ci %60 = OpLabel 1122e5c31af7Sopenharmony_ci OpBranch %54 1123e5c31af7Sopenharmony_ci %102 = OpLabel 1124e5c31af7Sopenharmony_ci %103 = OpAccessChain %70 %68 %24 %69 1125e5c31af7Sopenharmony_ci %104 = OpLoad %64 %103 1126e5c31af7Sopenharmony_ci %105 = OpAccessChain %70 %68 %24 %73 1127e5c31af7Sopenharmony_ci %106 = OpLoad %64 %105 1128e5c31af7Sopenharmony_ci %107 = OpFOrdLessThan %40 %104 %106 1129e5c31af7Sopenharmony_ci OpSelectionMerge %110 None 1130e5c31af7Sopenharmony_ci OpBranchConditional %107 %109 %114 1131e5c31af7Sopenharmony_ci %109 = OpLabel 1132e5c31af7Sopenharmony_ci %111 = OpLoad %6 %32 1133e5c31af7Sopenharmony_ci %112 = OpAccessChain %49 %47 %111 %30 1134e5c31af7Sopenharmony_ci %113 = OpLoad %6 %112 1135e5c31af7Sopenharmony_ci OpStore %108 %113 1136e5c31af7Sopenharmony_ci OpBranch %110 1137e5c31af7Sopenharmony_ci %114 = OpLabel 1138e5c31af7Sopenharmony_ci %115 = OpLoad %6 %32 1139e5c31af7Sopenharmony_ci %116 = OpAccessChain %49 %47 %115 %30 1140e5c31af7Sopenharmony_ci %117 = OpLoad %6 %116 1141e5c31af7Sopenharmony_ci OpStore %108 %117 1142e5c31af7Sopenharmony_ci OpBranch %110 1143e5c31af7Sopenharmony_ci %110 = OpLabel 1144e5c31af7Sopenharmony_ci %118 = OpLoad %6 %108 1145e5c31af7Sopenharmony_ci %119 = OpIEqual %40 %118 %28 1146e5c31af7Sopenharmony_ci OpSelectionMerge %121 None 1147e5c31af7Sopenharmony_ci OpBranchConditional %119 %120 %135 1148e5c31af7Sopenharmony_ci %120 = OpLabel 1149e5c31af7Sopenharmony_ci %122 = OpLoad %6 %32 1150e5c31af7Sopenharmony_ci %123 = OpLoad %6 %16 1151e5c31af7Sopenharmony_ci %124 = OpAccessChain %49 %47 %122 %30 1152e5c31af7Sopenharmony_ci OpStore %124 %123 1153e5c31af7Sopenharmony_ci %125 = OpLoad %6 %16 1154e5c31af7Sopenharmony_ci %127 = OpAccessChain %81 %47 %125 1155e5c31af7Sopenharmony_ci %128 = OpLoad %7 %127 1156e5c31af7Sopenharmony_ci OpStore %126 %128 1157e5c31af7Sopenharmony_ci %130 = OpLoad %6 %17 1158e5c31af7Sopenharmony_ci OpStore %129 %130 1159e5c31af7Sopenharmony_ci %131 = OpFunctionCall %2 %13 %126 %129 1160e5c31af7Sopenharmony_ci %132 = OpLoad %7 %126 1161e5c31af7Sopenharmony_ci %133 = OpAccessChain %81 %47 %125 1162e5c31af7Sopenharmony_ci OpStore %133 %132 1163e5c31af7Sopenharmony_ci OpReturn 1164e5c31af7Sopenharmony_ci %135 = OpLabel 1165e5c31af7Sopenharmony_ci %136 = OpLoad %6 %32 1166e5c31af7Sopenharmony_ci %137 = OpAccessChain %49 %47 %136 %30 1167e5c31af7Sopenharmony_ci %138 = OpLoad %6 %137 1168e5c31af7Sopenharmony_ci OpStore %32 %138 1169e5c31af7Sopenharmony_ci OpBranch %36 1170e5c31af7Sopenharmony_ci %121 = OpLabel 1171e5c31af7Sopenharmony_ci OpUnreachable 1172e5c31af7Sopenharmony_ci %54 = OpLabel 1173e5c31af7Sopenharmony_ci %140 = OpAccessChain %70 %68 %24 %69 1174e5c31af7Sopenharmony_ci %141 = OpLoad %64 %140 1175e5c31af7Sopenharmony_ci %142 = OpAccessChain %70 %68 %24 %73 1176e5c31af7Sopenharmony_ci %143 = OpLoad %64 %142 1177e5c31af7Sopenharmony_ci %144 = OpFOrdGreaterThan %40 %141 %143 1178e5c31af7Sopenharmony_ci OpSelectionMerge %146 None 1179e5c31af7Sopenharmony_ci OpBranchConditional %144 %145 %146 1180e5c31af7Sopenharmony_ci %145 = OpLabel 1181e5c31af7Sopenharmony_ci OpReturn 1182e5c31af7Sopenharmony_ci %146 = OpLabel 1183e5c31af7Sopenharmony_ci OpBranch %36 1184e5c31af7Sopenharmony_ci %36 = OpLabel 1185e5c31af7Sopenharmony_ci OpBranch %33 1186e5c31af7Sopenharmony_ci %35 = OpLabel 1187e5c31af7Sopenharmony_ci OpReturn 1188e5c31af7Sopenharmony_ci OpFunctionEnd 1189e5c31af7Sopenharmony_ci %22 = OpFunction %6 None %20 1190e5c31af7Sopenharmony_ci %21 = OpFunctionParameter %9 1191e5c31af7Sopenharmony_ci %23 = OpLabel 1192e5c31af7Sopenharmony_ci %148 = OpVariable %9 Function 1193e5c31af7Sopenharmony_ci %156 = OpVariable %8 Function 1194e5c31af7Sopenharmony_ci %172 = OpVariable %9 Function 1195e5c31af7Sopenharmony_ci OpStore %148 %24 1196e5c31af7Sopenharmony_ci OpBranch %149 1197e5c31af7Sopenharmony_ci %149 = OpLabel 1198e5c31af7Sopenharmony_ci OpLoopMerge %151 %152 None 1199e5c31af7Sopenharmony_ci OpBranch %153 1200e5c31af7Sopenharmony_ci %153 = OpLabel 1201e5c31af7Sopenharmony_ci %154 = OpLoad %6 %148 1202e5c31af7Sopenharmony_ci %155 = OpINotEqual %40 %154 %28 1203e5c31af7Sopenharmony_ci OpBranchConditional %155 %150 %151 1204e5c31af7Sopenharmony_ci %150 = OpLabel 1205e5c31af7Sopenharmony_ci %157 = OpLoad %6 %148 1206e5c31af7Sopenharmony_ci %158 = OpAccessChain %81 %47 %157 1207e5c31af7Sopenharmony_ci %159 = OpLoad %7 %158 1208e5c31af7Sopenharmony_ci OpStore %156 %159 1209e5c31af7Sopenharmony_ci %160 = OpAccessChain %9 %156 %24 1210e5c31af7Sopenharmony_ci %161 = OpLoad %6 %160 1211e5c31af7Sopenharmony_ci %162 = OpLoad %6 %21 1212e5c31af7Sopenharmony_ci %163 = OpIEqual %40 %161 %162 1213e5c31af7Sopenharmony_ci OpSelectionMerge %165 None 1214e5c31af7Sopenharmony_ci OpBranchConditional %163 %164 %165 1215e5c31af7Sopenharmony_ci %164 = OpLabel 1216e5c31af7Sopenharmony_ci %166 = OpLoad %6 %21 1217e5c31af7Sopenharmony_ci OpReturnValue %166 1218e5c31af7Sopenharmony_ci %165 = OpLabel 1219e5c31af7Sopenharmony_ci %168 = OpLoad %6 %21 1220e5c31af7Sopenharmony_ci %169 = OpAccessChain %9 %156 %24 1221e5c31af7Sopenharmony_ci %170 = OpLoad %6 %169 1222e5c31af7Sopenharmony_ci %171 = OpSGreaterThan %40 %168 %170 1223e5c31af7Sopenharmony_ci OpSelectionMerge %174 None 1224e5c31af7Sopenharmony_ci OpBranchConditional %171 %173 %177 1225e5c31af7Sopenharmony_ci %173 = OpLabel 1226e5c31af7Sopenharmony_ci %175 = OpAccessChain %9 %156 %30 1227e5c31af7Sopenharmony_ci %176 = OpLoad %6 %175 1228e5c31af7Sopenharmony_ci OpStore %172 %176 1229e5c31af7Sopenharmony_ci OpBranch %174 1230e5c31af7Sopenharmony_ci %177 = OpLabel 1231e5c31af7Sopenharmony_ci %178 = OpAccessChain %9 %156 %27 1232e5c31af7Sopenharmony_ci %179 = OpLoad %6 %178 1233e5c31af7Sopenharmony_ci OpStore %172 %179 1234e5c31af7Sopenharmony_ci OpBranch %174 1235e5c31af7Sopenharmony_ci %174 = OpLabel 1236e5c31af7Sopenharmony_ci %180 = OpLoad %6 %172 1237e5c31af7Sopenharmony_ci OpStore %148 %180 1238e5c31af7Sopenharmony_ci OpBranch %152 1239e5c31af7Sopenharmony_ci %152 = OpLabel 1240e5c31af7Sopenharmony_ci OpBranch %149 1241e5c31af7Sopenharmony_ci %151 = OpLabel 1242e5c31af7Sopenharmony_ci OpReturnValue %28 1243e5c31af7Sopenharmony_ci OpFunctionEnd 1244e5c31af7Sopenharmony_ciEND 1245e5c31af7Sopenharmony_ci 1246e5c31af7Sopenharmony_ci# uniforms for variant 1247e5c31af7Sopenharmony_ci 1248e5c31af7Sopenharmony_ci# injectionSwitch 1249e5c31af7Sopenharmony_ciBUFFER variant_injectionSwitch DATA_TYPE vec2<float> DATA 1250e5c31af7Sopenharmony_ci 0.0 1.0 1251e5c31af7Sopenharmony_ciEND 1252e5c31af7Sopenharmony_ci 1253e5c31af7Sopenharmony_ciBUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM 1254e5c31af7Sopenharmony_ci 1255e5c31af7Sopenharmony_ciPIPELINE graphics variant_pipeline 1256e5c31af7Sopenharmony_ci ATTACH variant_vertex_shader 1257e5c31af7Sopenharmony_ci ATTACH variant_fragment_shader 1258e5c31af7Sopenharmony_ci FRAMEBUFFER_SIZE 256 256 1259e5c31af7Sopenharmony_ci BIND BUFFER variant_framebuffer AS color LOCATION 0 1260e5c31af7Sopenharmony_ci BIND BUFFER variant_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0 1261e5c31af7Sopenharmony_ciEND 1262e5c31af7Sopenharmony_ciCLEAR_COLOR variant_pipeline 0 0 0 255 1263e5c31af7Sopenharmony_ci 1264e5c31af7Sopenharmony_ciCLEAR variant_pipeline 1265e5c31af7Sopenharmony_ciRUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256 1266e5c31af7Sopenharmony_ci 1267e5c31af7Sopenharmony_ciEXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005 1268