1e5c31af7Sopenharmony_ci#!amber 2e5c31af7Sopenharmony_ci 3e5c31af7Sopenharmony_ci# Copyright 2021 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 coverage-gap found by the GraphicsFuzz project. 19e5c31af7Sopenharmony_ci 20e5c31af7Sopenharmony_ci# Short description: A fragment shader that covers specific LLVM code paths 21e5c31af7Sopenharmony_ci 22e5c31af7Sopenharmony_ci# The test passes because the 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 320 es 28e5c31af7Sopenharmony_ci# 29e5c31af7Sopenharmony_ci# #define _int_0 _GLF_uniform_int_values[0] 30e5c31af7Sopenharmony_ci# #define _int_7 _GLF_uniform_int_values[1] 31e5c31af7Sopenharmony_ci# #define _int_9 _GLF_uniform_int_values[2] 32e5c31af7Sopenharmony_ci# #define _int_1 _GLF_uniform_int_values[3] 33e5c31af7Sopenharmony_ci# #define _int_10 _GLF_uniform_int_values[4] 34e5c31af7Sopenharmony_ci# 35e5c31af7Sopenharmony_ci# precision highp float; 36e5c31af7Sopenharmony_ci# precision highp int; 37e5c31af7Sopenharmony_ci# 38e5c31af7Sopenharmony_ci# // Contents of _GLF_uniform_int_values: [0, 7, 9, 1, 10] 39e5c31af7Sopenharmony_ci# layout(set = 0, binding = 0) uniform buf0 40e5c31af7Sopenharmony_ci# { 41e5c31af7Sopenharmony_ci# int _GLF_uniform_int_values[5]; 42e5c31af7Sopenharmony_ci# }; 43e5c31af7Sopenharmony_ci# 44e5c31af7Sopenharmony_ci# layout(location = 0) out vec4 _GLF_color; 45e5c31af7Sopenharmony_ci# 46e5c31af7Sopenharmony_ci# int arr0[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0), arr1[10] = int[10](1, 2, 3, 4, 5, 6, 7, 8, 9, 10); 47e5c31af7Sopenharmony_ci# 48e5c31af7Sopenharmony_ci# void func(int x, int y) 49e5c31af7Sopenharmony_ci# { 50e5c31af7Sopenharmony_ci# int a = _int_1; 51e5c31af7Sopenharmony_ci# int b = _int_1; 52e5c31af7Sopenharmony_ci# 53e5c31af7Sopenharmony_ci# // Sets arr1[1..5] to zero. 54e5c31af7Sopenharmony_ci# while(x <= y) 55e5c31af7Sopenharmony_ci# { 56e5c31af7Sopenharmony_ci# if(b >= 6) 57e5c31af7Sopenharmony_ci# { 58e5c31af7Sopenharmony_ci# break; 59e5c31af7Sopenharmony_ci# } 60e5c31af7Sopenharmony_ci# 61e5c31af7Sopenharmony_ci# b++; 62e5c31af7Sopenharmony_ci# 63e5c31af7Sopenharmony_ci# arr1[a++] = arr0[_int_1]; 64e5c31af7Sopenharmony_ci# } 65e5c31af7Sopenharmony_ci# 66e5c31af7Sopenharmony_ci# // Same as arr0[x] = arr1[x]. 67e5c31af7Sopenharmony_ci# for(int i = x; i <= x; i ++) 68e5c31af7Sopenharmony_ci# { 69e5c31af7Sopenharmony_ci# arr0[i] = arr1[i]; 70e5c31af7Sopenharmony_ci# } 71e5c31af7Sopenharmony_ci# } 72e5c31af7Sopenharmony_ci# 73e5c31af7Sopenharmony_ci# void main() 74e5c31af7Sopenharmony_ci# { 75e5c31af7Sopenharmony_ci# // Iterates only i = 1. 76e5c31af7Sopenharmony_ci# for(int i = 1; i <= 1; i = 2 * i) 77e5c31af7Sopenharmony_ci# { 78e5c31af7Sopenharmony_ci# // Iterates j = 0, 2, 4, 6, and 8. 79e5c31af7Sopenharmony_ci# for(int j = 0; j < 10; j += 2 * i) 80e5c31af7Sopenharmony_ci# { 81e5c31af7Sopenharmony_ci# func(j, j + i); 82e5c31af7Sopenharmony_ci# } 83e5c31af7Sopenharmony_ci# } 84e5c31af7Sopenharmony_ci# 85e5c31af7Sopenharmony_ci# _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1); 86e5c31af7Sopenharmony_ci# 87e5c31af7Sopenharmony_ci# // Check the results and output black if unexpected values are seen. 88e5c31af7Sopenharmony_ci# int ref[10] = int[10](_int_1, _int_0, _int_0, _int_0, _int_0, _int_0, _int_7, _int_0, _int_9, _int_0); 89e5c31af7Sopenharmony_ci# for(int i = _int_0; i < _int_10; i++) 90e5c31af7Sopenharmony_ci# { 91e5c31af7Sopenharmony_ci# if(arr0[i] != ref[i]) 92e5c31af7Sopenharmony_ci# { 93e5c31af7Sopenharmony_ci# _GLF_color = vec4(_int_0); 94e5c31af7Sopenharmony_ci# } 95e5c31af7Sopenharmony_ci# } 96e5c31af7Sopenharmony_ci# } 97e5c31af7Sopenharmony_ciSHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 98e5c31af7Sopenharmony_ci; SPIR-V 99e5c31af7Sopenharmony_ci; Version: 1.0 100e5c31af7Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 10 101e5c31af7Sopenharmony_ci; Bound: 181 102e5c31af7Sopenharmony_ci; Schema: 0 103e5c31af7Sopenharmony_ci OpCapability Shader 104e5c31af7Sopenharmony_ci %1 = OpExtInstImport "GLSL.std.450" 105e5c31af7Sopenharmony_ci OpMemoryModel Logical GLSL450 106e5c31af7Sopenharmony_ci OpEntryPoint Fragment %4 "main" %117 107e5c31af7Sopenharmony_ci OpExecutionMode %4 OriginUpperLeft 108e5c31af7Sopenharmony_ci OpSource ESSL 320 109e5c31af7Sopenharmony_ci OpName %4 "main" 110e5c31af7Sopenharmony_ci OpName %11 "func(i1;i1;" 111e5c31af7Sopenharmony_ci OpName %9 "x" 112e5c31af7Sopenharmony_ci OpName %10 "y" 113e5c31af7Sopenharmony_ci OpName %17 "arr0" 114e5c31af7Sopenharmony_ci OpName %20 "arr1" 115e5c31af7Sopenharmony_ci OpName %32 "a" 116e5c31af7Sopenharmony_ci OpName %35 "buf0" 117e5c31af7Sopenharmony_ci OpMemberName %35 0 "_GLF_uniform_int_values" 118e5c31af7Sopenharmony_ci OpName %37 "" 119e5c31af7Sopenharmony_ci OpName %41 "b" 120e5c31af7Sopenharmony_ci OpName %68 "i" 121e5c31af7Sopenharmony_ci OpName %85 "i" 122e5c31af7Sopenharmony_ci OpName %93 "j" 123e5c31af7Sopenharmony_ci OpName %104 "param" 124e5c31af7Sopenharmony_ci OpName %106 "param" 125e5c31af7Sopenharmony_ci OpName %117 "_GLF_color" 126e5c31af7Sopenharmony_ci OpName %132 "ref" 127e5c31af7Sopenharmony_ci OpName %154 "i" 128e5c31af7Sopenharmony_ci OpDecorate %34 ArrayStride 16 129e5c31af7Sopenharmony_ci OpMemberDecorate %35 0 Offset 0 130e5c31af7Sopenharmony_ci OpDecorate %35 Block 131e5c31af7Sopenharmony_ci OpDecorate %37 DescriptorSet 0 132e5c31af7Sopenharmony_ci OpDecorate %37 Binding 0 133e5c31af7Sopenharmony_ci OpDecorate %117 Location 0 134e5c31af7Sopenharmony_ci %2 = OpTypeVoid 135e5c31af7Sopenharmony_ci %3 = OpTypeFunction %2 136e5c31af7Sopenharmony_ci %6 = OpTypeInt 32 1 137e5c31af7Sopenharmony_ci %7 = OpTypePointer Function %6 138e5c31af7Sopenharmony_ci %8 = OpTypeFunction %2 %7 %7 139e5c31af7Sopenharmony_ci %13 = OpTypeInt 32 0 140e5c31af7Sopenharmony_ci %14 = OpConstant %13 10 141e5c31af7Sopenharmony_ci %15 = OpTypeArray %6 %14 142e5c31af7Sopenharmony_ci %16 = OpTypePointer Private %15 143e5c31af7Sopenharmony_ci %17 = OpVariable %16 Private 144e5c31af7Sopenharmony_ci %18 = OpConstant %6 0 145e5c31af7Sopenharmony_ci %19 = OpConstantComposite %15 %18 %18 %18 %18 %18 %18 %18 %18 %18 %18 146e5c31af7Sopenharmony_ci %20 = OpVariable %16 Private 147e5c31af7Sopenharmony_ci %21 = OpConstant %6 1 148e5c31af7Sopenharmony_ci %22 = OpConstant %6 2 149e5c31af7Sopenharmony_ci %23 = OpConstant %6 3 150e5c31af7Sopenharmony_ci %24 = OpConstant %6 4 151e5c31af7Sopenharmony_ci %25 = OpConstant %6 5 152e5c31af7Sopenharmony_ci %26 = OpConstant %6 6 153e5c31af7Sopenharmony_ci %27 = OpConstant %6 7 154e5c31af7Sopenharmony_ci %28 = OpConstant %6 8 155e5c31af7Sopenharmony_ci %29 = OpConstant %6 9 156e5c31af7Sopenharmony_ci %30 = OpConstant %6 10 157e5c31af7Sopenharmony_ci %31 = OpConstantComposite %15 %21 %22 %23 %24 %25 %26 %27 %28 %29 %30 158e5c31af7Sopenharmony_ci %33 = OpConstant %13 5 159e5c31af7Sopenharmony_ci %34 = OpTypeArray %6 %33 160e5c31af7Sopenharmony_ci %35 = OpTypeStruct %34 161e5c31af7Sopenharmony_ci %36 = OpTypePointer Uniform %35 162e5c31af7Sopenharmony_ci %37 = OpVariable %36 Uniform 163e5c31af7Sopenharmony_ci %38 = OpTypePointer Uniform %6 164e5c31af7Sopenharmony_ci %51 = OpTypeBool 165e5c31af7Sopenharmony_ci %64 = OpTypePointer Private %6 166e5c31af7Sopenharmony_ci %114 = OpTypeFloat 32 167e5c31af7Sopenharmony_ci %115 = OpTypeVector %114 4 168e5c31af7Sopenharmony_ci %116 = OpTypePointer Output %115 169e5c31af7Sopenharmony_ci %117 = OpVariable %116 Output 170e5c31af7Sopenharmony_ci %131 = OpTypePointer Function %15 171e5c31af7Sopenharmony_ci %4 = OpFunction %2 None %3 172e5c31af7Sopenharmony_ci %5 = OpLabel 173e5c31af7Sopenharmony_ci %85 = OpVariable %7 Function 174e5c31af7Sopenharmony_ci %93 = OpVariable %7 Function 175e5c31af7Sopenharmony_ci %104 = OpVariable %7 Function 176e5c31af7Sopenharmony_ci %106 = OpVariable %7 Function 177e5c31af7Sopenharmony_ci %132 = OpVariable %131 Function 178e5c31af7Sopenharmony_ci %154 = OpVariable %7 Function 179e5c31af7Sopenharmony_ci OpStore %17 %19 180e5c31af7Sopenharmony_ci OpStore %20 %31 181e5c31af7Sopenharmony_ci OpStore %85 %21 182e5c31af7Sopenharmony_ci OpBranch %86 183e5c31af7Sopenharmony_ci %86 = OpLabel 184e5c31af7Sopenharmony_ci OpLoopMerge %88 %89 None 185e5c31af7Sopenharmony_ci OpBranch %90 186e5c31af7Sopenharmony_ci %90 = OpLabel 187e5c31af7Sopenharmony_ci %91 = OpLoad %6 %85 188e5c31af7Sopenharmony_ci %92 = OpSLessThanEqual %51 %91 %21 189e5c31af7Sopenharmony_ci OpBranchConditional %92 %87 %88 190e5c31af7Sopenharmony_ci %87 = OpLabel 191e5c31af7Sopenharmony_ci OpStore %93 %18 192e5c31af7Sopenharmony_ci OpBranch %94 193e5c31af7Sopenharmony_ci %94 = OpLabel 194e5c31af7Sopenharmony_ci OpLoopMerge %96 %97 None 195e5c31af7Sopenharmony_ci OpBranch %98 196e5c31af7Sopenharmony_ci %98 = OpLabel 197e5c31af7Sopenharmony_ci %99 = OpLoad %6 %93 198e5c31af7Sopenharmony_ci %100 = OpSLessThan %51 %99 %30 199e5c31af7Sopenharmony_ci OpBranchConditional %100 %95 %96 200e5c31af7Sopenharmony_ci %95 = OpLabel 201e5c31af7Sopenharmony_ci %101 = OpLoad %6 %93 202e5c31af7Sopenharmony_ci %102 = OpLoad %6 %85 203e5c31af7Sopenharmony_ci %103 = OpIAdd %6 %101 %102 204e5c31af7Sopenharmony_ci %105 = OpLoad %6 %93 205e5c31af7Sopenharmony_ci OpStore %104 %105 206e5c31af7Sopenharmony_ci OpStore %106 %103 207e5c31af7Sopenharmony_ci %107 = OpFunctionCall %2 %11 %104 %106 208e5c31af7Sopenharmony_ci OpBranch %97 209e5c31af7Sopenharmony_ci %97 = OpLabel 210e5c31af7Sopenharmony_ci %108 = OpLoad %6 %85 211e5c31af7Sopenharmony_ci %109 = OpIMul %6 %22 %108 212e5c31af7Sopenharmony_ci %110 = OpLoad %6 %93 213e5c31af7Sopenharmony_ci %111 = OpIAdd %6 %110 %109 214e5c31af7Sopenharmony_ci OpStore %93 %111 215e5c31af7Sopenharmony_ci OpBranch %94 216e5c31af7Sopenharmony_ci %96 = OpLabel 217e5c31af7Sopenharmony_ci OpBranch %89 218e5c31af7Sopenharmony_ci %89 = OpLabel 219e5c31af7Sopenharmony_ci %112 = OpLoad %6 %85 220e5c31af7Sopenharmony_ci %113 = OpIMul %6 %22 %112 221e5c31af7Sopenharmony_ci OpStore %85 %113 222e5c31af7Sopenharmony_ci OpBranch %86 223e5c31af7Sopenharmony_ci %88 = OpLabel 224e5c31af7Sopenharmony_ci %118 = OpAccessChain %38 %37 %18 %23 225e5c31af7Sopenharmony_ci %119 = OpLoad %6 %118 226e5c31af7Sopenharmony_ci %120 = OpConvertSToF %114 %119 227e5c31af7Sopenharmony_ci %121 = OpAccessChain %38 %37 %18 %18 228e5c31af7Sopenharmony_ci %122 = OpLoad %6 %121 229e5c31af7Sopenharmony_ci %123 = OpConvertSToF %114 %122 230e5c31af7Sopenharmony_ci %124 = OpAccessChain %38 %37 %18 %18 231e5c31af7Sopenharmony_ci %125 = OpLoad %6 %124 232e5c31af7Sopenharmony_ci %126 = OpConvertSToF %114 %125 233e5c31af7Sopenharmony_ci %127 = OpAccessChain %38 %37 %18 %23 234e5c31af7Sopenharmony_ci %128 = OpLoad %6 %127 235e5c31af7Sopenharmony_ci %129 = OpConvertSToF %114 %128 236e5c31af7Sopenharmony_ci %130 = OpCompositeConstruct %115 %120 %123 %126 %129 237e5c31af7Sopenharmony_ci OpStore %117 %130 238e5c31af7Sopenharmony_ci %133 = OpAccessChain %38 %37 %18 %23 239e5c31af7Sopenharmony_ci %134 = OpLoad %6 %133 240e5c31af7Sopenharmony_ci %135 = OpAccessChain %38 %37 %18 %18 241e5c31af7Sopenharmony_ci %136 = OpLoad %6 %135 242e5c31af7Sopenharmony_ci %137 = OpAccessChain %38 %37 %18 %18 243e5c31af7Sopenharmony_ci %138 = OpLoad %6 %137 244e5c31af7Sopenharmony_ci %139 = OpAccessChain %38 %37 %18 %18 245e5c31af7Sopenharmony_ci %140 = OpLoad %6 %139 246e5c31af7Sopenharmony_ci %141 = OpAccessChain %38 %37 %18 %18 247e5c31af7Sopenharmony_ci %142 = OpLoad %6 %141 248e5c31af7Sopenharmony_ci %143 = OpAccessChain %38 %37 %18 %18 249e5c31af7Sopenharmony_ci %144 = OpLoad %6 %143 250e5c31af7Sopenharmony_ci %145 = OpAccessChain %38 %37 %18 %21 251e5c31af7Sopenharmony_ci %146 = OpLoad %6 %145 252e5c31af7Sopenharmony_ci %147 = OpAccessChain %38 %37 %18 %18 253e5c31af7Sopenharmony_ci %148 = OpLoad %6 %147 254e5c31af7Sopenharmony_ci %149 = OpAccessChain %38 %37 %18 %22 255e5c31af7Sopenharmony_ci %150 = OpLoad %6 %149 256e5c31af7Sopenharmony_ci %151 = OpAccessChain %38 %37 %18 %18 257e5c31af7Sopenharmony_ci %152 = OpLoad %6 %151 258e5c31af7Sopenharmony_ci %153 = OpCompositeConstruct %15 %134 %136 %138 %140 %142 %144 %146 %148 %150 %152 259e5c31af7Sopenharmony_ci OpStore %132 %153 260e5c31af7Sopenharmony_ci %155 = OpAccessChain %38 %37 %18 %18 261e5c31af7Sopenharmony_ci %156 = OpLoad %6 %155 262e5c31af7Sopenharmony_ci OpStore %154 %156 263e5c31af7Sopenharmony_ci OpBranch %157 264e5c31af7Sopenharmony_ci %157 = OpLabel 265e5c31af7Sopenharmony_ci OpLoopMerge %159 %160 None 266e5c31af7Sopenharmony_ci OpBranch %161 267e5c31af7Sopenharmony_ci %161 = OpLabel 268e5c31af7Sopenharmony_ci %162 = OpLoad %6 %154 269e5c31af7Sopenharmony_ci %163 = OpAccessChain %38 %37 %18 %24 270e5c31af7Sopenharmony_ci %164 = OpLoad %6 %163 271e5c31af7Sopenharmony_ci %165 = OpSLessThan %51 %162 %164 272e5c31af7Sopenharmony_ci OpBranchConditional %165 %158 %159 273e5c31af7Sopenharmony_ci %158 = OpLabel 274e5c31af7Sopenharmony_ci %166 = OpLoad %6 %154 275e5c31af7Sopenharmony_ci %167 = OpAccessChain %64 %17 %166 276e5c31af7Sopenharmony_ci %168 = OpLoad %6 %167 277e5c31af7Sopenharmony_ci %169 = OpLoad %6 %154 278e5c31af7Sopenharmony_ci %170 = OpAccessChain %7 %132 %169 279e5c31af7Sopenharmony_ci %171 = OpLoad %6 %170 280e5c31af7Sopenharmony_ci %172 = OpINotEqual %51 %168 %171 281e5c31af7Sopenharmony_ci OpSelectionMerge %174 None 282e5c31af7Sopenharmony_ci OpBranchConditional %172 %173 %174 283e5c31af7Sopenharmony_ci %173 = OpLabel 284e5c31af7Sopenharmony_ci %175 = OpAccessChain %38 %37 %18 %18 285e5c31af7Sopenharmony_ci %176 = OpLoad %6 %175 286e5c31af7Sopenharmony_ci %177 = OpConvertSToF %114 %176 287e5c31af7Sopenharmony_ci %178 = OpCompositeConstruct %115 %177 %177 %177 %177 288e5c31af7Sopenharmony_ci OpStore %117 %178 289e5c31af7Sopenharmony_ci OpBranch %174 290e5c31af7Sopenharmony_ci %174 = OpLabel 291e5c31af7Sopenharmony_ci OpBranch %160 292e5c31af7Sopenharmony_ci %160 = OpLabel 293e5c31af7Sopenharmony_ci %179 = OpLoad %6 %154 294e5c31af7Sopenharmony_ci %180 = OpIAdd %6 %179 %21 295e5c31af7Sopenharmony_ci OpStore %154 %180 296e5c31af7Sopenharmony_ci OpBranch %157 297e5c31af7Sopenharmony_ci %159 = OpLabel 298e5c31af7Sopenharmony_ci OpReturn 299e5c31af7Sopenharmony_ci OpFunctionEnd 300e5c31af7Sopenharmony_ci %11 = OpFunction %2 None %8 301e5c31af7Sopenharmony_ci %9 = OpFunctionParameter %7 302e5c31af7Sopenharmony_ci %10 = OpFunctionParameter %7 303e5c31af7Sopenharmony_ci %12 = OpLabel 304e5c31af7Sopenharmony_ci %32 = OpVariable %7 Function 305e5c31af7Sopenharmony_ci %41 = OpVariable %7 Function 306e5c31af7Sopenharmony_ci %68 = OpVariable %7 Function 307e5c31af7Sopenharmony_ci %39 = OpAccessChain %38 %37 %18 %23 308e5c31af7Sopenharmony_ci %40 = OpLoad %6 %39 309e5c31af7Sopenharmony_ci OpStore %32 %40 310e5c31af7Sopenharmony_ci %42 = OpAccessChain %38 %37 %18 %23 311e5c31af7Sopenharmony_ci %43 = OpLoad %6 %42 312e5c31af7Sopenharmony_ci OpStore %41 %43 313e5c31af7Sopenharmony_ci OpBranch %44 314e5c31af7Sopenharmony_ci %44 = OpLabel 315e5c31af7Sopenharmony_ci OpLoopMerge %46 %47 None 316e5c31af7Sopenharmony_ci OpBranch %48 317e5c31af7Sopenharmony_ci %48 = OpLabel 318e5c31af7Sopenharmony_ci %49 = OpLoad %6 %9 319e5c31af7Sopenharmony_ci %50 = OpLoad %6 %10 320e5c31af7Sopenharmony_ci %52 = OpSLessThanEqual %51 %49 %50 321e5c31af7Sopenharmony_ci OpBranchConditional %52 %45 %46 322e5c31af7Sopenharmony_ci %45 = OpLabel 323e5c31af7Sopenharmony_ci %53 = OpLoad %6 %41 324e5c31af7Sopenharmony_ci %54 = OpSGreaterThanEqual %51 %53 %26 325e5c31af7Sopenharmony_ci OpSelectionMerge %56 None 326e5c31af7Sopenharmony_ci OpBranchConditional %54 %55 %56 327e5c31af7Sopenharmony_ci %55 = OpLabel 328e5c31af7Sopenharmony_ci OpBranch %46 329e5c31af7Sopenharmony_ci %56 = OpLabel 330e5c31af7Sopenharmony_ci %58 = OpLoad %6 %41 331e5c31af7Sopenharmony_ci %59 = OpIAdd %6 %58 %21 332e5c31af7Sopenharmony_ci OpStore %41 %59 333e5c31af7Sopenharmony_ci %60 = OpLoad %6 %32 334e5c31af7Sopenharmony_ci %61 = OpIAdd %6 %60 %21 335e5c31af7Sopenharmony_ci OpStore %32 %61 336e5c31af7Sopenharmony_ci %62 = OpAccessChain %38 %37 %18 %23 337e5c31af7Sopenharmony_ci %63 = OpLoad %6 %62 338e5c31af7Sopenharmony_ci %65 = OpAccessChain %64 %17 %63 339e5c31af7Sopenharmony_ci %66 = OpLoad %6 %65 340e5c31af7Sopenharmony_ci %67 = OpAccessChain %64 %20 %60 341e5c31af7Sopenharmony_ci OpStore %67 %66 342e5c31af7Sopenharmony_ci OpBranch %47 343e5c31af7Sopenharmony_ci %47 = OpLabel 344e5c31af7Sopenharmony_ci OpBranch %44 345e5c31af7Sopenharmony_ci %46 = OpLabel 346e5c31af7Sopenharmony_ci %69 = OpLoad %6 %9 347e5c31af7Sopenharmony_ci OpStore %68 %69 348e5c31af7Sopenharmony_ci OpBranch %70 349e5c31af7Sopenharmony_ci %70 = OpLabel 350e5c31af7Sopenharmony_ci OpLoopMerge %72 %73 None 351e5c31af7Sopenharmony_ci OpBranch %74 352e5c31af7Sopenharmony_ci %74 = OpLabel 353e5c31af7Sopenharmony_ci %75 = OpLoad %6 %68 354e5c31af7Sopenharmony_ci %76 = OpLoad %6 %9 355e5c31af7Sopenharmony_ci %77 = OpSLessThanEqual %51 %75 %76 356e5c31af7Sopenharmony_ci OpBranchConditional %77 %71 %72 357e5c31af7Sopenharmony_ci %71 = OpLabel 358e5c31af7Sopenharmony_ci %78 = OpLoad %6 %68 359e5c31af7Sopenharmony_ci %79 = OpLoad %6 %68 360e5c31af7Sopenharmony_ci %80 = OpAccessChain %64 %20 %79 361e5c31af7Sopenharmony_ci %81 = OpLoad %6 %80 362e5c31af7Sopenharmony_ci %82 = OpAccessChain %64 %17 %78 363e5c31af7Sopenharmony_ci OpStore %82 %81 364e5c31af7Sopenharmony_ci OpBranch %73 365e5c31af7Sopenharmony_ci %73 = OpLabel 366e5c31af7Sopenharmony_ci %83 = OpLoad %6 %68 367e5c31af7Sopenharmony_ci %84 = OpIAdd %6 %83 %21 368e5c31af7Sopenharmony_ci OpStore %68 %84 369e5c31af7Sopenharmony_ci OpBranch %70 370e5c31af7Sopenharmony_ci %72 = OpLabel 371e5c31af7Sopenharmony_ci OpReturn 372e5c31af7Sopenharmony_ci OpFunctionEnd 373e5c31af7Sopenharmony_ciEND 374e5c31af7Sopenharmony_ci 375e5c31af7Sopenharmony_ci# uniforms for variant 376e5c31af7Sopenharmony_ci 377e5c31af7Sopenharmony_ci# _GLF_uniform_int_values 378e5c31af7Sopenharmony_ciBUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA 379e5c31af7Sopenharmony_ci 0 7 9 1 10 380e5c31af7Sopenharmony_ciEND 381e5c31af7Sopenharmony_ci 382e5c31af7Sopenharmony_ciBUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM 383e5c31af7Sopenharmony_ci 384e5c31af7Sopenharmony_ciPIPELINE graphics variant_pipeline 385e5c31af7Sopenharmony_ci ATTACH variant_vertex_shader 386e5c31af7Sopenharmony_ci ATTACH variant_fragment_shader 387e5c31af7Sopenharmony_ci FRAMEBUFFER_SIZE 16 16 388e5c31af7Sopenharmony_ci BIND BUFFER variant_framebuffer AS color LOCATION 0 389e5c31af7Sopenharmony_ci BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0 390e5c31af7Sopenharmony_ciEND 391e5c31af7Sopenharmony_ciCLEAR_COLOR variant_pipeline 0 0 0 255 392e5c31af7Sopenharmony_ci 393e5c31af7Sopenharmony_ciCLEAR variant_pipeline 394e5c31af7Sopenharmony_ciRUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16 395e5c31af7Sopenharmony_ci 396e5c31af7Sopenharmony_ciEXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255 397