1e5c31af7Sopenharmony_ci#!amber 2e5c31af7Sopenharmony_ci 3e5c31af7Sopenharmony_ci# Copyright 2022 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_ci# Optimized using spirv-opt with the following arguments: 25e5c31af7Sopenharmony_ci# '--if-conversion' 26e5c31af7Sopenharmony_ci# '--ccp' 27e5c31af7Sopenharmony_ci# '--convert-local-access-chains' 28e5c31af7Sopenharmony_ci# '--eliminate-dead-branches' 29e5c31af7Sopenharmony_ci# '--merge-blocks' 30e5c31af7Sopenharmony_ci# '--eliminate-dead-branches' 31e5c31af7Sopenharmony_ci# '--merge-blocks' 32e5c31af7Sopenharmony_ci# '--private-to-local' 33e5c31af7Sopenharmony_ci# '--eliminate-dead-branches' 34e5c31af7Sopenharmony_ci# '--eliminate-dead-branches' 35e5c31af7Sopenharmony_ci# '--ccp' 36e5c31af7Sopenharmony_ci# '--eliminate-local-multi-store' 37e5c31af7Sopenharmony_ci# '--eliminate-dead-inserts' 38e5c31af7Sopenharmony_ci# '--simplify-instructions' 39e5c31af7Sopenharmony_ci# '--redundancy-elimination' 40e5c31af7Sopenharmony_ci# '--simplify-instructions' 41e5c31af7Sopenharmony_ci# '--copy-propagate-arrays' 42e5c31af7Sopenharmony_ci# '--eliminate-local-single-block' 43e5c31af7Sopenharmony_ci# '--convert-local-access-chains' 44e5c31af7Sopenharmony_ci# '--eliminate-local-single-store' 45e5c31af7Sopenharmony_ci# '--eliminate-dead-code-aggressive' 46e5c31af7Sopenharmony_ci# '--eliminate-local-single-store' 47e5c31af7Sopenharmony_ci# '--reduce-load-size' 48e5c31af7Sopenharmony_ci# '--eliminate-dead-branches' 49e5c31af7Sopenharmony_ci# '--simplify-instructions' 50e5c31af7Sopenharmony_ci# '--eliminate-dead-branches' 51e5c31af7Sopenharmony_ci# '--merge-return' 52e5c31af7Sopenharmony_ci# '--inline-entry-points-exhaustive' 53e5c31af7Sopenharmony_ci# '--eliminate-dead-branches' 54e5c31af7Sopenharmony_ci# '--merge-return' 55e5c31af7Sopenharmony_ci# '--eliminate-dead-inserts' 56e5c31af7Sopenharmony_ci# '--eliminate-dead-branches' 57e5c31af7Sopenharmony_ci# spirv-opt commit hash: a0370efd589be33d5d9a85cfde2f85841b3755af 58e5c31af7Sopenharmony_ci 59e5c31af7Sopenharmony_ci 60e5c31af7Sopenharmony_ci 61e5c31af7Sopenharmony_ciSHADER vertex variant_vertex_shader PASSTHROUGH 62e5c31af7Sopenharmony_ci 63e5c31af7Sopenharmony_ci# variant_fragment_shader is derived from the following GLSL: 64e5c31af7Sopenharmony_ci# #version 320 es 65e5c31af7Sopenharmony_ci# 66e5c31af7Sopenharmony_ci# #define _int_1 _GLF_uniform_int_values[0] 67e5c31af7Sopenharmony_ci# #define _int_0 _GLF_uniform_int_values[1] 68e5c31af7Sopenharmony_ci# #define _int_5 _GLF_uniform_int_values[2] 69e5c31af7Sopenharmony_ci# #define _int_3 _GLF_uniform_int_values[3] 70e5c31af7Sopenharmony_ci# #define _float_0_0 _GLF_uniform_float_values[0] 71e5c31af7Sopenharmony_ci# 72e5c31af7Sopenharmony_ci# precision highp float; 73e5c31af7Sopenharmony_ci# precision highp int; 74e5c31af7Sopenharmony_ci# 75e5c31af7Sopenharmony_ci# // Contents of _GLF_uniform_float_values: 0.0 76e5c31af7Sopenharmony_ci# layout(set = 0, binding = 0) uniform buf0 77e5c31af7Sopenharmony_ci# { 78e5c31af7Sopenharmony_ci# float _GLF_uniform_float_values[1]; 79e5c31af7Sopenharmony_ci# }; 80e5c31af7Sopenharmony_ci# 81e5c31af7Sopenharmony_ci# // Contents of _GLF_uniform_int_values: [1, 0, 5, 3] 82e5c31af7Sopenharmony_ci# layout(set = 0, binding = 1) uniform buf1 83e5c31af7Sopenharmony_ci# { 84e5c31af7Sopenharmony_ci# int _GLF_uniform_int_values[4]; 85e5c31af7Sopenharmony_ci# }; 86e5c31af7Sopenharmony_ci# 87e5c31af7Sopenharmony_ci# layout(location = 0) out vec4 _GLF_color; 88e5c31af7Sopenharmony_ci# 89e5c31af7Sopenharmony_ci# void main() 90e5c31af7Sopenharmony_ci# { 91e5c31af7Sopenharmony_ci# ivec4 v = ivec4(_int_5); 92e5c31af7Sopenharmony_ci# 93e5c31af7Sopenharmony_ci# // Iterates three times. 94e5c31af7Sopenharmony_ci# for(int k = 1; k < 4; k++) 95e5c31af7Sopenharmony_ci# { 96e5c31af7Sopenharmony_ci# for(int b = 4; b >= k; b--) 97e5c31af7Sopenharmony_ci# { 98e5c31af7Sopenharmony_ci# // Always false. 99e5c31af7Sopenharmony_ci# if(gl_FragCoord.x < 0.0) 100e5c31af7Sopenharmony_ci# { 101e5c31af7Sopenharmony_ci# return; 102e5c31af7Sopenharmony_ci# } 103e5c31af7Sopenharmony_ci# } 104e5c31af7Sopenharmony_ci# 105e5c31af7Sopenharmony_ci# // Always false. 106e5c31af7Sopenharmony_ci# if(gl_FragCoord.x < 0.0) 107e5c31af7Sopenharmony_ci# { 108e5c31af7Sopenharmony_ci# return; 109e5c31af7Sopenharmony_ci# } 110e5c31af7Sopenharmony_ci# 111e5c31af7Sopenharmony_ci# v[_int_1] = _int_1; 112e5c31af7Sopenharmony_ci# } 113e5c31af7Sopenharmony_ci# 114e5c31af7Sopenharmony_ci# // At this point v is (5, 1, 5, 5). 115e5c31af7Sopenharmony_ci# 116e5c31af7Sopenharmony_ci# for(int i = _int_1; i >= 0; i--) 117e5c31af7Sopenharmony_ci# { 118e5c31af7Sopenharmony_ci# for(int j = _int_3; j >= i + _int_1; j--) 119e5c31af7Sopenharmony_ci# { 120e5c31af7Sopenharmony_ci# // This is iterated with (i, j) pairs of (1, 3), (1, 2), (0, 3), (0, 2), (0, 1). 121e5c31af7Sopenharmony_ci# v[j]--; 122e5c31af7Sopenharmony_ci# } 123e5c31af7Sopenharmony_ci# } 124e5c31af7Sopenharmony_ci# 125e5c31af7Sopenharmony_ci# // Always true. 126e5c31af7Sopenharmony_ci# if(v == ivec4(_int_5, _int_0, _int_3, _int_3)) 127e5c31af7Sopenharmony_ci# { 128e5c31af7Sopenharmony_ci# _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1); 129e5c31af7Sopenharmony_ci# } 130e5c31af7Sopenharmony_ci# else 131e5c31af7Sopenharmony_ci# { 132e5c31af7Sopenharmony_ci# _GLF_color = vec4(_int_0); 133e5c31af7Sopenharmony_ci# } 134e5c31af7Sopenharmony_ci# } 135e5c31af7Sopenharmony_ciSHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 136e5c31af7Sopenharmony_ci; SPIR-V 137e5c31af7Sopenharmony_ci; Version: 1.0 138e5c31af7Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 10 139e5c31af7Sopenharmony_ci; Bound: 160 140e5c31af7Sopenharmony_ci; Schema: 0 141e5c31af7Sopenharmony_ci OpCapability Shader 142e5c31af7Sopenharmony_ci %1 = OpExtInstImport "GLSL.std.450" 143e5c31af7Sopenharmony_ci OpMemoryModel Logical GLSL450 144e5c31af7Sopenharmony_ci OpEntryPoint Fragment %4 "main" %46 %120 145e5c31af7Sopenharmony_ci OpExecutionMode %4 OriginUpperLeft 146e5c31af7Sopenharmony_ci OpSource ESSL 320 147e5c31af7Sopenharmony_ci OpName %4 "main" 148e5c31af7Sopenharmony_ci OpName %9 "v" 149e5c31af7Sopenharmony_ci OpName %13 "buf1" 150e5c31af7Sopenharmony_ci OpMemberName %13 0 "_GLF_uniform_int_values" 151e5c31af7Sopenharmony_ci OpName %15 "" 152e5c31af7Sopenharmony_ci OpName %46 "gl_FragCoord" 153e5c31af7Sopenharmony_ci OpName %120 "_GLF_color" 154e5c31af7Sopenharmony_ci OpDecorate %12 ArrayStride 16 155e5c31af7Sopenharmony_ci OpMemberDecorate %13 0 Offset 0 156e5c31af7Sopenharmony_ci OpDecorate %13 Block 157e5c31af7Sopenharmony_ci OpDecorate %15 DescriptorSet 0 158e5c31af7Sopenharmony_ci OpDecorate %15 Binding 1 159e5c31af7Sopenharmony_ci OpDecorate %46 BuiltIn FragCoord 160e5c31af7Sopenharmony_ci OpDecorate %120 Location 0 161e5c31af7Sopenharmony_ci %2 = OpTypeVoid 162e5c31af7Sopenharmony_ci %3 = OpTypeFunction %2 163e5c31af7Sopenharmony_ci %6 = OpTypeInt 32 1 164e5c31af7Sopenharmony_ci %7 = OpTypeVector %6 4 165e5c31af7Sopenharmony_ci %8 = OpTypePointer Function %7 166e5c31af7Sopenharmony_ci %10 = OpTypeInt 32 0 167e5c31af7Sopenharmony_ci %11 = OpConstant %10 4 168e5c31af7Sopenharmony_ci %12 = OpTypeArray %6 %11 169e5c31af7Sopenharmony_ci %13 = OpTypeStruct %12 170e5c31af7Sopenharmony_ci %14 = OpTypePointer Uniform %13 171e5c31af7Sopenharmony_ci %15 = OpVariable %14 Uniform 172e5c31af7Sopenharmony_ci %16 = OpConstant %6 0 173e5c31af7Sopenharmony_ci %17 = OpConstant %6 2 174e5c31af7Sopenharmony_ci %18 = OpTypePointer Uniform %6 175e5c31af7Sopenharmony_ci %22 = OpTypePointer Function %6 176e5c31af7Sopenharmony_ci %24 = OpConstant %6 1 177e5c31af7Sopenharmony_ci %31 = OpConstant %6 4 178e5c31af7Sopenharmony_ci %32 = OpTypeBool 179e5c31af7Sopenharmony_ci %43 = OpTypeFloat 32 180e5c31af7Sopenharmony_ci %44 = OpTypeVector %43 4 181e5c31af7Sopenharmony_ci %45 = OpTypePointer Input %44 182e5c31af7Sopenharmony_ci %46 = OpVariable %45 Input 183e5c31af7Sopenharmony_ci %47 = OpConstant %10 0 184e5c31af7Sopenharmony_ci %48 = OpTypePointer Input %43 185e5c31af7Sopenharmony_ci %51 = OpConstant %43 0 186e5c31af7Sopenharmony_ci %82 = OpConstant %6 3 187e5c31af7Sopenharmony_ci %114 = OpTypeVector %32 4 188e5c31af7Sopenharmony_ci %119 = OpTypePointer Output %44 189e5c31af7Sopenharmony_ci %120 = OpVariable %119 Output 190e5c31af7Sopenharmony_ci %152 = OpConstantFalse %32 191e5c31af7Sopenharmony_ci %153 = OpTypePointer Function %32 192e5c31af7Sopenharmony_ci %155 = OpConstantTrue %32 193e5c31af7Sopenharmony_ci %4 = OpFunction %2 None %3 194e5c31af7Sopenharmony_ci %5 = OpLabel 195e5c31af7Sopenharmony_ci %154 = OpVariable %153 Function %152 196e5c31af7Sopenharmony_ci %9 = OpVariable %8 Function 197e5c31af7Sopenharmony_ci OpSelectionMerge %150 None 198e5c31af7Sopenharmony_ci OpSwitch %47 %151 199e5c31af7Sopenharmony_ci %151 = OpLabel 200e5c31af7Sopenharmony_ci %19 = OpAccessChain %18 %15 %16 %17 201e5c31af7Sopenharmony_ci %20 = OpLoad %6 %19 202e5c31af7Sopenharmony_ci %21 = OpCompositeConstruct %7 %20 %20 %20 %20 203e5c31af7Sopenharmony_ci OpStore %9 %21 204e5c31af7Sopenharmony_ci OpBranch %25 205e5c31af7Sopenharmony_ci %25 = OpLabel 206e5c31af7Sopenharmony_ci %144 = OpPhi %6 %24 %151 %70 %28 207e5c31af7Sopenharmony_ci %33 = OpSLessThan %32 %144 %31 208e5c31af7Sopenharmony_ci OpLoopMerge %27 %28 None 209e5c31af7Sopenharmony_ci OpBranchConditional %33 %26 %27 210e5c31af7Sopenharmony_ci %26 = OpLabel 211e5c31af7Sopenharmony_ci OpBranch %35 212e5c31af7Sopenharmony_ci %35 = OpLabel 213e5c31af7Sopenharmony_ci %148 = OpPhi %6 %31 %26 %57 %38 214e5c31af7Sopenharmony_ci %42 = OpSGreaterThanEqual %32 %148 %144 215e5c31af7Sopenharmony_ci OpLoopMerge %37 %38 None 216e5c31af7Sopenharmony_ci OpBranchConditional %42 %36 %37 217e5c31af7Sopenharmony_ci %36 = OpLabel 218e5c31af7Sopenharmony_ci %49 = OpAccessChain %48 %46 %47 219e5c31af7Sopenharmony_ci %50 = OpLoad %43 %49 220e5c31af7Sopenharmony_ci %52 = OpFOrdLessThan %32 %50 %51 221e5c31af7Sopenharmony_ci OpSelectionMerge %54 None 222e5c31af7Sopenharmony_ci OpBranchConditional %52 %53 %54 223e5c31af7Sopenharmony_ci %53 = OpLabel 224e5c31af7Sopenharmony_ci OpStore %154 %155 225e5c31af7Sopenharmony_ci OpBranch %37 226e5c31af7Sopenharmony_ci %54 = OpLabel 227e5c31af7Sopenharmony_ci OpBranch %38 228e5c31af7Sopenharmony_ci %38 = OpLabel 229e5c31af7Sopenharmony_ci %57 = OpISub %6 %148 %24 230e5c31af7Sopenharmony_ci OpBranch %35 231e5c31af7Sopenharmony_ci %37 = OpLabel 232e5c31af7Sopenharmony_ci %157 = OpLoad %32 %154 233e5c31af7Sopenharmony_ci OpSelectionMerge %156 None 234e5c31af7Sopenharmony_ci OpBranchConditional %157 %27 %156 235e5c31af7Sopenharmony_ci %156 = OpLabel 236e5c31af7Sopenharmony_ci %58 = OpAccessChain %48 %46 %47 237e5c31af7Sopenharmony_ci %59 = OpLoad %43 %58 238e5c31af7Sopenharmony_ci %60 = OpFOrdLessThan %32 %59 %51 239e5c31af7Sopenharmony_ci OpSelectionMerge %62 None 240e5c31af7Sopenharmony_ci OpBranchConditional %60 %61 %62 241e5c31af7Sopenharmony_ci %61 = OpLabel 242e5c31af7Sopenharmony_ci OpStore %154 %155 243e5c31af7Sopenharmony_ci OpBranch %27 244e5c31af7Sopenharmony_ci %62 = OpLabel 245e5c31af7Sopenharmony_ci %64 = OpAccessChain %18 %15 %16 %16 246e5c31af7Sopenharmony_ci %65 = OpLoad %6 %64 247e5c31af7Sopenharmony_ci %68 = OpAccessChain %22 %9 %65 248e5c31af7Sopenharmony_ci OpStore %68 %65 249e5c31af7Sopenharmony_ci OpBranch %28 250e5c31af7Sopenharmony_ci %28 = OpLabel 251e5c31af7Sopenharmony_ci %70 = OpIAdd %6 %144 %24 252e5c31af7Sopenharmony_ci OpBranch %25 253e5c31af7Sopenharmony_ci %27 = OpLabel 254e5c31af7Sopenharmony_ci %159 = OpLoad %32 %154 255e5c31af7Sopenharmony_ci OpSelectionMerge %158 None 256e5c31af7Sopenharmony_ci OpBranchConditional %159 %150 %158 257e5c31af7Sopenharmony_ci %158 = OpLabel 258e5c31af7Sopenharmony_ci %72 = OpAccessChain %18 %15 %16 %16 259e5c31af7Sopenharmony_ci %73 = OpLoad %6 %72 260e5c31af7Sopenharmony_ci OpBranch %74 261e5c31af7Sopenharmony_ci %74 = OpLabel 262e5c31af7Sopenharmony_ci %145 = OpPhi %6 %73 %158 %103 %77 263e5c31af7Sopenharmony_ci %80 = OpSGreaterThanEqual %32 %145 %16 264e5c31af7Sopenharmony_ci OpLoopMerge %76 %77 None 265e5c31af7Sopenharmony_ci OpBranchConditional %80 %75 %76 266e5c31af7Sopenharmony_ci %75 = OpLabel 267e5c31af7Sopenharmony_ci %83 = OpAccessChain %18 %15 %16 %82 268e5c31af7Sopenharmony_ci %84 = OpLoad %6 %83 269e5c31af7Sopenharmony_ci OpBranch %85 270e5c31af7Sopenharmony_ci %85 = OpLabel 271e5c31af7Sopenharmony_ci %146 = OpPhi %6 %84 %75 %101 %86 272e5c31af7Sopenharmony_ci %94 = OpIAdd %6 %145 %73 273e5c31af7Sopenharmony_ci %95 = OpSGreaterThanEqual %32 %146 %94 274e5c31af7Sopenharmony_ci OpLoopMerge %87 %86 None 275e5c31af7Sopenharmony_ci OpBranchConditional %95 %86 %87 276e5c31af7Sopenharmony_ci %86 = OpLabel 277e5c31af7Sopenharmony_ci %97 = OpAccessChain %22 %9 %146 278e5c31af7Sopenharmony_ci %98 = OpLoad %6 %97 279e5c31af7Sopenharmony_ci %99 = OpISub %6 %98 %24 280e5c31af7Sopenharmony_ci OpStore %97 %99 281e5c31af7Sopenharmony_ci %101 = OpISub %6 %146 %24 282e5c31af7Sopenharmony_ci OpBranch %85 283e5c31af7Sopenharmony_ci %87 = OpLabel 284e5c31af7Sopenharmony_ci OpBranch %77 285e5c31af7Sopenharmony_ci %77 = OpLabel 286e5c31af7Sopenharmony_ci %103 = OpISub %6 %145 %24 287e5c31af7Sopenharmony_ci OpBranch %74 288e5c31af7Sopenharmony_ci %76 = OpLabel 289e5c31af7Sopenharmony_ci %104 = OpLoad %7 %9 290e5c31af7Sopenharmony_ci %107 = OpAccessChain %18 %15 %16 %24 291e5c31af7Sopenharmony_ci %108 = OpLoad %6 %107 292e5c31af7Sopenharmony_ci %109 = OpAccessChain %18 %15 %16 %82 293e5c31af7Sopenharmony_ci %110 = OpLoad %6 %109 294e5c31af7Sopenharmony_ci %113 = OpCompositeConstruct %7 %20 %108 %110 %110 295e5c31af7Sopenharmony_ci %115 = OpIEqual %114 %104 %113 296e5c31af7Sopenharmony_ci %116 = OpAll %32 %115 297e5c31af7Sopenharmony_ci OpSelectionMerge %118 None 298e5c31af7Sopenharmony_ci OpBranchConditional %116 %117 %134 299e5c31af7Sopenharmony_ci %117 = OpLabel 300e5c31af7Sopenharmony_ci %123 = OpConvertSToF %43 %73 301e5c31af7Sopenharmony_ci %126 = OpConvertSToF %43 %108 302e5c31af7Sopenharmony_ci %133 = OpCompositeConstruct %44 %123 %126 %126 %123 303e5c31af7Sopenharmony_ci OpStore %120 %133 304e5c31af7Sopenharmony_ci OpBranch %118 305e5c31af7Sopenharmony_ci %134 = OpLabel 306e5c31af7Sopenharmony_ci %137 = OpConvertSToF %43 %108 307e5c31af7Sopenharmony_ci %138 = OpCompositeConstruct %44 %137 %137 %137 %137 308e5c31af7Sopenharmony_ci OpStore %120 %138 309e5c31af7Sopenharmony_ci OpBranch %118 310e5c31af7Sopenharmony_ci %118 = OpLabel 311e5c31af7Sopenharmony_ci OpStore %154 %155 312e5c31af7Sopenharmony_ci OpBranch %150 313e5c31af7Sopenharmony_ci %150 = OpLabel 314e5c31af7Sopenharmony_ci OpReturn 315e5c31af7Sopenharmony_ci OpFunctionEnd 316e5c31af7Sopenharmony_ciEND 317e5c31af7Sopenharmony_ci 318e5c31af7Sopenharmony_ci# uniforms for variant 319e5c31af7Sopenharmony_ci 320e5c31af7Sopenharmony_ci# _GLF_uniform_int_values 321e5c31af7Sopenharmony_ciBUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA 322e5c31af7Sopenharmony_ci 1 0 5 3 323e5c31af7Sopenharmony_ciEND 324e5c31af7Sopenharmony_ci# _GLF_uniform_float_values 325e5c31af7Sopenharmony_ciBUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA 326e5c31af7Sopenharmony_ci 0.0 327e5c31af7Sopenharmony_ciEND 328e5c31af7Sopenharmony_ci 329e5c31af7Sopenharmony_ciBUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM 330e5c31af7Sopenharmony_ci 331e5c31af7Sopenharmony_ciPIPELINE graphics variant_pipeline 332e5c31af7Sopenharmony_ci ATTACH variant_vertex_shader 333e5c31af7Sopenharmony_ci ATTACH variant_fragment_shader 334e5c31af7Sopenharmony_ci FRAMEBUFFER_SIZE 32 32 335e5c31af7Sopenharmony_ci BIND BUFFER variant_framebuffer AS color LOCATION 0 336e5c31af7Sopenharmony_ci BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1 337e5c31af7Sopenharmony_ci BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0 338e5c31af7Sopenharmony_ciEND 339e5c31af7Sopenharmony_ciCLEAR_COLOR variant_pipeline 0 0 0 255 340e5c31af7Sopenharmony_ci 341e5c31af7Sopenharmony_ciCLEAR variant_pipeline 342e5c31af7Sopenharmony_ciRUN variant_pipeline DRAW_RECT POS 0 0 SIZE 32 32 343e5c31af7Sopenharmony_ci 344e5c31af7Sopenharmony_ciEXPECT variant_framebuffer IDX 0 0 SIZE 32 32 EQ_RGBA 255 0 0 255 345