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 always discarding main function 21e5c31af7Sopenharmony_ci 22e5c31af7Sopenharmony_ci# The test passes because: the framebuffer is cleared to black, 23e5c31af7Sopenharmony_ci# the fragment shader always discards, 24e5c31af7Sopenharmony_ci# and we check that the framebuffer is still black. 25e5c31af7Sopenharmony_ci 26e5c31af7Sopenharmony_ci# Optimized using spirv-opt with the following arguments: 27e5c31af7Sopenharmony_ci# '--private-to-local' 28e5c31af7Sopenharmony_ci# '--reduce-load-size' 29e5c31af7Sopenharmony_ci# '--eliminate-dead-code-aggressive' 30e5c31af7Sopenharmony_ci# '--eliminate-local-multi-store' 31e5c31af7Sopenharmony_ci# '--eliminate-dead-branches' 32e5c31af7Sopenharmony_ci# '--merge-return' 33e5c31af7Sopenharmony_ci# '--private-to-local' 34e5c31af7Sopenharmony_ci# '--combine-access-chains' 35e5c31af7Sopenharmony_ci# '--eliminate-dead-branches' 36e5c31af7Sopenharmony_ci# '--eliminate-dead-branches' 37e5c31af7Sopenharmony_ci# '--inline-entry-points-exhaustive' 38e5c31af7Sopenharmony_ci# '--scalar-replacement=100' 39e5c31af7Sopenharmony_ci# '--if-conversion' 40e5c31af7Sopenharmony_ci# '--combine-access-chains' 41e5c31af7Sopenharmony_ci# '--vector-dce' 42e5c31af7Sopenharmony_ci# '--vector-dce' 43e5c31af7Sopenharmony_ci# '--combine-access-chains' 44e5c31af7Sopenharmony_ci# '--reduce-load-size' 45e5c31af7Sopenharmony_ci# '--redundancy-elimination' 46e5c31af7Sopenharmony_ci# '--eliminate-local-multi-store' 47e5c31af7Sopenharmony_ci# '--vector-dce' 48e5c31af7Sopenharmony_ci# '--vector-dce' 49e5c31af7Sopenharmony_ci# spirv-opt commit hash: e82a428605f6ce0a07337b36f8ba3935c9f165ac 50e5c31af7Sopenharmony_ci 51e5c31af7Sopenharmony_ci 52e5c31af7Sopenharmony_ci 53e5c31af7Sopenharmony_ciSHADER vertex variant_vertex_shader PASSTHROUGH 54e5c31af7Sopenharmony_ci 55e5c31af7Sopenharmony_ci# variant_fragment_shader is derived from the following GLSL: 56e5c31af7Sopenharmony_ci# #version 310 es 57e5c31af7Sopenharmony_ci# precision highp float; 58e5c31af7Sopenharmony_ci# 59e5c31af7Sopenharmony_ci# layout(location = 0) out vec4 _GLF_color; 60e5c31af7Sopenharmony_ci# 61e5c31af7Sopenharmony_ci# layout(set = 0, binding = 0) uniform buf0 62e5c31af7Sopenharmony_ci# { 63e5c31af7Sopenharmony_ci# vec2 injectionSwitch; 64e5c31af7Sopenharmony_ci# }; 65e5c31af7Sopenharmony_ci# 66e5c31af7Sopenharmony_ci# struct tmp_struct 67e5c31af7Sopenharmony_ci# { 68e5c31af7Sopenharmony_ci# int nmb[1]; 69e5c31af7Sopenharmony_ci# }; 70e5c31af7Sopenharmony_ci# 71e5c31af7Sopenharmony_ci# int binarySearch(tmp_struct obj) 72e5c31af7Sopenharmony_ci# { 73e5c31af7Sopenharmony_ci# int one = 1; 74e5c31af7Sopenharmony_ci# 75e5c31af7Sopenharmony_ci# while (one > 10) 76e5c31af7Sopenharmony_ci# { 77e5c31af7Sopenharmony_ci# int zero = one - 1; 78e5c31af7Sopenharmony_ci# 79e5c31af7Sopenharmony_ci# if (obj.nmb[zero] == 1) 80e5c31af7Sopenharmony_ci# return 1; 81e5c31af7Sopenharmony_ci# 82e5c31af7Sopenharmony_ci# one = zero; 83e5c31af7Sopenharmony_ci# } 84e5c31af7Sopenharmony_ci# 85e5c31af7Sopenharmony_ci# return -1; 86e5c31af7Sopenharmony_ci# } 87e5c31af7Sopenharmony_ci# 88e5c31af7Sopenharmony_ci# void main() 89e5c31af7Sopenharmony_ci# { 90e5c31af7Sopenharmony_ci# tmp_struct obj; 91e5c31af7Sopenharmony_ci# float tmp_float = injectionSwitch.y; 92e5c31af7Sopenharmony_ci# vec3 color = vec3(tmp_float); 93e5c31af7Sopenharmony_ci# 94e5c31af7Sopenharmony_ci# if (binarySearch(obj) == -1) // Always true 95e5c31af7Sopenharmony_ci# { 96e5c31af7Sopenharmony_ci# discard; 97e5c31af7Sopenharmony_ci# } 98e5c31af7Sopenharmony_ci# else 99e5c31af7Sopenharmony_ci# { 100e5c31af7Sopenharmony_ci# _GLF_color = vec4(0.0, 0.0, 0.0, 0.0); 101e5c31af7Sopenharmony_ci# color.yz += vec2(1.0); 102e5c31af7Sopenharmony_ci# if (injectionSwitch.x > 1.0) 103e5c31af7Sopenharmony_ci# { 104e5c31af7Sopenharmony_ci# return; 105e5c31af7Sopenharmony_ci# } 106e5c31af7Sopenharmony_ci# } 107e5c31af7Sopenharmony_ci# _GLF_color = vec4(color, 1.0); 108e5c31af7Sopenharmony_ci# } 109e5c31af7Sopenharmony_ciSHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 110e5c31af7Sopenharmony_ci; SPIR-V 111e5c31af7Sopenharmony_ci; Version: 1.0 112e5c31af7Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 8 113e5c31af7Sopenharmony_ci; Bound: 159 114e5c31af7Sopenharmony_ci; Schema: 0 115e5c31af7Sopenharmony_ci OpCapability Shader 116e5c31af7Sopenharmony_ci %1 = OpExtInstImport "GLSL.std.450" 117e5c31af7Sopenharmony_ci OpMemoryModel Logical GLSL450 118e5c31af7Sopenharmony_ci OpEntryPoint Fragment %4 "main" %69 119e5c31af7Sopenharmony_ci OpExecutionMode %4 OriginUpperLeft 120e5c31af7Sopenharmony_ci OpSource ESSL 310 121e5c31af7Sopenharmony_ci OpName %4 "main" 122e5c31af7Sopenharmony_ci OpName %10 "tmp_struct" 123e5c31af7Sopenharmony_ci OpMemberName %10 0 "nmb" 124e5c31af7Sopenharmony_ci OpName %14 "binarySearch(struct-tmp_struct-i1[1]1;" 125e5c31af7Sopenharmony_ci OpName %13 "obj" 126e5c31af7Sopenharmony_ci OpName %17 "one" 127e5c31af7Sopenharmony_ci OpName %28 "zero" 128e5c31af7Sopenharmony_ci OpName %45 "tmp_float" 129e5c31af7Sopenharmony_ci OpName %47 "buf0" 130e5c31af7Sopenharmony_ci OpMemberName %47 0 "injectionSwitch" 131e5c31af7Sopenharmony_ci OpName %49 "" 132e5c31af7Sopenharmony_ci OpName %55 "color" 133e5c31af7Sopenharmony_ci OpName %69 "_GLF_color" 134e5c31af7Sopenharmony_ci OpMemberDecorate %10 0 RelaxedPrecision 135e5c31af7Sopenharmony_ci OpDecorate %14 RelaxedPrecision 136e5c31af7Sopenharmony_ci OpDecorate %17 RelaxedPrecision 137e5c31af7Sopenharmony_ci OpDecorate %28 RelaxedPrecision 138e5c31af7Sopenharmony_ci OpDecorate %30 RelaxedPrecision 139e5c31af7Sopenharmony_ci OpDecorate %34 RelaxedPrecision 140e5c31af7Sopenharmony_ci OpMemberDecorate %47 0 Offset 0 141e5c31af7Sopenharmony_ci OpDecorate %47 Block 142e5c31af7Sopenharmony_ci OpDecorate %49 DescriptorSet 0 143e5c31af7Sopenharmony_ci OpDecorate %49 Binding 0 144e5c31af7Sopenharmony_ci OpDecorate %69 Location 0 145e5c31af7Sopenharmony_ci OpDecorate %92 RelaxedPrecision 146e5c31af7Sopenharmony_ci OpDecorate %102 RelaxedPrecision 147e5c31af7Sopenharmony_ci OpDecorate %111 RelaxedPrecision 148e5c31af7Sopenharmony_ci OpDecorate %112 RelaxedPrecision 149e5c31af7Sopenharmony_ci OpDecorate %113 RelaxedPrecision 150e5c31af7Sopenharmony_ci OpDecorate %114 RelaxedPrecision 151e5c31af7Sopenharmony_ci OpDecorate %122 RelaxedPrecision 152e5c31af7Sopenharmony_ci OpDecorate %120 RelaxedPrecision 153e5c31af7Sopenharmony_ci OpDecorate %128 RelaxedPrecision 154e5c31af7Sopenharmony_ci OpDecorate %137 RelaxedPrecision 155e5c31af7Sopenharmony_ci OpDecorate %144 RelaxedPrecision 156e5c31af7Sopenharmony_ci OpDecorate %143 RelaxedPrecision 157e5c31af7Sopenharmony_ci OpDecorate %154 RelaxedPrecision 158e5c31af7Sopenharmony_ci OpDecorate %153 RelaxedPrecision 159e5c31af7Sopenharmony_ci %2 = OpTypeVoid 160e5c31af7Sopenharmony_ci %3 = OpTypeFunction %2 161e5c31af7Sopenharmony_ci %6 = OpTypeInt 32 1 162e5c31af7Sopenharmony_ci %7 = OpTypeInt 32 0 163e5c31af7Sopenharmony_ci %8 = OpConstant %7 1 164e5c31af7Sopenharmony_ci %9 = OpTypeArray %6 %8 165e5c31af7Sopenharmony_ci %10 = OpTypeStruct %9 166e5c31af7Sopenharmony_ci %11 = OpTypePointer Function %10 167e5c31af7Sopenharmony_ci %12 = OpTypeFunction %6 %11 168e5c31af7Sopenharmony_ci %16 = OpTypePointer Function %6 169e5c31af7Sopenharmony_ci %18 = OpConstant %6 1 170e5c31af7Sopenharmony_ci %25 = OpConstant %6 10 171e5c31af7Sopenharmony_ci %26 = OpTypeBool 172e5c31af7Sopenharmony_ci %31 = OpConstant %6 0 173e5c31af7Sopenharmony_ci %40 = OpConstant %6 -1 174e5c31af7Sopenharmony_ci %43 = OpTypeFloat 32 175e5c31af7Sopenharmony_ci %44 = OpTypePointer Function %43 176e5c31af7Sopenharmony_ci %46 = OpTypeVector %43 2 177e5c31af7Sopenharmony_ci %47 = OpTypeStruct %46 178e5c31af7Sopenharmony_ci %48 = OpTypePointer Uniform %47 179e5c31af7Sopenharmony_ci %49 = OpVariable %48 Uniform 180e5c31af7Sopenharmony_ci %50 = OpTypePointer Uniform %43 181e5c31af7Sopenharmony_ci %53 = OpTypeVector %43 3 182e5c31af7Sopenharmony_ci %54 = OpTypePointer Function %53 183e5c31af7Sopenharmony_ci %67 = OpTypeVector %43 4 184e5c31af7Sopenharmony_ci %68 = OpTypePointer Output %67 185e5c31af7Sopenharmony_ci %69 = OpVariable %68 Output 186e5c31af7Sopenharmony_ci %70 = OpConstant %43 0 187e5c31af7Sopenharmony_ci %71 = OpConstantComposite %67 %70 %70 %70 %70 188e5c31af7Sopenharmony_ci %72 = OpConstant %43 1 189e5c31af7Sopenharmony_ci %73 = OpConstantComposite %46 %72 %72 190e5c31af7Sopenharmony_ci %79 = OpConstant %7 0 191e5c31af7Sopenharmony_ci %91 = OpUndef %10 192e5c31af7Sopenharmony_ci %97 = OpConstantFalse %26 193e5c31af7Sopenharmony_ci %98 = OpTypePointer Function %26 194e5c31af7Sopenharmony_ci %100 = OpConstantTrue %26 195e5c31af7Sopenharmony_ci %135 = OpConstantNull %9 196e5c31af7Sopenharmony_ci %136 = OpTypePointer Function %9 197e5c31af7Sopenharmony_ci %148 = OpUndef %6 198e5c31af7Sopenharmony_ci %149 = OpUndef %26 199e5c31af7Sopenharmony_ci %157 = OpUndef %6 200e5c31af7Sopenharmony_ci %158 = OpUndef %26 201e5c31af7Sopenharmony_ci %4 = OpFunction %2 None %3 202e5c31af7Sopenharmony_ci %5 = OpLabel 203e5c31af7Sopenharmony_ci %137 = OpVariable %136 Function 204e5c31af7Sopenharmony_ci %110 = OpVariable %98 Function %97 205e5c31af7Sopenharmony_ci %111 = OpVariable %16 Function 206e5c31af7Sopenharmony_ci %112 = OpVariable %16 Function 207e5c31af7Sopenharmony_ci %113 = OpVariable %16 Function 208e5c31af7Sopenharmony_ci %114 = OpVariable %16 Function 209e5c31af7Sopenharmony_ci %99 = OpVariable %98 Function %97 210e5c31af7Sopenharmony_ci %45 = OpVariable %44 Function 211e5c31af7Sopenharmony_ci %55 = OpVariable %54 Function 212e5c31af7Sopenharmony_ci OpBranch %94 213e5c31af7Sopenharmony_ci %94 = OpLabel 214e5c31af7Sopenharmony_ci OpLoopMerge %93 %96 None 215e5c31af7Sopenharmony_ci OpBranch %95 216e5c31af7Sopenharmony_ci %95 = OpLabel 217e5c31af7Sopenharmony_ci %51 = OpAccessChain %50 %49 %31 %8 218e5c31af7Sopenharmony_ci %52 = OpLoad %43 %51 219e5c31af7Sopenharmony_ci OpStore %45 %52 220e5c31af7Sopenharmony_ci %57 = OpCompositeConstruct %53 %52 %52 %52 221e5c31af7Sopenharmony_ci OpStore %55 %57 222e5c31af7Sopenharmony_ci %138 = OpCompositeExtract %9 %91 0 223e5c31af7Sopenharmony_ci OpStore %137 %138 224e5c31af7Sopenharmony_ci OpStore %110 %97 225e5c31af7Sopenharmony_ci OpBranch %115 226e5c31af7Sopenharmony_ci %115 = OpLabel 227e5c31af7Sopenharmony_ci %142 = OpPhi %26 %97 %95 %149 %117 228e5c31af7Sopenharmony_ci OpLoopMerge %116 %117 None 229e5c31af7Sopenharmony_ci OpBranch %118 230e5c31af7Sopenharmony_ci %118 = OpLabel 231e5c31af7Sopenharmony_ci OpStore %112 %18 232e5c31af7Sopenharmony_ci OpBranch %119 233e5c31af7Sopenharmony_ci %119 = OpLabel 234e5c31af7Sopenharmony_ci %122 = OpPhi %6 %18 %118 %120 %121 235e5c31af7Sopenharmony_ci OpLoopMerge %123 %121 None 236e5c31af7Sopenharmony_ci OpBranch %124 237e5c31af7Sopenharmony_ci %124 = OpLabel 238e5c31af7Sopenharmony_ci %125 = OpSGreaterThan %26 %122 %25 239e5c31af7Sopenharmony_ci OpBranchConditional %125 %126 %123 240e5c31af7Sopenharmony_ci %126 = OpLabel 241e5c31af7Sopenharmony_ci %120 = OpISub %6 %122 %18 242e5c31af7Sopenharmony_ci OpStore %113 %120 243e5c31af7Sopenharmony_ci %139 = OpAccessChain %16 %137 %120 244e5c31af7Sopenharmony_ci %128 = OpLoad %6 %139 245e5c31af7Sopenharmony_ci %129 = OpIEqual %26 %128 %18 246e5c31af7Sopenharmony_ci OpSelectionMerge %130 None 247e5c31af7Sopenharmony_ci OpBranchConditional %129 %131 %130 248e5c31af7Sopenharmony_ci %131 = OpLabel 249e5c31af7Sopenharmony_ci OpStore %110 %100 250e5c31af7Sopenharmony_ci OpStore %111 %18 251e5c31af7Sopenharmony_ci OpBranch %123 252e5c31af7Sopenharmony_ci %130 = OpLabel 253e5c31af7Sopenharmony_ci OpStore %112 %120 254e5c31af7Sopenharmony_ci OpBranch %121 255e5c31af7Sopenharmony_ci %121 = OpLabel 256e5c31af7Sopenharmony_ci OpBranch %119 257e5c31af7Sopenharmony_ci %123 = OpLabel 258e5c31af7Sopenharmony_ci %144 = OpPhi %6 %148 %124 %18 %131 259e5c31af7Sopenharmony_ci %140 = OpPhi %26 %142 %124 %100 %131 260e5c31af7Sopenharmony_ci OpSelectionMerge %133 None 261e5c31af7Sopenharmony_ci OpBranchConditional %140 %116 %133 262e5c31af7Sopenharmony_ci %133 = OpLabel 263e5c31af7Sopenharmony_ci OpStore %110 %100 264e5c31af7Sopenharmony_ci OpStore %111 %40 265e5c31af7Sopenharmony_ci OpBranch %116 266e5c31af7Sopenharmony_ci %117 = OpLabel 267e5c31af7Sopenharmony_ci OpBranch %115 268e5c31af7Sopenharmony_ci %116 = OpLabel 269e5c31af7Sopenharmony_ci %143 = OpPhi %6 %144 %123 %40 %133 270e5c31af7Sopenharmony_ci OpStore %114 %143 271e5c31af7Sopenharmony_ci %62 = OpIEqual %26 %143 %40 272e5c31af7Sopenharmony_ci OpSelectionMerge %64 None 273e5c31af7Sopenharmony_ci OpBranchConditional %62 %63 %66 274e5c31af7Sopenharmony_ci %63 = OpLabel 275e5c31af7Sopenharmony_ci OpKill 276e5c31af7Sopenharmony_ci %66 = OpLabel 277e5c31af7Sopenharmony_ci OpStore %69 %71 278e5c31af7Sopenharmony_ci %75 = OpVectorShuffle %46 %57 %57 1 2 279e5c31af7Sopenharmony_ci %76 = OpFAdd %46 %75 %73 280e5c31af7Sopenharmony_ci %78 = OpVectorShuffle %53 %57 %76 0 3 4 281e5c31af7Sopenharmony_ci OpStore %55 %78 282e5c31af7Sopenharmony_ci %80 = OpAccessChain %50 %49 %31 %79 283e5c31af7Sopenharmony_ci %81 = OpLoad %43 %80 284e5c31af7Sopenharmony_ci %82 = OpFOrdGreaterThan %26 %81 %72 285e5c31af7Sopenharmony_ci OpSelectionMerge %84 None 286e5c31af7Sopenharmony_ci OpBranchConditional %82 %83 %84 287e5c31af7Sopenharmony_ci %83 = OpLabel 288e5c31af7Sopenharmony_ci OpStore %99 %100 289e5c31af7Sopenharmony_ci OpBranch %93 290e5c31af7Sopenharmony_ci %84 = OpLabel 291e5c31af7Sopenharmony_ci OpBranch %64 292e5c31af7Sopenharmony_ci %64 = OpLabel 293e5c31af7Sopenharmony_ci %87 = OpCompositeExtract %43 %78 0 294e5c31af7Sopenharmony_ci %88 = OpCompositeExtract %43 %78 1 295e5c31af7Sopenharmony_ci %89 = OpCompositeExtract %43 %78 2 296e5c31af7Sopenharmony_ci %90 = OpCompositeConstruct %67 %87 %88 %89 %72 297e5c31af7Sopenharmony_ci OpStore %69 %90 298e5c31af7Sopenharmony_ci OpStore %99 %100 299e5c31af7Sopenharmony_ci OpBranch %93 300e5c31af7Sopenharmony_ci %96 = OpLabel 301e5c31af7Sopenharmony_ci OpBranch %94 302e5c31af7Sopenharmony_ci %93 = OpLabel 303e5c31af7Sopenharmony_ci OpReturn 304e5c31af7Sopenharmony_ci OpFunctionEnd 305e5c31af7Sopenharmony_ci %14 = OpFunction %6 None %12 306e5c31af7Sopenharmony_ci %13 = OpFunctionParameter %11 307e5c31af7Sopenharmony_ci %15 = OpLabel 308e5c31af7Sopenharmony_ci %107 = OpVariable %98 Function %97 309e5c31af7Sopenharmony_ci %102 = OpVariable %16 Function 310e5c31af7Sopenharmony_ci %17 = OpVariable %16 Function 311e5c31af7Sopenharmony_ci %28 = OpVariable %16 Function 312e5c31af7Sopenharmony_ci OpBranch %104 313e5c31af7Sopenharmony_ci %104 = OpLabel 314e5c31af7Sopenharmony_ci %152 = OpPhi %26 %97 %15 %158 %106 315e5c31af7Sopenharmony_ci OpLoopMerge %101 %106 None 316e5c31af7Sopenharmony_ci OpBranch %105 317e5c31af7Sopenharmony_ci %105 = OpLabel 318e5c31af7Sopenharmony_ci OpStore %17 %18 319e5c31af7Sopenharmony_ci OpBranch %19 320e5c31af7Sopenharmony_ci %19 = OpLabel 321e5c31af7Sopenharmony_ci %92 = OpPhi %6 %18 %105 %30 %22 322e5c31af7Sopenharmony_ci OpLoopMerge %21 %22 None 323e5c31af7Sopenharmony_ci OpBranch %23 324e5c31af7Sopenharmony_ci %23 = OpLabel 325e5c31af7Sopenharmony_ci %27 = OpSGreaterThan %26 %92 %25 326e5c31af7Sopenharmony_ci OpBranchConditional %27 %20 %21 327e5c31af7Sopenharmony_ci %20 = OpLabel 328e5c31af7Sopenharmony_ci %30 = OpISub %6 %92 %18 329e5c31af7Sopenharmony_ci OpStore %28 %30 330e5c31af7Sopenharmony_ci %33 = OpAccessChain %16 %13 %31 %30 331e5c31af7Sopenharmony_ci %34 = OpLoad %6 %33 332e5c31af7Sopenharmony_ci %35 = OpIEqual %26 %34 %18 333e5c31af7Sopenharmony_ci OpSelectionMerge %37 None 334e5c31af7Sopenharmony_ci OpBranchConditional %35 %36 %37 335e5c31af7Sopenharmony_ci %36 = OpLabel 336e5c31af7Sopenharmony_ci OpStore %107 %100 337e5c31af7Sopenharmony_ci OpStore %102 %18 338e5c31af7Sopenharmony_ci OpBranch %21 339e5c31af7Sopenharmony_ci %37 = OpLabel 340e5c31af7Sopenharmony_ci OpStore %17 %30 341e5c31af7Sopenharmony_ci OpBranch %22 342e5c31af7Sopenharmony_ci %22 = OpLabel 343e5c31af7Sopenharmony_ci OpBranch %19 344e5c31af7Sopenharmony_ci %21 = OpLabel 345e5c31af7Sopenharmony_ci %154 = OpPhi %6 %157 %23 %18 %36 346e5c31af7Sopenharmony_ci %150 = OpPhi %26 %152 %23 %100 %36 347e5c31af7Sopenharmony_ci OpSelectionMerge %108 None 348e5c31af7Sopenharmony_ci OpBranchConditional %150 %101 %108 349e5c31af7Sopenharmony_ci %108 = OpLabel 350e5c31af7Sopenharmony_ci OpStore %107 %100 351e5c31af7Sopenharmony_ci OpStore %102 %40 352e5c31af7Sopenharmony_ci OpBranch %101 353e5c31af7Sopenharmony_ci %106 = OpLabel 354e5c31af7Sopenharmony_ci OpBranch %104 355e5c31af7Sopenharmony_ci %101 = OpLabel 356e5c31af7Sopenharmony_ci %153 = OpPhi %6 %154 %21 %40 %108 357e5c31af7Sopenharmony_ci OpReturnValue %153 358e5c31af7Sopenharmony_ci OpFunctionEnd 359e5c31af7Sopenharmony_ciEND 360e5c31af7Sopenharmony_ci 361e5c31af7Sopenharmony_ci# uniforms for variant 362e5c31af7Sopenharmony_ci 363e5c31af7Sopenharmony_ci# injectionSwitch 364e5c31af7Sopenharmony_ciBUFFER variant_injectionSwitch DATA_TYPE vec2<float> DATA 365e5c31af7Sopenharmony_ci 0.0 1.0 366e5c31af7Sopenharmony_ciEND 367e5c31af7Sopenharmony_ci 368e5c31af7Sopenharmony_ciBUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM 369e5c31af7Sopenharmony_ci 370e5c31af7Sopenharmony_ciPIPELINE graphics variant_pipeline 371e5c31af7Sopenharmony_ci ATTACH variant_vertex_shader 372e5c31af7Sopenharmony_ci ATTACH variant_fragment_shader 373e5c31af7Sopenharmony_ci FRAMEBUFFER_SIZE 256 256 374e5c31af7Sopenharmony_ci BIND BUFFER variant_framebuffer AS color LOCATION 0 375e5c31af7Sopenharmony_ci BIND BUFFER variant_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0 376e5c31af7Sopenharmony_ciEND 377e5c31af7Sopenharmony_ciCLEAR_COLOR variant_pipeline 0 0 0 255 378e5c31af7Sopenharmony_ci 379e5c31af7Sopenharmony_ciCLEAR variant_pipeline 380e5c31af7Sopenharmony_ciRUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256 381e5c31af7Sopenharmony_ci 382e5c31af7Sopenharmony_ciEXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 0 0 0 255 383