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