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