1e5c31af7Sopenharmony_ci#!amber 2e5c31af7Sopenharmony_ci 3e5c31af7Sopenharmony_ci# Copyright 2019 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 an arr value set to itself squared 21e5c31af7Sopenharmony_ci 22e5c31af7Sopenharmony_ci# The test passes because shader always writes red. 23e5c31af7Sopenharmony_ci 24e5c31af7Sopenharmony_ciSHADER vertex variant_vertex_shader PASSTHROUGH 25e5c31af7Sopenharmony_ci 26e5c31af7Sopenharmony_ci# variant_fragment_shader is derived from the following GLSL: 27e5c31af7Sopenharmony_ci# #version 310 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 QuicksortObject { 35e5c31af7Sopenharmony_ci# int numbers[10]; 36e5c31af7Sopenharmony_ci# } ; 37e5c31af7Sopenharmony_ci# 38e5c31af7Sopenharmony_ci# QuicksortObject obj; 39e5c31af7Sopenharmony_ci# 40e5c31af7Sopenharmony_ci# void swap(int i, int j) 41e5c31af7Sopenharmony_ci# { 42e5c31af7Sopenharmony_ci# int temp = obj.numbers[i]; 43e5c31af7Sopenharmony_ci# obj.numbers[i] = obj.numbers[j]; 44e5c31af7Sopenharmony_ci# obj.numbers[j] = temp; 45e5c31af7Sopenharmony_ci# } 46e5c31af7Sopenharmony_ci# int performPartition(int l, int h) 47e5c31af7Sopenharmony_ci# { 48e5c31af7Sopenharmony_ci# int pivot = obj.numbers[h]; 49e5c31af7Sopenharmony_ci# int i = (l - 1); 50e5c31af7Sopenharmony_ci# for( 51e5c31af7Sopenharmony_ci# int j = l; 52e5c31af7Sopenharmony_ci# j <= h - 1; 53e5c31af7Sopenharmony_ci# j ++ 54e5c31af7Sopenharmony_ci# ) 55e5c31af7Sopenharmony_ci# { 56e5c31af7Sopenharmony_ci# if(obj.numbers[j] <= pivot) 57e5c31af7Sopenharmony_ci# { 58e5c31af7Sopenharmony_ci# i ++; 59e5c31af7Sopenharmony_ci# swap(i, j); 60e5c31af7Sopenharmony_ci# } 61e5c31af7Sopenharmony_ci# } 62e5c31af7Sopenharmony_ci# swap(i + 1, h); 63e5c31af7Sopenharmony_ci# return (i + 1); 64e5c31af7Sopenharmony_ci# } 65e5c31af7Sopenharmony_ci# void quicksort() 66e5c31af7Sopenharmony_ci# { 67e5c31af7Sopenharmony_ci# int l = 0, h = 9; 68e5c31af7Sopenharmony_ci# int stack[10]; 69e5c31af7Sopenharmony_ci# int top = - 1; 70e5c31af7Sopenharmony_ci# stack[++ top] = l; 71e5c31af7Sopenharmony_ci# stack[++ top] = h; 72e5c31af7Sopenharmony_ci# while(top >= 0) 73e5c31af7Sopenharmony_ci# { 74e5c31af7Sopenharmony_ci# h = stack[top --]; 75e5c31af7Sopenharmony_ci# l = stack[top --]; 76e5c31af7Sopenharmony_ci# int p = performPartition(l, h); 77e5c31af7Sopenharmony_ci# if(p - 1 > l) 78e5c31af7Sopenharmony_ci# { 79e5c31af7Sopenharmony_ci# stack[++ top] = l; 80e5c31af7Sopenharmony_ci# stack[++ top] = p - 1; 81e5c31af7Sopenharmony_ci# } 82e5c31af7Sopenharmony_ci# if(p + 1 < h) 83e5c31af7Sopenharmony_ci# { 84e5c31af7Sopenharmony_ci# stack[++ top] = p + 1; 85e5c31af7Sopenharmony_ci# stack[++ top] = h; 86e5c31af7Sopenharmony_ci# } 87e5c31af7Sopenharmony_ci# } 88e5c31af7Sopenharmony_ci# } 89e5c31af7Sopenharmony_ci# void main() 90e5c31af7Sopenharmony_ci# { 91e5c31af7Sopenharmony_ci# for( 92e5c31af7Sopenharmony_ci# int i = 0; 93e5c31af7Sopenharmony_ci# i < 10; 94e5c31af7Sopenharmony_ci# i ++ 95e5c31af7Sopenharmony_ci# ) 96e5c31af7Sopenharmony_ci# { 97e5c31af7Sopenharmony_ci# obj.numbers[i] = (10 - i); 98e5c31af7Sopenharmony_ci# obj.numbers[i] = obj.numbers[i] * obj.numbers[i]; 99e5c31af7Sopenharmony_ci# } 100e5c31af7Sopenharmony_ci# quicksort(); 101e5c31af7Sopenharmony_ci# 102e5c31af7Sopenharmony_ci# if (obj.numbers[0] < obj.numbers[4]) 103e5c31af7Sopenharmony_ci# _GLF_color = vec4(1.0, 0.0, 0.0, 1.0); 104e5c31af7Sopenharmony_ci# else 105e5c31af7Sopenharmony_ci# _GLF_color = vec4(0.0, 1.0, 0.0, 1.0); 106e5c31af7Sopenharmony_ci# 107e5c31af7Sopenharmony_ci# } 108e5c31af7Sopenharmony_ciSHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 109e5c31af7Sopenharmony_ci; SPIR-V 110e5c31af7Sopenharmony_ci; Version: 1.0 111e5c31af7Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 8 112e5c31af7Sopenharmony_ci; Bound: 198 113e5c31af7Sopenharmony_ci; Schema: 0 114e5c31af7Sopenharmony_ci OpCapability Shader 115e5c31af7Sopenharmony_ci %1 = OpExtInstImport "GLSL.std.450" 116e5c31af7Sopenharmony_ci OpMemoryModel Logical GLSL450 117e5c31af7Sopenharmony_ci OpEntryPoint Fragment %4 "main" %188 118e5c31af7Sopenharmony_ci OpExecutionMode %4 OriginUpperLeft 119e5c31af7Sopenharmony_ci OpSource ESSL 310 120e5c31af7Sopenharmony_ci OpName %4 "main" 121e5c31af7Sopenharmony_ci OpName %11 "swap(i1;i1;" 122e5c31af7Sopenharmony_ci OpName %9 "i" 123e5c31af7Sopenharmony_ci OpName %10 "j" 124e5c31af7Sopenharmony_ci OpName %16 "performPartition(i1;i1;" 125e5c31af7Sopenharmony_ci OpName %14 "l" 126e5c31af7Sopenharmony_ci OpName %15 "h" 127e5c31af7Sopenharmony_ci OpName %18 "quicksort(" 128e5c31af7Sopenharmony_ci OpName %20 "temp" 129e5c31af7Sopenharmony_ci OpName %24 "QuicksortObject" 130e5c31af7Sopenharmony_ci OpMemberName %24 0 "numbers" 131e5c31af7Sopenharmony_ci OpName %26 "obj" 132e5c31af7Sopenharmony_ci OpName %40 "pivot" 133e5c31af7Sopenharmony_ci OpName %44 "i" 134e5c31af7Sopenharmony_ci OpName %48 "j" 135e5c31af7Sopenharmony_ci OpName %69 "param" 136e5c31af7Sopenharmony_ci OpName %71 "param" 137e5c31af7Sopenharmony_ci OpName %78 "param" 138e5c31af7Sopenharmony_ci OpName %79 "param" 139e5c31af7Sopenharmony_ci OpName %86 "l" 140e5c31af7Sopenharmony_ci OpName %87 "h" 141e5c31af7Sopenharmony_ci OpName %89 "top" 142e5c31af7Sopenharmony_ci OpName %92 "stack" 143e5c31af7Sopenharmony_ci OpName %116 "p" 144e5c31af7Sopenharmony_ci OpName %117 "param" 145e5c31af7Sopenharmony_ci OpName %119 "param" 146e5c31af7Sopenharmony_ci OpName %152 "i" 147e5c31af7Sopenharmony_ci OpName %188 "_GLF_color" 148e5c31af7Sopenharmony_ci OpDecorate %188 Location 0 149e5c31af7Sopenharmony_ci %2 = OpTypeVoid 150e5c31af7Sopenharmony_ci %3 = OpTypeFunction %2 151e5c31af7Sopenharmony_ci %6 = OpTypeInt 32 1 152e5c31af7Sopenharmony_ci %7 = OpTypePointer Function %6 153e5c31af7Sopenharmony_ci %8 = OpTypeFunction %2 %7 %7 154e5c31af7Sopenharmony_ci %13 = OpTypeFunction %6 %7 %7 155e5c31af7Sopenharmony_ci %21 = OpTypeInt 32 0 156e5c31af7Sopenharmony_ci %22 = OpConstant %21 10 157e5c31af7Sopenharmony_ci %23 = OpTypeArray %6 %22 158e5c31af7Sopenharmony_ci %24 = OpTypeStruct %23 159e5c31af7Sopenharmony_ci %25 = OpTypePointer Private %24 160e5c31af7Sopenharmony_ci %26 = OpVariable %25 Private 161e5c31af7Sopenharmony_ci %27 = OpConstant %6 0 162e5c31af7Sopenharmony_ci %29 = OpTypePointer Private %6 163e5c31af7Sopenharmony_ci %46 = OpConstant %6 1 164e5c31af7Sopenharmony_ci %58 = OpTypeBool 165e5c31af7Sopenharmony_ci %88 = OpConstant %6 9 166e5c31af7Sopenharmony_ci %90 = OpConstant %6 -1 167e5c31af7Sopenharmony_ci %91 = OpTypePointer Function %23 168e5c31af7Sopenharmony_ci %159 = OpConstant %6 10 169e5c31af7Sopenharmony_ci %179 = OpConstant %6 4 170e5c31af7Sopenharmony_ci %185 = OpTypeFloat 32 171e5c31af7Sopenharmony_ci %186 = OpTypeVector %185 4 172e5c31af7Sopenharmony_ci %187 = OpTypePointer Output %186 173e5c31af7Sopenharmony_ci %188 = OpVariable %187 Output 174e5c31af7Sopenharmony_ci %189 = OpConstant %185 1 175e5c31af7Sopenharmony_ci %190 = OpConstant %185 0 176e5c31af7Sopenharmony_ci %191 = OpConstantComposite %186 %189 %190 %190 %189 177e5c31af7Sopenharmony_ci %193 = OpConstantComposite %186 %190 %189 %190 %189 178e5c31af7Sopenharmony_ci %194 = OpTypeVector %185 2 179e5c31af7Sopenharmony_ci %4 = OpFunction %2 None %3 180e5c31af7Sopenharmony_ci %5 = OpLabel 181e5c31af7Sopenharmony_ci %152 = OpVariable %7 Function 182e5c31af7Sopenharmony_ci OpStore %152 %27 183e5c31af7Sopenharmony_ci OpBranch %153 184e5c31af7Sopenharmony_ci %153 = OpLabel 185e5c31af7Sopenharmony_ci OpLoopMerge %155 %156 None 186e5c31af7Sopenharmony_ci OpBranch %157 187e5c31af7Sopenharmony_ci %157 = OpLabel 188e5c31af7Sopenharmony_ci %158 = OpLoad %6 %152 189e5c31af7Sopenharmony_ci %160 = OpSLessThan %58 %158 %159 190e5c31af7Sopenharmony_ci OpBranchConditional %160 %154 %155 191e5c31af7Sopenharmony_ci %154 = OpLabel 192e5c31af7Sopenharmony_ci %161 = OpLoad %6 %152 193e5c31af7Sopenharmony_ci %162 = OpLoad %6 %152 194e5c31af7Sopenharmony_ci %163 = OpISub %6 %159 %162 195e5c31af7Sopenharmony_ci %164 = OpAccessChain %29 %26 %27 %161 196e5c31af7Sopenharmony_ci OpStore %164 %163 197e5c31af7Sopenharmony_ci %165 = OpLoad %6 %152 198e5c31af7Sopenharmony_ci %166 = OpLoad %6 %152 199e5c31af7Sopenharmony_ci %167 = OpAccessChain %29 %26 %27 %166 200e5c31af7Sopenharmony_ci %168 = OpLoad %6 %167 201e5c31af7Sopenharmony_ci %169 = OpLoad %6 %152 202e5c31af7Sopenharmony_ci %170 = OpAccessChain %29 %26 %27 %169 203e5c31af7Sopenharmony_ci %171 = OpLoad %6 %170 204e5c31af7Sopenharmony_ci %172 = OpIMul %6 %168 %171 205e5c31af7Sopenharmony_ci %173 = OpAccessChain %29 %26 %27 %165 206e5c31af7Sopenharmony_ci OpStore %173 %172 207e5c31af7Sopenharmony_ci OpBranch %156 208e5c31af7Sopenharmony_ci %156 = OpLabel 209e5c31af7Sopenharmony_ci %174 = OpLoad %6 %152 210e5c31af7Sopenharmony_ci %175 = OpIAdd %6 %174 %46 211e5c31af7Sopenharmony_ci OpStore %152 %175 212e5c31af7Sopenharmony_ci OpBranch %153 213e5c31af7Sopenharmony_ci %155 = OpLabel 214e5c31af7Sopenharmony_ci %176 = OpFunctionCall %2 %18 215e5c31af7Sopenharmony_ci %177 = OpAccessChain %29 %26 %27 %27 216e5c31af7Sopenharmony_ci %178 = OpLoad %6 %177 217e5c31af7Sopenharmony_ci %180 = OpAccessChain %29 %26 %27 %179 218e5c31af7Sopenharmony_ci %181 = OpLoad %6 %180 219e5c31af7Sopenharmony_ci %182 = OpSLessThan %58 %178 %181 220e5c31af7Sopenharmony_ci OpSelectionMerge %184 None 221e5c31af7Sopenharmony_ci OpBranchConditional %182 %183 %192 222e5c31af7Sopenharmony_ci %183 = OpLabel 223e5c31af7Sopenharmony_ci OpStore %188 %191 224e5c31af7Sopenharmony_ci OpBranch %184 225e5c31af7Sopenharmony_ci %192 = OpLabel 226e5c31af7Sopenharmony_ci OpStore %188 %193 227e5c31af7Sopenharmony_ci OpBranch %184 228e5c31af7Sopenharmony_ci %184 = OpLabel 229e5c31af7Sopenharmony_ci OpReturn 230e5c31af7Sopenharmony_ci OpFunctionEnd 231e5c31af7Sopenharmony_ci %11 = OpFunction %2 None %8 232e5c31af7Sopenharmony_ci %9 = OpFunctionParameter %7 233e5c31af7Sopenharmony_ci %10 = OpFunctionParameter %7 234e5c31af7Sopenharmony_ci %12 = OpLabel 235e5c31af7Sopenharmony_ci %20 = OpVariable %7 Function 236e5c31af7Sopenharmony_ci %28 = OpLoad %6 %9 237e5c31af7Sopenharmony_ci %30 = OpAccessChain %29 %26 %27 %28 238e5c31af7Sopenharmony_ci %31 = OpLoad %6 %30 239e5c31af7Sopenharmony_ci OpStore %20 %31 240e5c31af7Sopenharmony_ci %32 = OpLoad %6 %9 241e5c31af7Sopenharmony_ci %33 = OpLoad %6 %10 242e5c31af7Sopenharmony_ci %34 = OpAccessChain %29 %26 %27 %33 243e5c31af7Sopenharmony_ci %35 = OpLoad %6 %34 244e5c31af7Sopenharmony_ci %36 = OpAccessChain %29 %26 %27 %32 245e5c31af7Sopenharmony_ci OpStore %36 %35 246e5c31af7Sopenharmony_ci %37 = OpLoad %6 %10 247e5c31af7Sopenharmony_ci %38 = OpLoad %6 %20 248e5c31af7Sopenharmony_ci %39 = OpAccessChain %29 %26 %27 %37 249e5c31af7Sopenharmony_ci OpStore %39 %38 250e5c31af7Sopenharmony_ci OpReturn 251e5c31af7Sopenharmony_ci OpFunctionEnd 252e5c31af7Sopenharmony_ci %16 = OpFunction %6 None %13 253e5c31af7Sopenharmony_ci %14 = OpFunctionParameter %7 254e5c31af7Sopenharmony_ci %15 = OpFunctionParameter %7 255e5c31af7Sopenharmony_ci %17 = OpLabel 256e5c31af7Sopenharmony_ci %40 = OpVariable %7 Function 257e5c31af7Sopenharmony_ci %44 = OpVariable %7 Function 258e5c31af7Sopenharmony_ci %48 = OpVariable %7 Function 259e5c31af7Sopenharmony_ci %69 = OpVariable %7 Function 260e5c31af7Sopenharmony_ci %71 = OpVariable %7 Function 261e5c31af7Sopenharmony_ci %78 = OpVariable %7 Function 262e5c31af7Sopenharmony_ci %79 = OpVariable %7 Function 263e5c31af7Sopenharmony_ci %41 = OpLoad %6 %15 264e5c31af7Sopenharmony_ci %42 = OpAccessChain %29 %26 %27 %41 265e5c31af7Sopenharmony_ci %43 = OpLoad %6 %42 266e5c31af7Sopenharmony_ci OpStore %40 %43 267e5c31af7Sopenharmony_ci %45 = OpLoad %6 %14 268e5c31af7Sopenharmony_ci %47 = OpISub %6 %45 %46 269e5c31af7Sopenharmony_ci OpStore %44 %47 270e5c31af7Sopenharmony_ci %49 = OpLoad %6 %14 271e5c31af7Sopenharmony_ci OpStore %48 %49 272e5c31af7Sopenharmony_ci OpBranch %50 273e5c31af7Sopenharmony_ci %50 = OpLabel 274e5c31af7Sopenharmony_ci OpLoopMerge %52 %53 None 275e5c31af7Sopenharmony_ci OpBranch %54 276e5c31af7Sopenharmony_ci %54 = OpLabel 277e5c31af7Sopenharmony_ci %55 = OpLoad %6 %48 278e5c31af7Sopenharmony_ci %56 = OpLoad %6 %15 279e5c31af7Sopenharmony_ci %57 = OpISub %6 %56 %46 280e5c31af7Sopenharmony_ci %59 = OpSLessThanEqual %58 %55 %57 281e5c31af7Sopenharmony_ci OpBranchConditional %59 %51 %52 282e5c31af7Sopenharmony_ci %51 = OpLabel 283e5c31af7Sopenharmony_ci %60 = OpLoad %6 %48 284e5c31af7Sopenharmony_ci %61 = OpAccessChain %29 %26 %27 %60 285e5c31af7Sopenharmony_ci %62 = OpLoad %6 %61 286e5c31af7Sopenharmony_ci %63 = OpLoad %6 %40 287e5c31af7Sopenharmony_ci %64 = OpSLessThanEqual %58 %62 %63 288e5c31af7Sopenharmony_ci OpSelectionMerge %66 None 289e5c31af7Sopenharmony_ci OpBranchConditional %64 %65 %66 290e5c31af7Sopenharmony_ci %65 = OpLabel 291e5c31af7Sopenharmony_ci %67 = OpLoad %6 %44 292e5c31af7Sopenharmony_ci %68 = OpIAdd %6 %67 %46 293e5c31af7Sopenharmony_ci OpStore %44 %68 294e5c31af7Sopenharmony_ci %70 = OpLoad %6 %44 295e5c31af7Sopenharmony_ci OpStore %69 %70 296e5c31af7Sopenharmony_ci %72 = OpLoad %6 %48 297e5c31af7Sopenharmony_ci OpStore %71 %72 298e5c31af7Sopenharmony_ci %73 = OpFunctionCall %2 %11 %69 %71 299e5c31af7Sopenharmony_ci OpBranch %66 300e5c31af7Sopenharmony_ci %66 = OpLabel 301e5c31af7Sopenharmony_ci OpBranch %53 302e5c31af7Sopenharmony_ci %53 = OpLabel 303e5c31af7Sopenharmony_ci %74 = OpLoad %6 %48 304e5c31af7Sopenharmony_ci %75 = OpIAdd %6 %74 %46 305e5c31af7Sopenharmony_ci OpStore %48 %75 306e5c31af7Sopenharmony_ci OpBranch %50 307e5c31af7Sopenharmony_ci %52 = OpLabel 308e5c31af7Sopenharmony_ci %76 = OpLoad %6 %44 309e5c31af7Sopenharmony_ci %77 = OpIAdd %6 %76 %46 310e5c31af7Sopenharmony_ci OpStore %78 %77 311e5c31af7Sopenharmony_ci %80 = OpLoad %6 %15 312e5c31af7Sopenharmony_ci OpStore %79 %80 313e5c31af7Sopenharmony_ci %81 = OpFunctionCall %2 %11 %78 %79 314e5c31af7Sopenharmony_ci %82 = OpLoad %6 %44 315e5c31af7Sopenharmony_ci %83 = OpIAdd %6 %82 %46 316e5c31af7Sopenharmony_ci OpReturnValue %83 317e5c31af7Sopenharmony_ci OpFunctionEnd 318e5c31af7Sopenharmony_ci %18 = OpFunction %2 None %3 319e5c31af7Sopenharmony_ci %19 = OpLabel 320e5c31af7Sopenharmony_ci %86 = OpVariable %7 Function 321e5c31af7Sopenharmony_ci %87 = OpVariable %7 Function 322e5c31af7Sopenharmony_ci %89 = OpVariable %7 Function 323e5c31af7Sopenharmony_ci %92 = OpVariable %91 Function 324e5c31af7Sopenharmony_ci %116 = OpVariable %7 Function 325e5c31af7Sopenharmony_ci %117 = OpVariable %7 Function 326e5c31af7Sopenharmony_ci %119 = OpVariable %7 Function 327e5c31af7Sopenharmony_ci OpStore %86 %27 328e5c31af7Sopenharmony_ci OpStore %87 %88 329e5c31af7Sopenharmony_ci OpStore %89 %90 330e5c31af7Sopenharmony_ci %93 = OpLoad %6 %89 331e5c31af7Sopenharmony_ci %94 = OpIAdd %6 %93 %46 332e5c31af7Sopenharmony_ci OpStore %89 %94 333e5c31af7Sopenharmony_ci %95 = OpLoad %6 %86 334e5c31af7Sopenharmony_ci %96 = OpAccessChain %7 %92 %94 335e5c31af7Sopenharmony_ci OpStore %96 %95 336e5c31af7Sopenharmony_ci %97 = OpLoad %6 %89 337e5c31af7Sopenharmony_ci %98 = OpIAdd %6 %97 %46 338e5c31af7Sopenharmony_ci OpStore %89 %98 339e5c31af7Sopenharmony_ci %99 = OpLoad %6 %87 340e5c31af7Sopenharmony_ci %100 = OpAccessChain %7 %92 %98 341e5c31af7Sopenharmony_ci OpStore %100 %99 342e5c31af7Sopenharmony_ci OpBranch %101 343e5c31af7Sopenharmony_ci %101 = OpLabel 344e5c31af7Sopenharmony_ci OpLoopMerge %103 %104 None 345e5c31af7Sopenharmony_ci OpBranch %105 346e5c31af7Sopenharmony_ci %105 = OpLabel 347e5c31af7Sopenharmony_ci %106 = OpLoad %6 %89 348e5c31af7Sopenharmony_ci %107 = OpSGreaterThanEqual %58 %106 %27 349e5c31af7Sopenharmony_ci OpBranchConditional %107 %102 %103 350e5c31af7Sopenharmony_ci %102 = OpLabel 351e5c31af7Sopenharmony_ci %108 = OpLoad %6 %89 352e5c31af7Sopenharmony_ci %109 = OpISub %6 %108 %46 353e5c31af7Sopenharmony_ci OpStore %89 %109 354e5c31af7Sopenharmony_ci %110 = OpAccessChain %7 %92 %108 355e5c31af7Sopenharmony_ci %111 = OpLoad %6 %110 356e5c31af7Sopenharmony_ci OpStore %87 %111 357e5c31af7Sopenharmony_ci %112 = OpLoad %6 %89 358e5c31af7Sopenharmony_ci %113 = OpISub %6 %112 %46 359e5c31af7Sopenharmony_ci OpStore %89 %113 360e5c31af7Sopenharmony_ci %114 = OpAccessChain %7 %92 %112 361e5c31af7Sopenharmony_ci %115 = OpLoad %6 %114 362e5c31af7Sopenharmony_ci OpStore %86 %115 363e5c31af7Sopenharmony_ci %118 = OpLoad %6 %86 364e5c31af7Sopenharmony_ci OpStore %117 %118 365e5c31af7Sopenharmony_ci %120 = OpLoad %6 %87 366e5c31af7Sopenharmony_ci OpStore %119 %120 367e5c31af7Sopenharmony_ci %121 = OpFunctionCall %6 %16 %117 %119 368e5c31af7Sopenharmony_ci OpStore %116 %121 369e5c31af7Sopenharmony_ci %122 = OpLoad %6 %116 370e5c31af7Sopenharmony_ci %123 = OpISub %6 %122 %46 371e5c31af7Sopenharmony_ci %124 = OpLoad %6 %86 372e5c31af7Sopenharmony_ci %125 = OpSGreaterThan %58 %123 %124 373e5c31af7Sopenharmony_ci OpSelectionMerge %127 None 374e5c31af7Sopenharmony_ci OpBranchConditional %125 %126 %127 375e5c31af7Sopenharmony_ci %126 = OpLabel 376e5c31af7Sopenharmony_ci %128 = OpLoad %6 %89 377e5c31af7Sopenharmony_ci %129 = OpIAdd %6 %128 %46 378e5c31af7Sopenharmony_ci OpStore %89 %129 379e5c31af7Sopenharmony_ci %130 = OpLoad %6 %86 380e5c31af7Sopenharmony_ci %131 = OpAccessChain %7 %92 %129 381e5c31af7Sopenharmony_ci OpStore %131 %130 382e5c31af7Sopenharmony_ci %132 = OpLoad %6 %89 383e5c31af7Sopenharmony_ci %133 = OpIAdd %6 %132 %46 384e5c31af7Sopenharmony_ci OpStore %89 %133 385e5c31af7Sopenharmony_ci %134 = OpLoad %6 %116 386e5c31af7Sopenharmony_ci %135 = OpISub %6 %134 %46 387e5c31af7Sopenharmony_ci %136 = OpAccessChain %7 %92 %133 388e5c31af7Sopenharmony_ci OpStore %136 %135 389e5c31af7Sopenharmony_ci OpBranch %127 390e5c31af7Sopenharmony_ci %127 = OpLabel 391e5c31af7Sopenharmony_ci %137 = OpLoad %6 %116 392e5c31af7Sopenharmony_ci %138 = OpIAdd %6 %137 %46 393e5c31af7Sopenharmony_ci %139 = OpLoad %6 %87 394e5c31af7Sopenharmony_ci %140 = OpSLessThan %58 %138 %139 395e5c31af7Sopenharmony_ci OpSelectionMerge %142 None 396e5c31af7Sopenharmony_ci OpBranchConditional %140 %141 %142 397e5c31af7Sopenharmony_ci %141 = OpLabel 398e5c31af7Sopenharmony_ci %143 = OpLoad %6 %89 399e5c31af7Sopenharmony_ci %144 = OpIAdd %6 %143 %46 400e5c31af7Sopenharmony_ci OpStore %89 %144 401e5c31af7Sopenharmony_ci %145 = OpLoad %6 %116 402e5c31af7Sopenharmony_ci %146 = OpIAdd %6 %145 %46 403e5c31af7Sopenharmony_ci %147 = OpAccessChain %7 %92 %144 404e5c31af7Sopenharmony_ci OpStore %147 %146 405e5c31af7Sopenharmony_ci %148 = OpLoad %6 %89 406e5c31af7Sopenharmony_ci %149 = OpIAdd %6 %148 %46 407e5c31af7Sopenharmony_ci OpStore %89 %149 408e5c31af7Sopenharmony_ci %150 = OpLoad %6 %87 409e5c31af7Sopenharmony_ci %151 = OpAccessChain %7 %92 %149 410e5c31af7Sopenharmony_ci OpStore %151 %150 411e5c31af7Sopenharmony_ci OpBranch %142 412e5c31af7Sopenharmony_ci %142 = OpLabel 413e5c31af7Sopenharmony_ci OpBranch %104 414e5c31af7Sopenharmony_ci %104 = OpLabel 415e5c31af7Sopenharmony_ci OpBranch %101 416e5c31af7Sopenharmony_ci %103 = OpLabel 417e5c31af7Sopenharmony_ci OpReturn 418e5c31af7Sopenharmony_ci OpFunctionEnd 419e5c31af7Sopenharmony_ciEND 420e5c31af7Sopenharmony_ci 421e5c31af7Sopenharmony_ci# uniforms for variant 422e5c31af7Sopenharmony_ci 423e5c31af7Sopenharmony_ciBUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM 424e5c31af7Sopenharmony_ci 425e5c31af7Sopenharmony_ciPIPELINE graphics variant_pipeline 426e5c31af7Sopenharmony_ci ATTACH variant_vertex_shader 427e5c31af7Sopenharmony_ci ATTACH variant_fragment_shader 428e5c31af7Sopenharmony_ci FRAMEBUFFER_SIZE 16 16 429e5c31af7Sopenharmony_ci BIND BUFFER variant_framebuffer AS color LOCATION 0 430e5c31af7Sopenharmony_ciEND 431e5c31af7Sopenharmony_ciCLEAR_COLOR variant_pipeline 0 0 0 255 432e5c31af7Sopenharmony_ci 433e5c31af7Sopenharmony_ciCLEAR variant_pipeline 434e5c31af7Sopenharmony_ciRUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16 435e5c31af7Sopenharmony_ci 436e5c31af7Sopenharmony_ciEXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255 437