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