1e5c31af7Sopenharmony_ci# Copyright 2019 Google LLC 2e5c31af7Sopenharmony_ci# 3e5c31af7Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 4e5c31af7Sopenharmony_ci# you may not use this file except in compliance with the License. 5e5c31af7Sopenharmony_ci# You may obtain a copy of the License at 6e5c31af7Sopenharmony_ci# 7e5c31af7Sopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 8e5c31af7Sopenharmony_ci# 9e5c31af7Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software 10e5c31af7Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 11e5c31af7Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12e5c31af7Sopenharmony_ci# See the License for the specific language governing permissions and 13e5c31af7Sopenharmony_ci# limitations under the License. 14e5c31af7Sopenharmony_ci 15e5c31af7Sopenharmony_ci# A test for a bug found by GraphicsFuzz. 16e5c31af7Sopenharmony_ci 17e5c31af7Sopenharmony_ci# Short description: A compute shader with an unreachable barrier in a loop nest 18e5c31af7Sopenharmony_ci 19e5c31af7Sopenharmony_ci# The test passes because the compute shader has a single global invocation that 20e5c31af7Sopenharmony_ci# is guaranteed to set 'value' to (0.0, 0.0, 0.0, 1.0), and that writes the 21e5c31af7Sopenharmony_ci# components of 'value', cast to integers, to '_compute_data' at the end of 22e5c31af7Sopenharmony_ci# execution. The early return is unreachable. 23e5c31af7Sopenharmony_ci 24e5c31af7Sopenharmony_ci# Derived from the following GLSL. 25e5c31af7Sopenharmony_ci 26e5c31af7Sopenharmony_ci# Compute shader GLSL: 27e5c31af7Sopenharmony_ci# #version 310 es 28e5c31af7Sopenharmony_ci# 29e5c31af7Sopenharmony_ci# precision highp float; 30e5c31af7Sopenharmony_ci# 31e5c31af7Sopenharmony_ci# layout(set = 0, binding = 2) uniform buf2 { 32e5c31af7Sopenharmony_ci# vec2 resolution; 33e5c31af7Sopenharmony_ci# }; 34e5c31af7Sopenharmony_ci# 35e5c31af7Sopenharmony_ci# layout(set = 0, binding = 1) uniform buf1 { 36e5c31af7Sopenharmony_ci# vec2 injectionSwitch; 37e5c31af7Sopenharmony_ci# }; 38e5c31af7Sopenharmony_ci# 39e5c31af7Sopenharmony_ci# layout(std430, binding = 0) buffer doesNotMatter { 40e5c31af7Sopenharmony_ci# int _compute_data[]; 41e5c31af7Sopenharmony_ci# }; 42e5c31af7Sopenharmony_ci# 43e5c31af7Sopenharmony_ci# layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; 44e5c31af7Sopenharmony_ci# 45e5c31af7Sopenharmony_ci# void main(void) 46e5c31af7Sopenharmony_ci# { 47e5c31af7Sopenharmony_ci# vec4 value; 48e5c31af7Sopenharmony_ci# float A[1]; 49e5c31af7Sopenharmony_ci# A[0] = 0.0; 50e5c31af7Sopenharmony_ci# for(int i = 0; i < 50; i++) { 51e5c31af7Sopenharmony_ci# if(i > 0) { 52e5c31af7Sopenharmony_ci# A[0] += A[0]; 53e5c31af7Sopenharmony_ci# } 54e5c31af7Sopenharmony_ci# } 55e5c31af7Sopenharmony_ci# do { 56e5c31af7Sopenharmony_ci# if(gl_GlobalInvocationID.x < 100u) { 57e5c31af7Sopenharmony_ci# value = vec4(0.0, 0.0, 0.0, 1.0); 58e5c31af7Sopenharmony_ci# for(int m = 0; m < 1; m++) { 59e5c31af7Sopenharmony_ci# for(int l = 0; l < 1; l++) { 60e5c31af7Sopenharmony_ci# if(injectionSwitch.x > injectionSwitch.y) 61e5c31af7Sopenharmony_ci# return; 62e5c31af7Sopenharmony_ci# } 63e5c31af7Sopenharmony_ci# } 64e5c31af7Sopenharmony_ci# for(int n = 0; n < 1; n ++) { 65e5c31af7Sopenharmony_ci# if(injectionSwitch.x > injectionSwitch.y) 66e5c31af7Sopenharmony_ci# barrier(); 67e5c31af7Sopenharmony_ci# } 68e5c31af7Sopenharmony_ci# } else { 69e5c31af7Sopenharmony_ci# if(gl_GlobalInvocationID.x < 120u) { 70e5c31af7Sopenharmony_ci# value = vec4(A[0] / resolution.x, A[0] / resolution.y, 0.0, 1.0); 71e5c31af7Sopenharmony_ci# } else { 72e5c31af7Sopenharmony_ci# if(injectionSwitch.x > injectionSwitch.y) 73e5c31af7Sopenharmony_ci# continue; 74e5c31af7Sopenharmony_ci# } 75e5c31af7Sopenharmony_ci# } 76e5c31af7Sopenharmony_ci# } while(false); 77e5c31af7Sopenharmony_ci# _compute_data[0] = int(value.x); 78e5c31af7Sopenharmony_ci# _compute_data[1] = int(value.y); 79e5c31af7Sopenharmony_ci# _compute_data[2] = int(value.z); 80e5c31af7Sopenharmony_ci# _compute_data[3] = int(value.w); 81e5c31af7Sopenharmony_ci# } 82e5c31af7Sopenharmony_ci 83e5c31af7Sopenharmony_ci[compute shader spirv] 84e5c31af7Sopenharmony_ci; SPIR-V 85e5c31af7Sopenharmony_ci; Version: 1.0 86e5c31af7Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 7 87e5c31af7Sopenharmony_ci; Bound: 168 88e5c31af7Sopenharmony_ci; Schema: 0 89e5c31af7Sopenharmony_ci OpCapability Shader 90e5c31af7Sopenharmony_ci %1 = OpExtInstImport "GLSL.std.450" 91e5c31af7Sopenharmony_ci OpMemoryModel Logical GLSL450 92e5c31af7Sopenharmony_ci OpEntryPoint GLCompute %4 "main" %47 93e5c31af7Sopenharmony_ci OpExecutionMode %4 LocalSize 1 1 1 94e5c31af7Sopenharmony_ci OpSource ESSL 310 95e5c31af7Sopenharmony_ci OpName %4 "main" 96e5c31af7Sopenharmony_ci OpName %11 "A" 97e5c31af7Sopenharmony_ci OpName %18 "i" 98e5c31af7Sopenharmony_ci OpName %47 "gl_GlobalInvocationID" 99e5c31af7Sopenharmony_ci OpName %58 "value" 100e5c31af7Sopenharmony_ci OpName %61 "m" 101e5c31af7Sopenharmony_ci OpName %69 "l" 102e5c31af7Sopenharmony_ci OpName %78 "buf1" 103e5c31af7Sopenharmony_ci OpMemberName %78 0 "injectionSwitch" 104e5c31af7Sopenharmony_ci OpName %80 "" 105e5c31af7Sopenharmony_ci OpName %94 "n" 106e5c31af7Sopenharmony_ci OpName %122 "buf2" 107e5c31af7Sopenharmony_ci OpMemberName %122 0 "resolution" 108e5c31af7Sopenharmony_ci OpName %124 "" 109e5c31af7Sopenharmony_ci OpName %145 "doesNotMatter" 110e5c31af7Sopenharmony_ci OpMemberName %145 0 "_compute_data" 111e5c31af7Sopenharmony_ci OpName %147 "" 112e5c31af7Sopenharmony_ci OpDecorate %47 BuiltIn GlobalInvocationId 113e5c31af7Sopenharmony_ci OpMemberDecorate %78 0 Offset 0 114e5c31af7Sopenharmony_ci OpDecorate %78 Block 115e5c31af7Sopenharmony_ci OpDecorate %80 DescriptorSet 0 116e5c31af7Sopenharmony_ci OpDecorate %80 Binding 1 117e5c31af7Sopenharmony_ci OpMemberDecorate %122 0 Offset 0 118e5c31af7Sopenharmony_ci OpDecorate %122 Block 119e5c31af7Sopenharmony_ci OpDecorate %124 DescriptorSet 0 120e5c31af7Sopenharmony_ci OpDecorate %124 Binding 2 121e5c31af7Sopenharmony_ci OpDecorate %144 ArrayStride 4 122e5c31af7Sopenharmony_ci OpMemberDecorate %145 0 Offset 0 123e5c31af7Sopenharmony_ci OpDecorate %145 BufferBlock 124e5c31af7Sopenharmony_ci OpDecorate %147 DescriptorSet 0 125e5c31af7Sopenharmony_ci OpDecorate %147 Binding 0 126e5c31af7Sopenharmony_ci %2 = OpTypeVoid 127e5c31af7Sopenharmony_ci %3 = OpTypeFunction %2 128e5c31af7Sopenharmony_ci %6 = OpTypeFloat 32 129e5c31af7Sopenharmony_ci %7 = OpTypeInt 32 0 130e5c31af7Sopenharmony_ci %8 = OpConstant %7 1 131e5c31af7Sopenharmony_ci %9 = OpTypeArray %6 %8 132e5c31af7Sopenharmony_ci %10 = OpTypePointer Function %9 133e5c31af7Sopenharmony_ci %12 = OpTypeInt 32 1 134e5c31af7Sopenharmony_ci %13 = OpConstant %12 0 135e5c31af7Sopenharmony_ci %14 = OpConstant %6 0 136e5c31af7Sopenharmony_ci %15 = OpTypePointer Function %6 137e5c31af7Sopenharmony_ci %17 = OpTypePointer Function %12 138e5c31af7Sopenharmony_ci %25 = OpConstant %12 50 139e5c31af7Sopenharmony_ci %26 = OpTypeBool 140e5c31af7Sopenharmony_ci %39 = OpConstant %12 1 141e5c31af7Sopenharmony_ci %45 = OpTypeVector %7 3 142e5c31af7Sopenharmony_ci %46 = OpTypePointer Input %45 143e5c31af7Sopenharmony_ci %47 = OpVariable %46 Input 144e5c31af7Sopenharmony_ci %48 = OpConstant %7 0 145e5c31af7Sopenharmony_ci %49 = OpTypePointer Input %7 146e5c31af7Sopenharmony_ci %52 = OpConstant %7 100 147e5c31af7Sopenharmony_ci %56 = OpTypeVector %6 4 148e5c31af7Sopenharmony_ci %57 = OpTypePointer Function %56 149e5c31af7Sopenharmony_ci %59 = OpConstant %6 1 150e5c31af7Sopenharmony_ci %60 = OpConstantComposite %56 %14 %14 %14 %59 151e5c31af7Sopenharmony_ci %77 = OpTypeVector %6 2 152e5c31af7Sopenharmony_ci %78 = OpTypeStruct %77 153e5c31af7Sopenharmony_ci %79 = OpTypePointer Uniform %78 154e5c31af7Sopenharmony_ci %80 = OpVariable %79 Uniform 155e5c31af7Sopenharmony_ci %81 = OpTypePointer Uniform %6 156e5c31af7Sopenharmony_ci %109 = OpConstant %7 2 157e5c31af7Sopenharmony_ci %110 = OpConstant %7 264 158e5c31af7Sopenharmony_ci %116 = OpConstant %7 120 159e5c31af7Sopenharmony_ci %122 = OpTypeStruct %77 160e5c31af7Sopenharmony_ci %123 = OpTypePointer Uniform %122 161e5c31af7Sopenharmony_ci %124 = OpVariable %123 Uniform 162e5c31af7Sopenharmony_ci %143 = OpConstantFalse %26 163e5c31af7Sopenharmony_ci %144 = OpTypeRuntimeArray %12 164e5c31af7Sopenharmony_ci %145 = OpTypeStruct %144 165e5c31af7Sopenharmony_ci %146 = OpTypePointer Uniform %145 166e5c31af7Sopenharmony_ci %147 = OpVariable %146 Uniform 167e5c31af7Sopenharmony_ci %151 = OpTypePointer Uniform %12 168e5c31af7Sopenharmony_ci %157 = OpConstant %12 2 169e5c31af7Sopenharmony_ci %162 = OpConstant %12 3 170e5c31af7Sopenharmony_ci %163 = OpConstant %7 3 171e5c31af7Sopenharmony_ci %4 = OpFunction %2 None %3 172e5c31af7Sopenharmony_ci %5 = OpLabel 173e5c31af7Sopenharmony_ci %11 = OpVariable %10 Function 174e5c31af7Sopenharmony_ci %18 = OpVariable %17 Function 175e5c31af7Sopenharmony_ci %58 = OpVariable %57 Function 176e5c31af7Sopenharmony_ci %61 = OpVariable %17 Function 177e5c31af7Sopenharmony_ci %69 = OpVariable %17 Function 178e5c31af7Sopenharmony_ci %94 = OpVariable %17 Function 179e5c31af7Sopenharmony_ci %16 = OpAccessChain %15 %11 %13 180e5c31af7Sopenharmony_ci OpStore %16 %14 181e5c31af7Sopenharmony_ci OpStore %18 %13 182e5c31af7Sopenharmony_ci OpBranch %19 183e5c31af7Sopenharmony_ci %19 = OpLabel 184e5c31af7Sopenharmony_ci OpLoopMerge %21 %22 None 185e5c31af7Sopenharmony_ci OpBranch %23 186e5c31af7Sopenharmony_ci %23 = OpLabel 187e5c31af7Sopenharmony_ci %24 = OpLoad %12 %18 188e5c31af7Sopenharmony_ci %27 = OpSLessThan %26 %24 %25 189e5c31af7Sopenharmony_ci OpBranchConditional %27 %20 %21 190e5c31af7Sopenharmony_ci %20 = OpLabel 191e5c31af7Sopenharmony_ci %28 = OpLoad %12 %18 192e5c31af7Sopenharmony_ci %29 = OpSGreaterThan %26 %28 %13 193e5c31af7Sopenharmony_ci OpSelectionMerge %31 None 194e5c31af7Sopenharmony_ci OpBranchConditional %29 %30 %31 195e5c31af7Sopenharmony_ci %30 = OpLabel 196e5c31af7Sopenharmony_ci %32 = OpAccessChain %15 %11 %13 197e5c31af7Sopenharmony_ci %33 = OpLoad %6 %32 198e5c31af7Sopenharmony_ci %34 = OpAccessChain %15 %11 %13 199e5c31af7Sopenharmony_ci %35 = OpLoad %6 %34 200e5c31af7Sopenharmony_ci %36 = OpFAdd %6 %35 %33 201e5c31af7Sopenharmony_ci %37 = OpAccessChain %15 %11 %13 202e5c31af7Sopenharmony_ci OpStore %37 %36 203e5c31af7Sopenharmony_ci OpBranch %31 204e5c31af7Sopenharmony_ci %31 = OpLabel 205e5c31af7Sopenharmony_ci OpBranch %22 206e5c31af7Sopenharmony_ci %22 = OpLabel 207e5c31af7Sopenharmony_ci %38 = OpLoad %12 %18 208e5c31af7Sopenharmony_ci %40 = OpIAdd %12 %38 %39 209e5c31af7Sopenharmony_ci OpStore %18 %40 210e5c31af7Sopenharmony_ci OpBranch %19 211e5c31af7Sopenharmony_ci %21 = OpLabel 212e5c31af7Sopenharmony_ci OpBranch %41 213e5c31af7Sopenharmony_ci %41 = OpLabel 214e5c31af7Sopenharmony_ci OpLoopMerge %43 %44 None 215e5c31af7Sopenharmony_ci OpBranch %42 216e5c31af7Sopenharmony_ci %42 = OpLabel 217e5c31af7Sopenharmony_ci %50 = OpAccessChain %49 %47 %48 218e5c31af7Sopenharmony_ci %51 = OpLoad %7 %50 219e5c31af7Sopenharmony_ci %53 = OpULessThan %26 %51 %52 220e5c31af7Sopenharmony_ci OpSelectionMerge %55 None 221e5c31af7Sopenharmony_ci OpBranchConditional %53 %54 %113 222e5c31af7Sopenharmony_ci %54 = OpLabel 223e5c31af7Sopenharmony_ci OpStore %58 %60 224e5c31af7Sopenharmony_ci OpStore %61 %13 225e5c31af7Sopenharmony_ci OpBranch %62 226e5c31af7Sopenharmony_ci %62 = OpLabel 227e5c31af7Sopenharmony_ci OpLoopMerge %64 %65 None 228e5c31af7Sopenharmony_ci OpBranch %66 229e5c31af7Sopenharmony_ci %66 = OpLabel 230e5c31af7Sopenharmony_ci %67 = OpLoad %12 %61 231e5c31af7Sopenharmony_ci %68 = OpSLessThan %26 %67 %39 232e5c31af7Sopenharmony_ci OpBranchConditional %68 %63 %64 233e5c31af7Sopenharmony_ci %63 = OpLabel 234e5c31af7Sopenharmony_ci OpStore %69 %13 235e5c31af7Sopenharmony_ci OpBranch %70 236e5c31af7Sopenharmony_ci %70 = OpLabel 237e5c31af7Sopenharmony_ci OpLoopMerge %72 %73 None 238e5c31af7Sopenharmony_ci OpBranch %74 239e5c31af7Sopenharmony_ci %74 = OpLabel 240e5c31af7Sopenharmony_ci %75 = OpLoad %12 %69 241e5c31af7Sopenharmony_ci %76 = OpSLessThan %26 %75 %39 242e5c31af7Sopenharmony_ci OpBranchConditional %76 %71 %72 243e5c31af7Sopenharmony_ci %71 = OpLabel 244e5c31af7Sopenharmony_ci %82 = OpAccessChain %81 %80 %13 %48 245e5c31af7Sopenharmony_ci %83 = OpLoad %6 %82 246e5c31af7Sopenharmony_ci %84 = OpAccessChain %81 %80 %13 %8 247e5c31af7Sopenharmony_ci %85 = OpLoad %6 %84 248e5c31af7Sopenharmony_ci %86 = OpFOrdGreaterThan %26 %83 %85 249e5c31af7Sopenharmony_ci OpSelectionMerge %88 None 250e5c31af7Sopenharmony_ci OpBranchConditional %86 %87 %88 251e5c31af7Sopenharmony_ci %87 = OpLabel 252e5c31af7Sopenharmony_ci OpReturn 253e5c31af7Sopenharmony_ci %88 = OpLabel 254e5c31af7Sopenharmony_ci OpBranch %73 255e5c31af7Sopenharmony_ci %73 = OpLabel 256e5c31af7Sopenharmony_ci %90 = OpLoad %12 %69 257e5c31af7Sopenharmony_ci %91 = OpIAdd %12 %90 %39 258e5c31af7Sopenharmony_ci OpStore %69 %91 259e5c31af7Sopenharmony_ci OpBranch %70 260e5c31af7Sopenharmony_ci %72 = OpLabel 261e5c31af7Sopenharmony_ci OpBranch %65 262e5c31af7Sopenharmony_ci %65 = OpLabel 263e5c31af7Sopenharmony_ci %92 = OpLoad %12 %61 264e5c31af7Sopenharmony_ci %93 = OpIAdd %12 %92 %39 265e5c31af7Sopenharmony_ci OpStore %61 %93 266e5c31af7Sopenharmony_ci OpBranch %62 267e5c31af7Sopenharmony_ci %64 = OpLabel 268e5c31af7Sopenharmony_ci OpStore %94 %13 269e5c31af7Sopenharmony_ci OpBranch %95 270e5c31af7Sopenharmony_ci %95 = OpLabel 271e5c31af7Sopenharmony_ci OpLoopMerge %97 %98 None 272e5c31af7Sopenharmony_ci OpBranch %99 273e5c31af7Sopenharmony_ci %99 = OpLabel 274e5c31af7Sopenharmony_ci %100 = OpLoad %12 %94 275e5c31af7Sopenharmony_ci %101 = OpSLessThan %26 %100 %39 276e5c31af7Sopenharmony_ci OpBranchConditional %101 %96 %97 277e5c31af7Sopenharmony_ci %96 = OpLabel 278e5c31af7Sopenharmony_ci %102 = OpAccessChain %81 %80 %13 %48 279e5c31af7Sopenharmony_ci %103 = OpLoad %6 %102 280e5c31af7Sopenharmony_ci %104 = OpAccessChain %81 %80 %13 %8 281e5c31af7Sopenharmony_ci %105 = OpLoad %6 %104 282e5c31af7Sopenharmony_ci %106 = OpFOrdGreaterThan %26 %103 %105 283e5c31af7Sopenharmony_ci OpSelectionMerge %108 None 284e5c31af7Sopenharmony_ci OpBranchConditional %106 %107 %108 285e5c31af7Sopenharmony_ci %107 = OpLabel 286e5c31af7Sopenharmony_ci OpControlBarrier %109 %109 %110 287e5c31af7Sopenharmony_ci OpBranch %108 288e5c31af7Sopenharmony_ci %108 = OpLabel 289e5c31af7Sopenharmony_ci OpBranch %98 290e5c31af7Sopenharmony_ci %98 = OpLabel 291e5c31af7Sopenharmony_ci %111 = OpLoad %12 %94 292e5c31af7Sopenharmony_ci %112 = OpIAdd %12 %111 %39 293e5c31af7Sopenharmony_ci OpStore %94 %112 294e5c31af7Sopenharmony_ci OpBranch %95 295e5c31af7Sopenharmony_ci %97 = OpLabel 296e5c31af7Sopenharmony_ci OpBranch %55 297e5c31af7Sopenharmony_ci %113 = OpLabel 298e5c31af7Sopenharmony_ci %114 = OpAccessChain %49 %47 %48 299e5c31af7Sopenharmony_ci %115 = OpLoad %7 %114 300e5c31af7Sopenharmony_ci %117 = OpULessThan %26 %115 %116 301e5c31af7Sopenharmony_ci OpSelectionMerge %119 None 302e5c31af7Sopenharmony_ci OpBranchConditional %117 %118 %134 303e5c31af7Sopenharmony_ci %118 = OpLabel 304e5c31af7Sopenharmony_ci %120 = OpAccessChain %15 %11 %13 305e5c31af7Sopenharmony_ci %121 = OpLoad %6 %120 306e5c31af7Sopenharmony_ci %125 = OpAccessChain %81 %124 %13 %48 307e5c31af7Sopenharmony_ci %126 = OpLoad %6 %125 308e5c31af7Sopenharmony_ci %127 = OpFDiv %6 %121 %126 309e5c31af7Sopenharmony_ci %128 = OpAccessChain %15 %11 %13 310e5c31af7Sopenharmony_ci %129 = OpLoad %6 %128 311e5c31af7Sopenharmony_ci %130 = OpAccessChain %81 %124 %13 %8 312e5c31af7Sopenharmony_ci %131 = OpLoad %6 %130 313e5c31af7Sopenharmony_ci %132 = OpFDiv %6 %129 %131 314e5c31af7Sopenharmony_ci %133 = OpCompositeConstruct %56 %127 %132 %14 %59 315e5c31af7Sopenharmony_ci OpStore %58 %133 316e5c31af7Sopenharmony_ci OpBranch %119 317e5c31af7Sopenharmony_ci %134 = OpLabel 318e5c31af7Sopenharmony_ci %135 = OpAccessChain %81 %80 %13 %48 319e5c31af7Sopenharmony_ci %136 = OpLoad %6 %135 320e5c31af7Sopenharmony_ci %137 = OpAccessChain %81 %80 %13 %8 321e5c31af7Sopenharmony_ci %138 = OpLoad %6 %137 322e5c31af7Sopenharmony_ci %139 = OpFOrdGreaterThan %26 %136 %138 323e5c31af7Sopenharmony_ci OpSelectionMerge %141 None 324e5c31af7Sopenharmony_ci OpBranchConditional %139 %140 %141 325e5c31af7Sopenharmony_ci %140 = OpLabel 326e5c31af7Sopenharmony_ci OpBranch %44 327e5c31af7Sopenharmony_ci %141 = OpLabel 328e5c31af7Sopenharmony_ci OpBranch %119 329e5c31af7Sopenharmony_ci %119 = OpLabel 330e5c31af7Sopenharmony_ci OpBranch %55 331e5c31af7Sopenharmony_ci %55 = OpLabel 332e5c31af7Sopenharmony_ci OpBranch %44 333e5c31af7Sopenharmony_ci %44 = OpLabel 334e5c31af7Sopenharmony_ci OpBranchConditional %143 %41 %43 335e5c31af7Sopenharmony_ci %43 = OpLabel 336e5c31af7Sopenharmony_ci %148 = OpAccessChain %15 %58 %48 337e5c31af7Sopenharmony_ci %149 = OpLoad %6 %148 338e5c31af7Sopenharmony_ci %150 = OpConvertFToS %12 %149 339e5c31af7Sopenharmony_ci %152 = OpAccessChain %151 %147 %13 %13 340e5c31af7Sopenharmony_ci OpStore %152 %150 341e5c31af7Sopenharmony_ci %153 = OpAccessChain %15 %58 %8 342e5c31af7Sopenharmony_ci %154 = OpLoad %6 %153 343e5c31af7Sopenharmony_ci %155 = OpConvertFToS %12 %154 344e5c31af7Sopenharmony_ci %156 = OpAccessChain %151 %147 %13 %39 345e5c31af7Sopenharmony_ci OpStore %156 %155 346e5c31af7Sopenharmony_ci %158 = OpAccessChain %15 %58 %109 347e5c31af7Sopenharmony_ci %159 = OpLoad %6 %158 348e5c31af7Sopenharmony_ci %160 = OpConvertFToS %12 %159 349e5c31af7Sopenharmony_ci %161 = OpAccessChain %151 %147 %13 %157 350e5c31af7Sopenharmony_ci OpStore %161 %160 351e5c31af7Sopenharmony_ci %164 = OpAccessChain %15 %58 %163 352e5c31af7Sopenharmony_ci %165 = OpLoad %6 %164 353e5c31af7Sopenharmony_ci %166 = OpConvertFToS %12 %165 354e5c31af7Sopenharmony_ci %167 = OpAccessChain %151 %147 %13 %162 355e5c31af7Sopenharmony_ci OpStore %167 %166 356e5c31af7Sopenharmony_ci OpReturn 357e5c31af7Sopenharmony_ci OpFunctionEnd 358e5c31af7Sopenharmony_ci 359e5c31af7Sopenharmony_ci 360e5c31af7Sopenharmony_ci[test] 361e5c31af7Sopenharmony_ci## Uniforms 362e5c31af7Sopenharmony_ci# injectionSwitch 363e5c31af7Sopenharmony_ciuniform ubo 0:1 vec2 0 0.0 1.0 364e5c31af7Sopenharmony_ci# resolution 365e5c31af7Sopenharmony_ciuniform ubo 0:2 vec2 0 256.0 256.0 366e5c31af7Sopenharmony_ci## SSBO 367e5c31af7Sopenharmony_cissbo 0 subdata int 0 0 0 0 0 368e5c31af7Sopenharmony_ci 369e5c31af7Sopenharmony_cicompute 3 1 1 370e5c31af7Sopenharmony_ciprobe ssbo int 0 0 == 0 371e5c31af7Sopenharmony_ciprobe ssbo int 0 4 == 0 372e5c31af7Sopenharmony_ciprobe ssbo int 0 8 == 0 373e5c31af7Sopenharmony_ciprobe ssbo int 0 12 == 1 374