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_1 _GLF_uniform_int_values[0] 30e5c31af7Sopenharmony_ci# #define _int_0 _GLF_uniform_int_values[1] 31e5c31af7Sopenharmony_ci# #define _int_10 _GLF_uniform_int_values[2] 32e5c31af7Sopenharmony_ci# #define _float_1_0 _GLF_uniform_float_values[0] 33e5c31af7Sopenharmony_ci# #define _float_2_0 _GLF_uniform_float_values[1] 34e5c31af7Sopenharmony_ci# #define _float_3_0 _GLF_uniform_float_values[2] 35e5c31af7Sopenharmony_ci# #define _float_4_0 _GLF_uniform_float_values[3] 36e5c31af7Sopenharmony_ci# #define _float_5_0 _GLF_uniform_float_values[4] 37e5c31af7Sopenharmony_ci# #define _float_6_0 _GLF_uniform_float_values[5] 38e5c31af7Sopenharmony_ci# #define _float_7_0 _GLF_uniform_float_values[6] 39e5c31af7Sopenharmony_ci# #define _float_8_0 _GLF_uniform_float_values[7] 40e5c31af7Sopenharmony_ci# #define _float_9_0 _GLF_uniform_float_values[8] 41e5c31af7Sopenharmony_ci# #define _float_10_0 _GLF_uniform_float_values[9] 42e5c31af7Sopenharmony_ci# #define _float_0_0 _GLF_uniform_float_values[10] 43e5c31af7Sopenharmony_ci# 44e5c31af7Sopenharmony_ci# precision highp float; 45e5c31af7Sopenharmony_ci# precision highp int; 46e5c31af7Sopenharmony_ci# 47e5c31af7Sopenharmony_ci# // Contents of _GLF_uniform_float_values: [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 0.0] 48e5c31af7Sopenharmony_ci# layout(set = 0, binding = 0) uniform buf0 49e5c31af7Sopenharmony_ci# { 50e5c31af7Sopenharmony_ci# float _GLF_uniform_float_values[11]; 51e5c31af7Sopenharmony_ci# }; 52e5c31af7Sopenharmony_ci# // Contents of _GLF_uniform_int_values: [1, 0, 10] 53e5c31af7Sopenharmony_ci# layout(set = 0, binding = 1) uniform buf1 54e5c31af7Sopenharmony_ci# { 55e5c31af7Sopenharmony_ci# int _GLF_uniform_int_values[3]; 56e5c31af7Sopenharmony_ci# }; 57e5c31af7Sopenharmony_ci# // Contents of injectionSwitch: [0.0, 1.0] 58e5c31af7Sopenharmony_ci# layout(set = 0, binding = 2) uniform buf2 59e5c31af7Sopenharmony_ci# { 60e5c31af7Sopenharmony_ci# vec2 injectionSwitch; 61e5c31af7Sopenharmony_ci# }; 62e5c31af7Sopenharmony_ci# layout(location = 0) out vec4 _GLF_color; 63e5c31af7Sopenharmony_ci# 64e5c31af7Sopenharmony_ci# void main() 65e5c31af7Sopenharmony_ci# { 66e5c31af7Sopenharmony_ci# float data[10] = float[10](_float_1_0, _float_2_0, _float_3_0, _float_4_0, _float_5_0, _float_6_0, _float_7_0, _float_8_0, _float_9_0, _float_10_0); 67e5c31af7Sopenharmony_ci# 68e5c31af7Sopenharmony_ci# // This loop copies data[1] to indices two and up. 69e5c31af7Sopenharmony_ci# for(int i = 0; i < 10; i ++) 70e5c31af7Sopenharmony_ci# { 71e5c31af7Sopenharmony_ci# for(int j = 0; j < 10; j ++) 72e5c31af7Sopenharmony_ci# { 73e5c31af7Sopenharmony_ci# // Skips all other iterations except j >= i. The inner loop has no dependency of j, 74e5c31af7Sopenharmony_ci# // thus it just does data[i] = data[1] multiple times when i > 1. 75e5c31af7Sopenharmony_ci# if(j < i) 76e5c31af7Sopenharmony_ci# { 77e5c31af7Sopenharmony_ci# continue; 78e5c31af7Sopenharmony_ci# } 79e5c31af7Sopenharmony_ci# 80e5c31af7Sopenharmony_ci# float f0 = data[i]; 81e5c31af7Sopenharmony_ci# float f1 = data[_int_1]; 82e5c31af7Sopenharmony_ci# 83e5c31af7Sopenharmony_ci# // Always selects f0 > f1 which is true when i > 1. 84e5c31af7Sopenharmony_ci# bool b = injectionSwitch.x > _float_0_0 ? injectionSwitch.x < injectionSwitch.y : f0 > f1; 85e5c31af7Sopenharmony_ci# 86e5c31af7Sopenharmony_ci# if(b) 87e5c31af7Sopenharmony_ci# { 88e5c31af7Sopenharmony_ci# data[i] = data[_int_1]; 89e5c31af7Sopenharmony_ci# } 90e5c31af7Sopenharmony_ci# } 91e5c31af7Sopenharmony_ci# } 92e5c31af7Sopenharmony_ci# 93e5c31af7Sopenharmony_ci# // Compare against expected results. 94e5c31af7Sopenharmony_ci# float ref[10] = float[10](_float_1_0, _float_2_0, _float_2_0, _float_2_0, _float_2_0, _float_2_0, _float_2_0, _float_2_0, _float_2_0, _float_2_0); 95e5c31af7Sopenharmony_ci# _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1); 96e5c31af7Sopenharmony_ci# 97e5c31af7Sopenharmony_ci# for(int i = _int_0; i < _int_10; i ++) 98e5c31af7Sopenharmony_ci# { 99e5c31af7Sopenharmony_ci# if(data[i] != ref[i]) 100e5c31af7Sopenharmony_ci# { 101e5c31af7Sopenharmony_ci# _GLF_color = vec4(_int_0); 102e5c31af7Sopenharmony_ci# } 103e5c31af7Sopenharmony_ci# } 104e5c31af7Sopenharmony_ci# } 105e5c31af7Sopenharmony_ciSHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 106e5c31af7Sopenharmony_ci; SPIR-V 107e5c31af7Sopenharmony_ci; Version: 1.0 108e5c31af7Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 10 109e5c31af7Sopenharmony_ci; Bound: 195 110e5c31af7Sopenharmony_ci; Schema: 0 111e5c31af7Sopenharmony_ci OpCapability Shader 112e5c31af7Sopenharmony_ci %1 = OpExtInstImport "GLSL.std.450" 113e5c31af7Sopenharmony_ci OpMemoryModel Logical GLSL450 114e5c31af7Sopenharmony_ci OpEntryPoint Fragment %4 "main" %154 115e5c31af7Sopenharmony_ci OpExecutionMode %4 OriginUpperLeft 116e5c31af7Sopenharmony_ci OpSource ESSL 320 117e5c31af7Sopenharmony_ci OpName %4 "main" 118e5c31af7Sopenharmony_ci OpName %11 "data" 119e5c31af7Sopenharmony_ci OpName %14 "buf0" 120e5c31af7Sopenharmony_ci OpMemberName %14 0 "_GLF_uniform_float_values" 121e5c31af7Sopenharmony_ci OpName %16 "" 122e5c31af7Sopenharmony_ci OpName %51 "i" 123e5c31af7Sopenharmony_ci OpName %61 "j" 124e5c31af7Sopenharmony_ci OpName %76 "f0" 125e5c31af7Sopenharmony_ci OpName %80 "f1" 126e5c31af7Sopenharmony_ci OpName %83 "buf1" 127e5c31af7Sopenharmony_ci OpMemberName %83 0 "_GLF_uniform_int_values" 128e5c31af7Sopenharmony_ci OpName %85 "" 129e5c31af7Sopenharmony_ci OpName %92 "b" 130e5c31af7Sopenharmony_ci OpName %94 "buf2" 131e5c31af7Sopenharmony_ci OpMemberName %94 0 "injectionSwitch" 132e5c31af7Sopenharmony_ci OpName %96 "" 133e5c31af7Sopenharmony_ci OpName %130 "ref" 134e5c31af7Sopenharmony_ci OpName %154 "_GLF_color" 135e5c31af7Sopenharmony_ci OpName %168 "i" 136e5c31af7Sopenharmony_ci OpDecorate %13 ArrayStride 16 137e5c31af7Sopenharmony_ci OpMemberDecorate %14 0 Offset 0 138e5c31af7Sopenharmony_ci OpDecorate %14 Block 139e5c31af7Sopenharmony_ci OpDecorate %16 DescriptorSet 0 140e5c31af7Sopenharmony_ci OpDecorate %16 Binding 0 141e5c31af7Sopenharmony_ci OpDecorate %82 ArrayStride 16 142e5c31af7Sopenharmony_ci OpMemberDecorate %83 0 Offset 0 143e5c31af7Sopenharmony_ci OpDecorate %83 Block 144e5c31af7Sopenharmony_ci OpDecorate %85 DescriptorSet 0 145e5c31af7Sopenharmony_ci OpDecorate %85 Binding 1 146e5c31af7Sopenharmony_ci OpMemberDecorate %94 0 Offset 0 147e5c31af7Sopenharmony_ci OpDecorate %94 Block 148e5c31af7Sopenharmony_ci OpDecorate %96 DescriptorSet 0 149e5c31af7Sopenharmony_ci OpDecorate %96 Binding 2 150e5c31af7Sopenharmony_ci OpDecorate %154 Location 0 151e5c31af7Sopenharmony_ci %2 = OpTypeVoid 152e5c31af7Sopenharmony_ci %3 = OpTypeFunction %2 153e5c31af7Sopenharmony_ci %6 = OpTypeFloat 32 154e5c31af7Sopenharmony_ci %7 = OpTypeInt 32 0 155e5c31af7Sopenharmony_ci %8 = OpConstant %7 10 156e5c31af7Sopenharmony_ci %9 = OpTypeArray %6 %8 157e5c31af7Sopenharmony_ci %10 = OpTypePointer Function %9 158e5c31af7Sopenharmony_ci %12 = OpConstant %7 11 159e5c31af7Sopenharmony_ci %13 = OpTypeArray %6 %12 160e5c31af7Sopenharmony_ci %14 = OpTypeStruct %13 161e5c31af7Sopenharmony_ci %15 = OpTypePointer Uniform %14 162e5c31af7Sopenharmony_ci %16 = OpVariable %15 Uniform 163e5c31af7Sopenharmony_ci %17 = OpTypeInt 32 1 164e5c31af7Sopenharmony_ci %18 = OpConstant %17 0 165e5c31af7Sopenharmony_ci %19 = OpTypePointer Uniform %6 166e5c31af7Sopenharmony_ci %22 = OpConstant %17 1 167e5c31af7Sopenharmony_ci %25 = OpConstant %17 2 168e5c31af7Sopenharmony_ci %28 = OpConstant %17 3 169e5c31af7Sopenharmony_ci %31 = OpConstant %17 4 170e5c31af7Sopenharmony_ci %34 = OpConstant %17 5 171e5c31af7Sopenharmony_ci %37 = OpConstant %17 6 172e5c31af7Sopenharmony_ci %40 = OpConstant %17 7 173e5c31af7Sopenharmony_ci %43 = OpConstant %17 8 174e5c31af7Sopenharmony_ci %46 = OpConstant %17 9 175e5c31af7Sopenharmony_ci %50 = OpTypePointer Function %17 176e5c31af7Sopenharmony_ci %58 = OpConstant %17 10 177e5c31af7Sopenharmony_ci %59 = OpTypeBool 178e5c31af7Sopenharmony_ci %75 = OpTypePointer Function %6 179e5c31af7Sopenharmony_ci %81 = OpConstant %7 3 180e5c31af7Sopenharmony_ci %82 = OpTypeArray %17 %81 181e5c31af7Sopenharmony_ci %83 = OpTypeStruct %82 182e5c31af7Sopenharmony_ci %84 = OpTypePointer Uniform %83 183e5c31af7Sopenharmony_ci %85 = OpVariable %84 Uniform 184e5c31af7Sopenharmony_ci %86 = OpTypePointer Uniform %17 185e5c31af7Sopenharmony_ci %91 = OpTypePointer Function %59 186e5c31af7Sopenharmony_ci %93 = OpTypeVector %6 2 187e5c31af7Sopenharmony_ci %94 = OpTypeStruct %93 188e5c31af7Sopenharmony_ci %95 = OpTypePointer Uniform %94 189e5c31af7Sopenharmony_ci %96 = OpVariable %95 Uniform 190e5c31af7Sopenharmony_ci %97 = OpConstant %7 0 191e5c31af7Sopenharmony_ci %108 = OpConstant %7 1 192e5c31af7Sopenharmony_ci %152 = OpTypeVector %6 4 193e5c31af7Sopenharmony_ci %153 = OpTypePointer Output %152 194e5c31af7Sopenharmony_ci %154 = OpVariable %153 Output 195e5c31af7Sopenharmony_ci %4 = OpFunction %2 None %3 196e5c31af7Sopenharmony_ci %5 = OpLabel 197e5c31af7Sopenharmony_ci %11 = OpVariable %10 Function 198e5c31af7Sopenharmony_ci %51 = OpVariable %50 Function 199e5c31af7Sopenharmony_ci %61 = OpVariable %50 Function 200e5c31af7Sopenharmony_ci %76 = OpVariable %75 Function 201e5c31af7Sopenharmony_ci %80 = OpVariable %75 Function 202e5c31af7Sopenharmony_ci %92 = OpVariable %91 Function 203e5c31af7Sopenharmony_ci %103 = OpVariable %91 Function 204e5c31af7Sopenharmony_ci %130 = OpVariable %10 Function 205e5c31af7Sopenharmony_ci %168 = OpVariable %50 Function 206e5c31af7Sopenharmony_ci %20 = OpAccessChain %19 %16 %18 %18 207e5c31af7Sopenharmony_ci %21 = OpLoad %6 %20 208e5c31af7Sopenharmony_ci %23 = OpAccessChain %19 %16 %18 %22 209e5c31af7Sopenharmony_ci %24 = OpLoad %6 %23 210e5c31af7Sopenharmony_ci %26 = OpAccessChain %19 %16 %18 %25 211e5c31af7Sopenharmony_ci %27 = OpLoad %6 %26 212e5c31af7Sopenharmony_ci %29 = OpAccessChain %19 %16 %18 %28 213e5c31af7Sopenharmony_ci %30 = OpLoad %6 %29 214e5c31af7Sopenharmony_ci %32 = OpAccessChain %19 %16 %18 %31 215e5c31af7Sopenharmony_ci %33 = OpLoad %6 %32 216e5c31af7Sopenharmony_ci %35 = OpAccessChain %19 %16 %18 %34 217e5c31af7Sopenharmony_ci %36 = OpLoad %6 %35 218e5c31af7Sopenharmony_ci %38 = OpAccessChain %19 %16 %18 %37 219e5c31af7Sopenharmony_ci %39 = OpLoad %6 %38 220e5c31af7Sopenharmony_ci %41 = OpAccessChain %19 %16 %18 %40 221e5c31af7Sopenharmony_ci %42 = OpLoad %6 %41 222e5c31af7Sopenharmony_ci %44 = OpAccessChain %19 %16 %18 %43 223e5c31af7Sopenharmony_ci %45 = OpLoad %6 %44 224e5c31af7Sopenharmony_ci %47 = OpAccessChain %19 %16 %18 %46 225e5c31af7Sopenharmony_ci %48 = OpLoad %6 %47 226e5c31af7Sopenharmony_ci %49 = OpCompositeConstruct %9 %21 %24 %27 %30 %33 %36 %39 %42 %45 %48 227e5c31af7Sopenharmony_ci OpStore %11 %49 228e5c31af7Sopenharmony_ci OpStore %51 %18 229e5c31af7Sopenharmony_ci OpBranch %52 230e5c31af7Sopenharmony_ci %52 = OpLabel 231e5c31af7Sopenharmony_ci OpLoopMerge %54 %55 None 232e5c31af7Sopenharmony_ci OpBranch %56 233e5c31af7Sopenharmony_ci %56 = OpLabel 234e5c31af7Sopenharmony_ci %57 = OpLoad %17 %51 235e5c31af7Sopenharmony_ci %60 = OpSLessThan %59 %57 %58 236e5c31af7Sopenharmony_ci OpBranchConditional %60 %53 %54 237e5c31af7Sopenharmony_ci %53 = OpLabel 238e5c31af7Sopenharmony_ci OpStore %61 %18 239e5c31af7Sopenharmony_ci OpBranch %62 240e5c31af7Sopenharmony_ci %62 = OpLabel 241e5c31af7Sopenharmony_ci OpLoopMerge %64 %65 None 242e5c31af7Sopenharmony_ci OpBranch %66 243e5c31af7Sopenharmony_ci %66 = OpLabel 244e5c31af7Sopenharmony_ci %67 = OpLoad %17 %61 245e5c31af7Sopenharmony_ci %68 = OpSLessThan %59 %67 %58 246e5c31af7Sopenharmony_ci OpBranchConditional %68 %63 %64 247e5c31af7Sopenharmony_ci %63 = OpLabel 248e5c31af7Sopenharmony_ci %69 = OpLoad %17 %61 249e5c31af7Sopenharmony_ci %70 = OpLoad %17 %51 250e5c31af7Sopenharmony_ci %71 = OpSLessThan %59 %69 %70 251e5c31af7Sopenharmony_ci OpSelectionMerge %73 None 252e5c31af7Sopenharmony_ci OpBranchConditional %71 %72 %73 253e5c31af7Sopenharmony_ci %72 = OpLabel 254e5c31af7Sopenharmony_ci OpBranch %65 255e5c31af7Sopenharmony_ci %73 = OpLabel 256e5c31af7Sopenharmony_ci %77 = OpLoad %17 %51 257e5c31af7Sopenharmony_ci %78 = OpAccessChain %75 %11 %77 258e5c31af7Sopenharmony_ci %79 = OpLoad %6 %78 259e5c31af7Sopenharmony_ci OpStore %76 %79 260e5c31af7Sopenharmony_ci %87 = OpAccessChain %86 %85 %18 %18 261e5c31af7Sopenharmony_ci %88 = OpLoad %17 %87 262e5c31af7Sopenharmony_ci %89 = OpAccessChain %75 %11 %88 263e5c31af7Sopenharmony_ci %90 = OpLoad %6 %89 264e5c31af7Sopenharmony_ci OpStore %80 %90 265e5c31af7Sopenharmony_ci %98 = OpAccessChain %19 %96 %18 %97 266e5c31af7Sopenharmony_ci %99 = OpLoad %6 %98 267e5c31af7Sopenharmony_ci %100 = OpAccessChain %19 %16 %18 %58 268e5c31af7Sopenharmony_ci %101 = OpLoad %6 %100 269e5c31af7Sopenharmony_ci %102 = OpFOrdGreaterThan %59 %99 %101 270e5c31af7Sopenharmony_ci OpSelectionMerge %105 None 271e5c31af7Sopenharmony_ci OpBranchConditional %102 %104 %112 272e5c31af7Sopenharmony_ci %104 = OpLabel 273e5c31af7Sopenharmony_ci %106 = OpAccessChain %19 %96 %18 %97 274e5c31af7Sopenharmony_ci %107 = OpLoad %6 %106 275e5c31af7Sopenharmony_ci %109 = OpAccessChain %19 %96 %18 %108 276e5c31af7Sopenharmony_ci %110 = OpLoad %6 %109 277e5c31af7Sopenharmony_ci %111 = OpFOrdLessThan %59 %107 %110 278e5c31af7Sopenharmony_ci OpStore %103 %111 279e5c31af7Sopenharmony_ci OpBranch %105 280e5c31af7Sopenharmony_ci %112 = OpLabel 281e5c31af7Sopenharmony_ci %113 = OpLoad %6 %76 282e5c31af7Sopenharmony_ci %114 = OpLoad %6 %80 283e5c31af7Sopenharmony_ci %115 = OpFOrdGreaterThan %59 %113 %114 284e5c31af7Sopenharmony_ci OpStore %103 %115 285e5c31af7Sopenharmony_ci OpBranch %105 286e5c31af7Sopenharmony_ci %105 = OpLabel 287e5c31af7Sopenharmony_ci %116 = OpLoad %59 %103 288e5c31af7Sopenharmony_ci OpStore %92 %116 289e5c31af7Sopenharmony_ci %117 = OpLoad %59 %92 290e5c31af7Sopenharmony_ci OpSelectionMerge %119 None 291e5c31af7Sopenharmony_ci OpBranchConditional %117 %118 %119 292e5c31af7Sopenharmony_ci %118 = OpLabel 293e5c31af7Sopenharmony_ci %120 = OpLoad %17 %51 294e5c31af7Sopenharmony_ci %121 = OpAccessChain %86 %85 %18 %18 295e5c31af7Sopenharmony_ci %122 = OpLoad %17 %121 296e5c31af7Sopenharmony_ci %123 = OpAccessChain %75 %11 %122 297e5c31af7Sopenharmony_ci %124 = OpLoad %6 %123 298e5c31af7Sopenharmony_ci %125 = OpAccessChain %75 %11 %120 299e5c31af7Sopenharmony_ci OpStore %125 %124 300e5c31af7Sopenharmony_ci OpBranch %119 301e5c31af7Sopenharmony_ci %119 = OpLabel 302e5c31af7Sopenharmony_ci OpBranch %65 303e5c31af7Sopenharmony_ci %65 = OpLabel 304e5c31af7Sopenharmony_ci %126 = OpLoad %17 %61 305e5c31af7Sopenharmony_ci %127 = OpIAdd %17 %126 %22 306e5c31af7Sopenharmony_ci OpStore %61 %127 307e5c31af7Sopenharmony_ci OpBranch %62 308e5c31af7Sopenharmony_ci %64 = OpLabel 309e5c31af7Sopenharmony_ci OpBranch %55 310e5c31af7Sopenharmony_ci %55 = OpLabel 311e5c31af7Sopenharmony_ci %128 = OpLoad %17 %51 312e5c31af7Sopenharmony_ci %129 = OpIAdd %17 %128 %22 313e5c31af7Sopenharmony_ci OpStore %51 %129 314e5c31af7Sopenharmony_ci OpBranch %52 315e5c31af7Sopenharmony_ci %54 = OpLabel 316e5c31af7Sopenharmony_ci %131 = OpAccessChain %19 %16 %18 %18 317e5c31af7Sopenharmony_ci %132 = OpLoad %6 %131 318e5c31af7Sopenharmony_ci %133 = OpAccessChain %19 %16 %18 %22 319e5c31af7Sopenharmony_ci %134 = OpLoad %6 %133 320e5c31af7Sopenharmony_ci %135 = OpAccessChain %19 %16 %18 %22 321e5c31af7Sopenharmony_ci %136 = OpLoad %6 %135 322e5c31af7Sopenharmony_ci %137 = OpAccessChain %19 %16 %18 %22 323e5c31af7Sopenharmony_ci %138 = OpLoad %6 %137 324e5c31af7Sopenharmony_ci %139 = OpAccessChain %19 %16 %18 %22 325e5c31af7Sopenharmony_ci %140 = OpLoad %6 %139 326e5c31af7Sopenharmony_ci %141 = OpAccessChain %19 %16 %18 %22 327e5c31af7Sopenharmony_ci %142 = OpLoad %6 %141 328e5c31af7Sopenharmony_ci %143 = OpAccessChain %19 %16 %18 %22 329e5c31af7Sopenharmony_ci %144 = OpLoad %6 %143 330e5c31af7Sopenharmony_ci %145 = OpAccessChain %19 %16 %18 %22 331e5c31af7Sopenharmony_ci %146 = OpLoad %6 %145 332e5c31af7Sopenharmony_ci %147 = OpAccessChain %19 %16 %18 %22 333e5c31af7Sopenharmony_ci %148 = OpLoad %6 %147 334e5c31af7Sopenharmony_ci %149 = OpAccessChain %19 %16 %18 %22 335e5c31af7Sopenharmony_ci %150 = OpLoad %6 %149 336e5c31af7Sopenharmony_ci %151 = OpCompositeConstruct %9 %132 %134 %136 %138 %140 %142 %144 %146 %148 %150 337e5c31af7Sopenharmony_ci OpStore %130 %151 338e5c31af7Sopenharmony_ci %155 = OpAccessChain %86 %85 %18 %18 339e5c31af7Sopenharmony_ci %156 = OpLoad %17 %155 340e5c31af7Sopenharmony_ci %157 = OpConvertSToF %6 %156 341e5c31af7Sopenharmony_ci %158 = OpAccessChain %86 %85 %18 %22 342e5c31af7Sopenharmony_ci %159 = OpLoad %17 %158 343e5c31af7Sopenharmony_ci %160 = OpConvertSToF %6 %159 344e5c31af7Sopenharmony_ci %161 = OpAccessChain %86 %85 %18 %22 345e5c31af7Sopenharmony_ci %162 = OpLoad %17 %161 346e5c31af7Sopenharmony_ci %163 = OpConvertSToF %6 %162 347e5c31af7Sopenharmony_ci %164 = OpAccessChain %86 %85 %18 %18 348e5c31af7Sopenharmony_ci %165 = OpLoad %17 %164 349e5c31af7Sopenharmony_ci %166 = OpConvertSToF %6 %165 350e5c31af7Sopenharmony_ci %167 = OpCompositeConstruct %152 %157 %160 %163 %166 351e5c31af7Sopenharmony_ci OpStore %154 %167 352e5c31af7Sopenharmony_ci %169 = OpAccessChain %86 %85 %18 %22 353e5c31af7Sopenharmony_ci %170 = OpLoad %17 %169 354e5c31af7Sopenharmony_ci OpStore %168 %170 355e5c31af7Sopenharmony_ci OpBranch %171 356e5c31af7Sopenharmony_ci %171 = OpLabel 357e5c31af7Sopenharmony_ci OpLoopMerge %173 %174 None 358e5c31af7Sopenharmony_ci OpBranch %175 359e5c31af7Sopenharmony_ci %175 = OpLabel 360e5c31af7Sopenharmony_ci %176 = OpLoad %17 %168 361e5c31af7Sopenharmony_ci %177 = OpAccessChain %86 %85 %18 %25 362e5c31af7Sopenharmony_ci %178 = OpLoad %17 %177 363e5c31af7Sopenharmony_ci %179 = OpSLessThan %59 %176 %178 364e5c31af7Sopenharmony_ci OpBranchConditional %179 %172 %173 365e5c31af7Sopenharmony_ci %172 = OpLabel 366e5c31af7Sopenharmony_ci %180 = OpLoad %17 %168 367e5c31af7Sopenharmony_ci %181 = OpAccessChain %75 %11 %180 368e5c31af7Sopenharmony_ci %182 = OpLoad %6 %181 369e5c31af7Sopenharmony_ci %183 = OpLoad %17 %168 370e5c31af7Sopenharmony_ci %184 = OpAccessChain %75 %130 %183 371e5c31af7Sopenharmony_ci %185 = OpLoad %6 %184 372e5c31af7Sopenharmony_ci %186 = OpFUnordNotEqual %59 %182 %185 373e5c31af7Sopenharmony_ci OpSelectionMerge %188 None 374e5c31af7Sopenharmony_ci OpBranchConditional %186 %187 %188 375e5c31af7Sopenharmony_ci %187 = OpLabel 376e5c31af7Sopenharmony_ci %189 = OpAccessChain %86 %85 %18 %22 377e5c31af7Sopenharmony_ci %190 = OpLoad %17 %189 378e5c31af7Sopenharmony_ci %191 = OpConvertSToF %6 %190 379e5c31af7Sopenharmony_ci %192 = OpCompositeConstruct %152 %191 %191 %191 %191 380e5c31af7Sopenharmony_ci OpStore %154 %192 381e5c31af7Sopenharmony_ci OpBranch %188 382e5c31af7Sopenharmony_ci %188 = OpLabel 383e5c31af7Sopenharmony_ci OpBranch %174 384e5c31af7Sopenharmony_ci %174 = OpLabel 385e5c31af7Sopenharmony_ci %193 = OpLoad %17 %168 386e5c31af7Sopenharmony_ci %194 = OpIAdd %17 %193 %22 387e5c31af7Sopenharmony_ci OpStore %168 %194 388e5c31af7Sopenharmony_ci OpBranch %171 389e5c31af7Sopenharmony_ci %173 = OpLabel 390e5c31af7Sopenharmony_ci OpReturn 391e5c31af7Sopenharmony_ci OpFunctionEnd 392e5c31af7Sopenharmony_ciEND 393e5c31af7Sopenharmony_ci 394e5c31af7Sopenharmony_ci# uniforms for variant 395e5c31af7Sopenharmony_ci 396e5c31af7Sopenharmony_ci# injectionSwitch 397e5c31af7Sopenharmony_ciBUFFER variant_injectionSwitch DATA_TYPE vec2<float> STD140 DATA 398e5c31af7Sopenharmony_ci 0.0 1.0 399e5c31af7Sopenharmony_ciEND 400e5c31af7Sopenharmony_ci# _GLF_uniform_int_values 401e5c31af7Sopenharmony_ciBUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA 402e5c31af7Sopenharmony_ci 1 0 10 403e5c31af7Sopenharmony_ciEND 404e5c31af7Sopenharmony_ci# _GLF_uniform_float_values 405e5c31af7Sopenharmony_ciBUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA 406e5c31af7Sopenharmony_ci 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 0.0 407e5c31af7Sopenharmony_ciEND 408e5c31af7Sopenharmony_ci 409e5c31af7Sopenharmony_ciBUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM 410e5c31af7Sopenharmony_ci 411e5c31af7Sopenharmony_ciPIPELINE graphics variant_pipeline 412e5c31af7Sopenharmony_ci ATTACH variant_vertex_shader 413e5c31af7Sopenharmony_ci ATTACH variant_fragment_shader 414e5c31af7Sopenharmony_ci FRAMEBUFFER_SIZE 256 256 415e5c31af7Sopenharmony_ci BIND BUFFER variant_framebuffer AS color LOCATION 0 416e5c31af7Sopenharmony_ci BIND BUFFER variant_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 2 417e5c31af7Sopenharmony_ci BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1 418e5c31af7Sopenharmony_ci BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0 419e5c31af7Sopenharmony_ciEND 420e5c31af7Sopenharmony_ciCLEAR_COLOR variant_pipeline 0 0 0 255 421e5c31af7Sopenharmony_ci 422e5c31af7Sopenharmony_ciCLEAR variant_pipeline 423e5c31af7Sopenharmony_ciRUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256 424e5c31af7Sopenharmony_ci 425e5c31af7Sopenharmony_ciEXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255 426