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 bug found by GraphicsFuzz. 19e5c31af7Sopenharmony_ci 20e5c31af7Sopenharmony_ci# Short description: A fragment shader with array and nested loops 21e5c31af7Sopenharmony_ci 22e5c31af7Sopenharmony_ci# The test passes because both shaders render the same image. 23e5c31af7Sopenharmony_ci 24e5c31af7Sopenharmony_ci# Optimized using spirv-opt with the following arguments: 25e5c31af7Sopenharmony_ci# '--private-to-local' 26e5c31af7Sopenharmony_ci# '--copy-propagate-arrays' 27e5c31af7Sopenharmony_ci# '--if-conversion' 28e5c31af7Sopenharmony_ci# '--private-to-local' 29e5c31af7Sopenharmony_ci# '--eliminate-dead-inserts' 30e5c31af7Sopenharmony_ci# '--if-conversion' 31e5c31af7Sopenharmony_ci# '--if-conversion' 32e5c31af7Sopenharmony_ci# '--scalar-replacement=100' 33e5c31af7Sopenharmony_ci# '--private-to-local' 34e5c31af7Sopenharmony_ci# '--reduce-load-size' 35e5c31af7Sopenharmony_ci# '--ccp' 36e5c31af7Sopenharmony_ci# '--scalar-replacement=100' 37e5c31af7Sopenharmony_ci# '--eliminate-dead-branches' 38e5c31af7Sopenharmony_ci# '--eliminate-dead-branches' 39e5c31af7Sopenharmony_ci# '--merge-return' 40e5c31af7Sopenharmony_ci# '--private-to-local' 41e5c31af7Sopenharmony_ci# '--redundancy-elimination' 42e5c31af7Sopenharmony_ci# '--combine-access-chains' 43e5c31af7Sopenharmony_ci# '--eliminate-local-multi-store' 44e5c31af7Sopenharmony_ci# '--ccp' 45e5c31af7Sopenharmony_ci# '--convert-local-access-chains' 46e5c31af7Sopenharmony_ci# '--reduce-load-size' 47e5c31af7Sopenharmony_ci# '--private-to-local' 48e5c31af7Sopenharmony_ci# '--vector-dce' 49e5c31af7Sopenharmony_ci# spirv-opt commit hash: 230f363e6da32791f640b02205e0645cc67c3f1d 50e5c31af7Sopenharmony_ci 51e5c31af7Sopenharmony_ci 52e5c31af7Sopenharmony_ci 53e5c31af7Sopenharmony_ciSHADER vertex reference_vertex_shader PASSTHROUGH 54e5c31af7Sopenharmony_ci 55e5c31af7Sopenharmony_ci# reference_fragment_shader is derived from the following GLSL: 56e5c31af7Sopenharmony_ci# #version 320 es 57e5c31af7Sopenharmony_ci# precision highp float; 58e5c31af7Sopenharmony_ci# 59e5c31af7Sopenharmony_ci# precision highp int; 60e5c31af7Sopenharmony_ci# 61e5c31af7Sopenharmony_ci# layout(location = 0) out vec4 _GLF_color; 62e5c31af7Sopenharmony_ci# 63e5c31af7Sopenharmony_ci# layout(set = 0, binding = 0) uniform buf0 64e5c31af7Sopenharmony_ci# { 65e5c31af7Sopenharmony_ci# vec2 resolution; 66e5c31af7Sopenharmony_ci# }; 67e5c31af7Sopenharmony_ci# float cross2d(vec2 a, vec2 b) 68e5c31af7Sopenharmony_ci# { 69e5c31af7Sopenharmony_ci# return ((a.x) * (b.y) - (b.x) * (a.y)); 70e5c31af7Sopenharmony_ci# } 71e5c31af7Sopenharmony_ci# int pointInTriangle(vec2 p, vec2 a, vec2 b, vec2 c) 72e5c31af7Sopenharmony_ci# { 73e5c31af7Sopenharmony_ci# float pab = cross2d(vec2(p.x - a.x, p.y - a.y), vec2(b.x - a.x, b.y - a.y)); 74e5c31af7Sopenharmony_ci# float pbc = cross2d(vec2(p.x - b.x, p.y - b.y), vec2(c.x - b.x, c.y - b.y)); 75e5c31af7Sopenharmony_ci# if (!((pab < 0.0 && pbc < 0.0) || (pab >= 0.0 && pbc >= 0.0))) 76e5c31af7Sopenharmony_ci# { 77e5c31af7Sopenharmony_ci# return 0; 78e5c31af7Sopenharmony_ci# } 79e5c31af7Sopenharmony_ci# float pca = cross2d(vec2(p.x - c.x, p.y - c.y), vec2(a.x - c.x, a.y - c.y)); 80e5c31af7Sopenharmony_ci# if (!((pab < 0.0 && pca < 0.0) || (pab >= 0.0 && pca >= 0.0))) 81e5c31af7Sopenharmony_ci# { 82e5c31af7Sopenharmony_ci# return 0; 83e5c31af7Sopenharmony_ci# } 84e5c31af7Sopenharmony_ci# return 1; 85e5c31af7Sopenharmony_ci# } 86e5c31af7Sopenharmony_ci# void main() 87e5c31af7Sopenharmony_ci# { 88e5c31af7Sopenharmony_ci# vec2 pos = gl_FragCoord.xy / resolution; 89e5c31af7Sopenharmony_ci# if (pointInTriangle(pos, vec2(0.7, 0.3), vec2(0.5, 0.9), vec2(0.1, 0.4)) == 1) 90e5c31af7Sopenharmony_ci# { 91e5c31af7Sopenharmony_ci# _GLF_color = vec4(1.0, 0.0, 0.0, 1.0); 92e5c31af7Sopenharmony_ci# } 93e5c31af7Sopenharmony_ci# else 94e5c31af7Sopenharmony_ci# { 95e5c31af7Sopenharmony_ci# _GLF_color = vec4(0.0, 0.0, 0.0, 1.0); 96e5c31af7Sopenharmony_ci# } 97e5c31af7Sopenharmony_ci# } 98e5c31af7Sopenharmony_ciSHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 99e5c31af7Sopenharmony_ci; SPIR-V 100e5c31af7Sopenharmony_ci; Version: 1.0 101e5c31af7Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 10 102e5c31af7Sopenharmony_ci; Bound: 207 103e5c31af7Sopenharmony_ci; Schema: 0 104e5c31af7Sopenharmony_ci OpCapability Shader 105e5c31af7Sopenharmony_ci %1 = OpExtInstImport "GLSL.std.450" 106e5c31af7Sopenharmony_ci OpMemoryModel Logical GLSL450 107e5c31af7Sopenharmony_ci OpEntryPoint Fragment %4 "main" %162 %191 108e5c31af7Sopenharmony_ci OpExecutionMode %4 OriginUpperLeft 109e5c31af7Sopenharmony_ci OpSource ESSL 320 110e5c31af7Sopenharmony_ci OpName %4 "main" 111e5c31af7Sopenharmony_ci OpName %12 "cross2d(vf2;vf2;" 112e5c31af7Sopenharmony_ci OpName %10 "a" 113e5c31af7Sopenharmony_ci OpName %11 "b" 114e5c31af7Sopenharmony_ci OpName %20 "pointInTriangle(vf2;vf2;vf2;vf2;" 115e5c31af7Sopenharmony_ci OpName %16 "p" 116e5c31af7Sopenharmony_ci OpName %17 "a" 117e5c31af7Sopenharmony_ci OpName %18 "b" 118e5c31af7Sopenharmony_ci OpName %19 "c" 119e5c31af7Sopenharmony_ci OpName %39 "pab" 120e5c31af7Sopenharmony_ci OpName %62 "param" 121e5c31af7Sopenharmony_ci OpName %63 "param" 122e5c31af7Sopenharmony_ci OpName %65 "pbc" 123e5c31af7Sopenharmony_ci OpName %88 "param" 124e5c31af7Sopenharmony_ci OpName %89 "param" 125e5c31af7Sopenharmony_ci OpName %112 "pca" 126e5c31af7Sopenharmony_ci OpName %135 "param" 127e5c31af7Sopenharmony_ci OpName %136 "param" 128e5c31af7Sopenharmony_ci OpName %159 "pos" 129e5c31af7Sopenharmony_ci OpName %162 "gl_FragCoord" 130e5c31af7Sopenharmony_ci OpName %165 "buf0" 131e5c31af7Sopenharmony_ci OpMemberName %165 0 "resolution" 132e5c31af7Sopenharmony_ci OpName %167 "" 133e5c31af7Sopenharmony_ci OpName %181 "param" 134e5c31af7Sopenharmony_ci OpName %183 "param" 135e5c31af7Sopenharmony_ci OpName %184 "param" 136e5c31af7Sopenharmony_ci OpName %185 "param" 137e5c31af7Sopenharmony_ci OpName %191 "_GLF_color" 138e5c31af7Sopenharmony_ci OpDecorate %162 BuiltIn FragCoord 139e5c31af7Sopenharmony_ci OpMemberDecorate %165 0 Offset 0 140e5c31af7Sopenharmony_ci OpDecorate %165 Block 141e5c31af7Sopenharmony_ci OpDecorate %167 DescriptorSet 0 142e5c31af7Sopenharmony_ci OpDecorate %167 Binding 0 143e5c31af7Sopenharmony_ci OpDecorate %191 Location 0 144e5c31af7Sopenharmony_ci %2 = OpTypeVoid 145e5c31af7Sopenharmony_ci %3 = OpTypeFunction %2 146e5c31af7Sopenharmony_ci %6 = OpTypeFloat 32 147e5c31af7Sopenharmony_ci %7 = OpTypeVector %6 2 148e5c31af7Sopenharmony_ci %8 = OpTypePointer Function %7 149e5c31af7Sopenharmony_ci %9 = OpTypeFunction %6 %8 %8 150e5c31af7Sopenharmony_ci %14 = OpTypeInt 32 1 151e5c31af7Sopenharmony_ci %15 = OpTypeFunction %14 %8 %8 %8 %8 152e5c31af7Sopenharmony_ci %22 = OpTypeInt 32 0 153e5c31af7Sopenharmony_ci %23 = OpConstant %22 0 154e5c31af7Sopenharmony_ci %24 = OpTypePointer Function %6 155e5c31af7Sopenharmony_ci %27 = OpConstant %22 1 156e5c31af7Sopenharmony_ci %91 = OpTypeBool 157e5c31af7Sopenharmony_ci %93 = OpConstant %6 0 158e5c31af7Sopenharmony_ci %110 = OpConstant %14 0 159e5c31af7Sopenharmony_ci %156 = OpConstant %14 1 160e5c31af7Sopenharmony_ci %160 = OpTypeVector %6 4 161e5c31af7Sopenharmony_ci %161 = OpTypePointer Input %160 162e5c31af7Sopenharmony_ci %162 = OpVariable %161 Input 163e5c31af7Sopenharmony_ci %165 = OpTypeStruct %7 164e5c31af7Sopenharmony_ci %166 = OpTypePointer Uniform %165 165e5c31af7Sopenharmony_ci %167 = OpVariable %166 Uniform 166e5c31af7Sopenharmony_ci %168 = OpTypePointer Uniform %7 167e5c31af7Sopenharmony_ci %172 = OpConstant %6 0.699999988 168e5c31af7Sopenharmony_ci %173 = OpConstant %6 0.300000012 169e5c31af7Sopenharmony_ci %174 = OpConstantComposite %7 %172 %173 170e5c31af7Sopenharmony_ci %175 = OpConstant %6 0.5 171e5c31af7Sopenharmony_ci %176 = OpConstant %6 0.899999976 172e5c31af7Sopenharmony_ci %177 = OpConstantComposite %7 %175 %176 173e5c31af7Sopenharmony_ci %178 = OpConstant %6 0.100000001 174e5c31af7Sopenharmony_ci %179 = OpConstant %6 0.400000006 175e5c31af7Sopenharmony_ci %180 = OpConstantComposite %7 %178 %179 176e5c31af7Sopenharmony_ci %190 = OpTypePointer Output %160 177e5c31af7Sopenharmony_ci %191 = OpVariable %190 Output 178e5c31af7Sopenharmony_ci %192 = OpConstant %6 1 179e5c31af7Sopenharmony_ci %193 = OpConstantComposite %160 %192 %93 %93 %192 180e5c31af7Sopenharmony_ci %195 = OpConstantComposite %160 %93 %93 %93 %192 181e5c31af7Sopenharmony_ci %197 = OpTypePointer Function %14 182e5c31af7Sopenharmony_ci %201 = OpConstantFalse %91 183e5c31af7Sopenharmony_ci %202 = OpTypePointer Function %91 184e5c31af7Sopenharmony_ci %204 = OpConstantTrue %91 185e5c31af7Sopenharmony_ci %4 = OpFunction %2 None %3 186e5c31af7Sopenharmony_ci %5 = OpLabel 187e5c31af7Sopenharmony_ci %159 = OpVariable %8 Function 188e5c31af7Sopenharmony_ci %181 = OpVariable %8 Function 189e5c31af7Sopenharmony_ci %183 = OpVariable %8 Function 190e5c31af7Sopenharmony_ci %184 = OpVariable %8 Function 191e5c31af7Sopenharmony_ci %185 = OpVariable %8 Function 192e5c31af7Sopenharmony_ci %163 = OpLoad %160 %162 193e5c31af7Sopenharmony_ci %164 = OpVectorShuffle %7 %163 %163 0 1 194e5c31af7Sopenharmony_ci %169 = OpAccessChain %168 %167 %110 195e5c31af7Sopenharmony_ci %170 = OpLoad %7 %169 196e5c31af7Sopenharmony_ci %171 = OpFDiv %7 %164 %170 197e5c31af7Sopenharmony_ci OpStore %159 %171 198e5c31af7Sopenharmony_ci OpStore %181 %171 199e5c31af7Sopenharmony_ci OpStore %183 %174 200e5c31af7Sopenharmony_ci OpStore %184 %177 201e5c31af7Sopenharmony_ci OpStore %185 %180 202e5c31af7Sopenharmony_ci %186 = OpFunctionCall %14 %20 %181 %183 %184 %185 203e5c31af7Sopenharmony_ci %187 = OpIEqual %91 %186 %156 204e5c31af7Sopenharmony_ci OpSelectionMerge %189 None 205e5c31af7Sopenharmony_ci OpBranchConditional %187 %188 %194 206e5c31af7Sopenharmony_ci %188 = OpLabel 207e5c31af7Sopenharmony_ci OpStore %191 %193 208e5c31af7Sopenharmony_ci OpBranch %189 209e5c31af7Sopenharmony_ci %194 = OpLabel 210e5c31af7Sopenharmony_ci OpStore %191 %195 211e5c31af7Sopenharmony_ci OpBranch %189 212e5c31af7Sopenharmony_ci %189 = OpLabel 213e5c31af7Sopenharmony_ci OpReturn 214e5c31af7Sopenharmony_ci OpFunctionEnd 215e5c31af7Sopenharmony_ci %12 = OpFunction %6 None %9 216e5c31af7Sopenharmony_ci %10 = OpFunctionParameter %8 217e5c31af7Sopenharmony_ci %11 = OpFunctionParameter %8 218e5c31af7Sopenharmony_ci %13 = OpLabel 219e5c31af7Sopenharmony_ci %25 = OpAccessChain %24 %10 %23 220e5c31af7Sopenharmony_ci %26 = OpLoad %6 %25 221e5c31af7Sopenharmony_ci %28 = OpAccessChain %24 %11 %27 222e5c31af7Sopenharmony_ci %29 = OpLoad %6 %28 223e5c31af7Sopenharmony_ci %30 = OpFMul %6 %26 %29 224e5c31af7Sopenharmony_ci %31 = OpAccessChain %24 %11 %23 225e5c31af7Sopenharmony_ci %32 = OpLoad %6 %31 226e5c31af7Sopenharmony_ci %33 = OpAccessChain %24 %10 %27 227e5c31af7Sopenharmony_ci %34 = OpLoad %6 %33 228e5c31af7Sopenharmony_ci %35 = OpFMul %6 %32 %34 229e5c31af7Sopenharmony_ci %36 = OpFSub %6 %30 %35 230e5c31af7Sopenharmony_ci OpReturnValue %36 231e5c31af7Sopenharmony_ci OpFunctionEnd 232e5c31af7Sopenharmony_ci %20 = OpFunction %14 None %15 233e5c31af7Sopenharmony_ci %16 = OpFunctionParameter %8 234e5c31af7Sopenharmony_ci %17 = OpFunctionParameter %8 235e5c31af7Sopenharmony_ci %18 = OpFunctionParameter %8 236e5c31af7Sopenharmony_ci %19 = OpFunctionParameter %8 237e5c31af7Sopenharmony_ci %21 = OpLabel 238e5c31af7Sopenharmony_ci %203 = OpVariable %202 Function %201 239e5c31af7Sopenharmony_ci %198 = OpVariable %197 Function 240e5c31af7Sopenharmony_ci %39 = OpVariable %24 Function 241e5c31af7Sopenharmony_ci %62 = OpVariable %8 Function 242e5c31af7Sopenharmony_ci %63 = OpVariable %8 Function 243e5c31af7Sopenharmony_ci %65 = OpVariable %24 Function 244e5c31af7Sopenharmony_ci %88 = OpVariable %8 Function 245e5c31af7Sopenharmony_ci %89 = OpVariable %8 Function 246e5c31af7Sopenharmony_ci %112 = OpVariable %24 Function 247e5c31af7Sopenharmony_ci %135 = OpVariable %8 Function 248e5c31af7Sopenharmony_ci %136 = OpVariable %8 Function 249e5c31af7Sopenharmony_ci OpSelectionMerge %196 None 250e5c31af7Sopenharmony_ci OpSwitch %23 %200 251e5c31af7Sopenharmony_ci %200 = OpLabel 252e5c31af7Sopenharmony_ci %40 = OpAccessChain %24 %16 %23 253e5c31af7Sopenharmony_ci %41 = OpLoad %6 %40 254e5c31af7Sopenharmony_ci %42 = OpAccessChain %24 %17 %23 255e5c31af7Sopenharmony_ci %43 = OpLoad %6 %42 256e5c31af7Sopenharmony_ci %44 = OpFSub %6 %41 %43 257e5c31af7Sopenharmony_ci %45 = OpAccessChain %24 %16 %27 258e5c31af7Sopenharmony_ci %46 = OpLoad %6 %45 259e5c31af7Sopenharmony_ci %47 = OpAccessChain %24 %17 %27 260e5c31af7Sopenharmony_ci %48 = OpLoad %6 %47 261e5c31af7Sopenharmony_ci %49 = OpFSub %6 %46 %48 262e5c31af7Sopenharmony_ci %50 = OpCompositeConstruct %7 %44 %49 263e5c31af7Sopenharmony_ci %51 = OpAccessChain %24 %18 %23 264e5c31af7Sopenharmony_ci %52 = OpLoad %6 %51 265e5c31af7Sopenharmony_ci %54 = OpLoad %6 %42 266e5c31af7Sopenharmony_ci %55 = OpFSub %6 %52 %54 267e5c31af7Sopenharmony_ci %56 = OpAccessChain %24 %18 %27 268e5c31af7Sopenharmony_ci %57 = OpLoad %6 %56 269e5c31af7Sopenharmony_ci %59 = OpLoad %6 %47 270e5c31af7Sopenharmony_ci %60 = OpFSub %6 %57 %59 271e5c31af7Sopenharmony_ci %61 = OpCompositeConstruct %7 %55 %60 272e5c31af7Sopenharmony_ci OpStore %62 %50 273e5c31af7Sopenharmony_ci OpStore %63 %61 274e5c31af7Sopenharmony_ci %64 = OpFunctionCall %6 %12 %62 %63 275e5c31af7Sopenharmony_ci OpStore %39 %64 276e5c31af7Sopenharmony_ci %67 = OpLoad %6 %40 277e5c31af7Sopenharmony_ci %69 = OpLoad %6 %51 278e5c31af7Sopenharmony_ci %70 = OpFSub %6 %67 %69 279e5c31af7Sopenharmony_ci %72 = OpLoad %6 %45 280e5c31af7Sopenharmony_ci %74 = OpLoad %6 %56 281e5c31af7Sopenharmony_ci %75 = OpFSub %6 %72 %74 282e5c31af7Sopenharmony_ci %76 = OpCompositeConstruct %7 %70 %75 283e5c31af7Sopenharmony_ci %77 = OpAccessChain %24 %19 %23 284e5c31af7Sopenharmony_ci %78 = OpLoad %6 %77 285e5c31af7Sopenharmony_ci %80 = OpLoad %6 %51 286e5c31af7Sopenharmony_ci %81 = OpFSub %6 %78 %80 287e5c31af7Sopenharmony_ci %82 = OpAccessChain %24 %19 %27 288e5c31af7Sopenharmony_ci %83 = OpLoad %6 %82 289e5c31af7Sopenharmony_ci %85 = OpLoad %6 %56 290e5c31af7Sopenharmony_ci %86 = OpFSub %6 %83 %85 291e5c31af7Sopenharmony_ci %87 = OpCompositeConstruct %7 %81 %86 292e5c31af7Sopenharmony_ci OpStore %88 %76 293e5c31af7Sopenharmony_ci OpStore %89 %87 294e5c31af7Sopenharmony_ci %90 = OpFunctionCall %6 %12 %88 %89 295e5c31af7Sopenharmony_ci OpStore %65 %90 296e5c31af7Sopenharmony_ci %94 = OpFOrdLessThan %91 %64 %93 297e5c31af7Sopenharmony_ci %96 = OpFOrdLessThan %91 %90 %93 298e5c31af7Sopenharmony_ci %97 = OpLogicalAnd %91 %94 %96 299e5c31af7Sopenharmony_ci %98 = OpLogicalNot %91 %97 300e5c31af7Sopenharmony_ci OpSelectionMerge %100 None 301e5c31af7Sopenharmony_ci OpBranchConditional %98 %99 %100 302e5c31af7Sopenharmony_ci %99 = OpLabel 303e5c31af7Sopenharmony_ci %102 = OpFOrdGreaterThanEqual %91 %64 %93 304e5c31af7Sopenharmony_ci %104 = OpFOrdGreaterThanEqual %91 %90 %93 305e5c31af7Sopenharmony_ci %105 = OpLogicalAnd %91 %102 %104 306e5c31af7Sopenharmony_ci OpBranch %100 307e5c31af7Sopenharmony_ci %100 = OpLabel 308e5c31af7Sopenharmony_ci %106 = OpPhi %91 %97 %200 %105 %99 309e5c31af7Sopenharmony_ci %107 = OpLogicalNot %91 %106 310e5c31af7Sopenharmony_ci OpSelectionMerge %109 None 311e5c31af7Sopenharmony_ci OpBranchConditional %107 %108 %109 312e5c31af7Sopenharmony_ci %108 = OpLabel 313e5c31af7Sopenharmony_ci OpStore %203 %204 314e5c31af7Sopenharmony_ci OpStore %198 %110 315e5c31af7Sopenharmony_ci OpBranch %196 316e5c31af7Sopenharmony_ci %109 = OpLabel 317e5c31af7Sopenharmony_ci %114 = OpLoad %6 %40 318e5c31af7Sopenharmony_ci %116 = OpLoad %6 %77 319e5c31af7Sopenharmony_ci %117 = OpFSub %6 %114 %116 320e5c31af7Sopenharmony_ci %119 = OpLoad %6 %45 321e5c31af7Sopenharmony_ci %121 = OpLoad %6 %82 322e5c31af7Sopenharmony_ci %122 = OpFSub %6 %119 %121 323e5c31af7Sopenharmony_ci %123 = OpCompositeConstruct %7 %117 %122 324e5c31af7Sopenharmony_ci %125 = OpLoad %6 %42 325e5c31af7Sopenharmony_ci %127 = OpLoad %6 %77 326e5c31af7Sopenharmony_ci %128 = OpFSub %6 %125 %127 327e5c31af7Sopenharmony_ci %130 = OpLoad %6 %47 328e5c31af7Sopenharmony_ci %132 = OpLoad %6 %82 329e5c31af7Sopenharmony_ci %133 = OpFSub %6 %130 %132 330e5c31af7Sopenharmony_ci %134 = OpCompositeConstruct %7 %128 %133 331e5c31af7Sopenharmony_ci OpStore %135 %123 332e5c31af7Sopenharmony_ci OpStore %136 %134 333e5c31af7Sopenharmony_ci %137 = OpFunctionCall %6 %12 %135 %136 334e5c31af7Sopenharmony_ci OpStore %112 %137 335e5c31af7Sopenharmony_ci %139 = OpFOrdLessThan %91 %64 %93 336e5c31af7Sopenharmony_ci %141 = OpFOrdLessThan %91 %137 %93 337e5c31af7Sopenharmony_ci %142 = OpLogicalAnd %91 %139 %141 338e5c31af7Sopenharmony_ci %143 = OpLogicalNot %91 %142 339e5c31af7Sopenharmony_ci OpSelectionMerge %145 None 340e5c31af7Sopenharmony_ci OpBranchConditional %143 %144 %145 341e5c31af7Sopenharmony_ci %144 = OpLabel 342e5c31af7Sopenharmony_ci %147 = OpFOrdGreaterThanEqual %91 %64 %93 343e5c31af7Sopenharmony_ci %149 = OpFOrdGreaterThanEqual %91 %137 %93 344e5c31af7Sopenharmony_ci %150 = OpLogicalAnd %91 %147 %149 345e5c31af7Sopenharmony_ci OpBranch %145 346e5c31af7Sopenharmony_ci %145 = OpLabel 347e5c31af7Sopenharmony_ci %151 = OpPhi %91 %142 %109 %150 %144 348e5c31af7Sopenharmony_ci %152 = OpLogicalNot %91 %151 349e5c31af7Sopenharmony_ci OpSelectionMerge %154 None 350e5c31af7Sopenharmony_ci OpBranchConditional %152 %153 %154 351e5c31af7Sopenharmony_ci %153 = OpLabel 352e5c31af7Sopenharmony_ci OpStore %203 %204 353e5c31af7Sopenharmony_ci OpStore %198 %110 354e5c31af7Sopenharmony_ci OpBranch %196 355e5c31af7Sopenharmony_ci %154 = OpLabel 356e5c31af7Sopenharmony_ci OpStore %203 %204 357e5c31af7Sopenharmony_ci OpStore %198 %156 358e5c31af7Sopenharmony_ci OpBranch %196 359e5c31af7Sopenharmony_ci %196 = OpLabel 360e5c31af7Sopenharmony_ci %206 = OpPhi %14 %110 %108 %110 %153 %156 %154 361e5c31af7Sopenharmony_ci OpReturnValue %206 362e5c31af7Sopenharmony_ci OpFunctionEnd 363e5c31af7Sopenharmony_ciEND 364e5c31af7Sopenharmony_ci 365e5c31af7Sopenharmony_ci# uniforms for reference 366e5c31af7Sopenharmony_ci 367e5c31af7Sopenharmony_ci# resolution 368e5c31af7Sopenharmony_ciBUFFER reference_resolution DATA_TYPE vec2<float> DATA 369e5c31af7Sopenharmony_ci 256.0 256.0 370e5c31af7Sopenharmony_ciEND 371e5c31af7Sopenharmony_ci 372e5c31af7Sopenharmony_ciBUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM 373e5c31af7Sopenharmony_ci 374e5c31af7Sopenharmony_ciPIPELINE graphics reference_pipeline 375e5c31af7Sopenharmony_ci ATTACH reference_vertex_shader 376e5c31af7Sopenharmony_ci ATTACH reference_fragment_shader 377e5c31af7Sopenharmony_ci FRAMEBUFFER_SIZE 256 256 378e5c31af7Sopenharmony_ci BIND BUFFER reference_framebuffer AS color LOCATION 0 379e5c31af7Sopenharmony_ci BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0 380e5c31af7Sopenharmony_ciEND 381e5c31af7Sopenharmony_ciCLEAR_COLOR reference_pipeline 0 0 0 255 382e5c31af7Sopenharmony_ci 383e5c31af7Sopenharmony_ciCLEAR reference_pipeline 384e5c31af7Sopenharmony_ciRUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256 385e5c31af7Sopenharmony_ci 386e5c31af7Sopenharmony_ci 387e5c31af7Sopenharmony_ciSHADER vertex variant_vertex_shader PASSTHROUGH 388e5c31af7Sopenharmony_ci 389e5c31af7Sopenharmony_ci# variant_fragment_shader is derived from the following GLSL: 390e5c31af7Sopenharmony_ci# #version 320 es 391e5c31af7Sopenharmony_ci# precision highp float; 392e5c31af7Sopenharmony_ci# 393e5c31af7Sopenharmony_ci# precision highp int; 394e5c31af7Sopenharmony_ci# 395e5c31af7Sopenharmony_ci# layout(location = 0) out vec4 _GLF_color; 396e5c31af7Sopenharmony_ci# 397e5c31af7Sopenharmony_ci# layout(set = 0, binding = 0) uniform buf0 398e5c31af7Sopenharmony_ci# { 399e5c31af7Sopenharmony_ci# vec2 resolution; 400e5c31af7Sopenharmony_ci# }; 401e5c31af7Sopenharmony_ci# float cross2d(vec2 a, vec2 b) 402e5c31af7Sopenharmony_ci# { 403e5c31af7Sopenharmony_ci# return ((a.x) * (b.y) - (b.x) * (a.y)); 404e5c31af7Sopenharmony_ci# } 405e5c31af7Sopenharmony_ci# int pointInTriangle(vec2 p, vec2 a, vec2 b, vec2 c) 406e5c31af7Sopenharmony_ci# { 407e5c31af7Sopenharmony_ci# const int array_size = 256; 408e5c31af7Sopenharmony_ci# int array_a[array_size]; 409e5c31af7Sopenharmony_ci# float pab = cross2d(vec2(p.x - a.x, p.y - a.y), vec2(b.x - a.x, b.y - a.y)); 410e5c31af7Sopenharmony_ci# float pbc = cross2d(vec2(p.x - b.x, p.y - b.y), vec2(c.x - b.x, c.y - b.y)); 411e5c31af7Sopenharmony_ci# if (!((pab < 0.0 && pbc < 0.0) || (pab >= 0.0 && pbc >= 0.0))) 412e5c31af7Sopenharmony_ci# { 413e5c31af7Sopenharmony_ci# // Injected live code block has no impact on rest of the code in the shader. 414e5c31af7Sopenharmony_ci# // Initialize array to known values. 415e5c31af7Sopenharmony_ci# for (int i = 0; i < array_size; i++) 416e5c31af7Sopenharmony_ci# { 417e5c31af7Sopenharmony_ci# array_a[i] = 0; 418e5c31af7Sopenharmony_ci# } 419e5c31af7Sopenharmony_ci# // Total loop iteration count: 6x4x4x4 = 384. 420e5c31af7Sopenharmony_ci# for (int int_a = 0; int_a < 6; ) 421e5c31af7Sopenharmony_ci# { 422e5c31af7Sopenharmony_ci# int_a++; 423e5c31af7Sopenharmony_ci# int int_c = 1; 424e5c31af7Sopenharmony_ci# int int_h = 1; 425e5c31af7Sopenharmony_ci# int int_d = 0; 426e5c31af7Sopenharmony_ci# do 427e5c31af7Sopenharmony_ci# { 428e5c31af7Sopenharmony_ci# int_d++; 429e5c31af7Sopenharmony_ci# int int_e = 0; 430e5c31af7Sopenharmony_ci# for (int int_f = 0; int_f < 4; int_c++) 431e5c31af7Sopenharmony_ci# { 432e5c31af7Sopenharmony_ci# int_f++; 433e5c31af7Sopenharmony_ci# for (int int_g = 0; int_g < 4; int_e++) 434e5c31af7Sopenharmony_ci# { 435e5c31af7Sopenharmony_ci# int_g++; 436e5c31af7Sopenharmony_ci# if (array_a[clamp(int_e * 2 + 32, 0, array_size - 1)] == 0) 437e5c31af7Sopenharmony_ci# { 438e5c31af7Sopenharmony_ci# int_h = int_c; 439e5c31af7Sopenharmony_ci# } 440e5c31af7Sopenharmony_ci# } 441e5c31af7Sopenharmony_ci# } 442e5c31af7Sopenharmony_ci# array_a[clamp(1 + int_h * 16, 0, array_size - 1)] = 1; 443e5c31af7Sopenharmony_ci# } while (int_d < 4); 444e5c31af7Sopenharmony_ci# } 445e5c31af7Sopenharmony_ci# return 0; 446e5c31af7Sopenharmony_ci# } 447e5c31af7Sopenharmony_ci# float pca = cross2d(vec2(p.x - c.x, p.y - c.y), vec2(a.x - c.x, a.y - c.y)); 448e5c31af7Sopenharmony_ci# if (!((pab < 0.0 && pca < 0.0) || (pab >= 0.0 && pca >= 0.0))) 449e5c31af7Sopenharmony_ci# { 450e5c31af7Sopenharmony_ci# return 0; 451e5c31af7Sopenharmony_ci# } 452e5c31af7Sopenharmony_ci# return 1; 453e5c31af7Sopenharmony_ci# } 454e5c31af7Sopenharmony_ci# void main() 455e5c31af7Sopenharmony_ci# { 456e5c31af7Sopenharmony_ci# vec2 pos = gl_FragCoord.xy / resolution; 457e5c31af7Sopenharmony_ci# if (pointInTriangle(pos, vec2(0.7, 0.3), vec2(0.5, 0.9), vec2(0.1, 0.4)) == 1) 458e5c31af7Sopenharmony_ci# { 459e5c31af7Sopenharmony_ci# _GLF_color = vec4(1.0, 0.0, 0.0, 1.0); 460e5c31af7Sopenharmony_ci# } 461e5c31af7Sopenharmony_ci# else 462e5c31af7Sopenharmony_ci# { 463e5c31af7Sopenharmony_ci# _GLF_color = vec4(0.0, 0.0, 0.0, 1.0); 464e5c31af7Sopenharmony_ci# } 465e5c31af7Sopenharmony_ci# } 466e5c31af7Sopenharmony_ciSHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 467e5c31af7Sopenharmony_ci; SPIR-V 468e5c31af7Sopenharmony_ci; Version: 1.0 469e5c31af7Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 10 470e5c31af7Sopenharmony_ci; Bound: 318 471e5c31af7Sopenharmony_ci; Schema: 0 472e5c31af7Sopenharmony_ci OpCapability Shader 473e5c31af7Sopenharmony_ci %1 = OpExtInstImport "GLSL.std.450" 474e5c31af7Sopenharmony_ci OpMemoryModel Logical GLSL450 475e5c31af7Sopenharmony_ci OpEntryPoint Fragment %4 "main" %247 %276 476e5c31af7Sopenharmony_ci OpExecutionMode %4 OriginUpperLeft 477e5c31af7Sopenharmony_ci OpSource ESSL 320 478e5c31af7Sopenharmony_ci OpName %4 "main" 479e5c31af7Sopenharmony_ci OpName %12 "cross2d(vf2;vf2;" 480e5c31af7Sopenharmony_ci OpName %10 "a" 481e5c31af7Sopenharmony_ci OpName %11 "b" 482e5c31af7Sopenharmony_ci OpName %20 "pointInTriangle(vf2;vf2;vf2;vf2;" 483e5c31af7Sopenharmony_ci OpName %16 "p" 484e5c31af7Sopenharmony_ci OpName %17 "a" 485e5c31af7Sopenharmony_ci OpName %18 "b" 486e5c31af7Sopenharmony_ci OpName %19 "c" 487e5c31af7Sopenharmony_ci OpName %39 "pab" 488e5c31af7Sopenharmony_ci OpName %62 "param" 489e5c31af7Sopenharmony_ci OpName %63 "param" 490e5c31af7Sopenharmony_ci OpName %65 "pbc" 491e5c31af7Sopenharmony_ci OpName %88 "param" 492e5c31af7Sopenharmony_ci OpName %89 "param" 493e5c31af7Sopenharmony_ci OpName %111 "i" 494e5c31af7Sopenharmony_ci OpName %124 "array_a" 495e5c31af7Sopenharmony_ci OpName %130 "int_a" 496e5c31af7Sopenharmony_ci OpName %141 "int_c" 497e5c31af7Sopenharmony_ci OpName %142 "int_h" 498e5c31af7Sopenharmony_ci OpName %143 "int_d" 499e5c31af7Sopenharmony_ci OpName %150 "int_e" 500e5c31af7Sopenharmony_ci OpName %151 "int_f" 501e5c31af7Sopenharmony_ci OpName %162 "int_g" 502e5c31af7Sopenharmony_ci OpName %198 "pca" 503e5c31af7Sopenharmony_ci OpName %221 "param" 504e5c31af7Sopenharmony_ci OpName %222 "param" 505e5c31af7Sopenharmony_ci OpName %244 "pos" 506e5c31af7Sopenharmony_ci OpName %247 "gl_FragCoord" 507e5c31af7Sopenharmony_ci OpName %250 "buf0" 508e5c31af7Sopenharmony_ci OpMemberName %250 0 "resolution" 509e5c31af7Sopenharmony_ci OpName %252 "" 510e5c31af7Sopenharmony_ci OpName %266 "param" 511e5c31af7Sopenharmony_ci OpName %268 "param" 512e5c31af7Sopenharmony_ci OpName %269 "param" 513e5c31af7Sopenharmony_ci OpName %270 "param" 514e5c31af7Sopenharmony_ci OpName %276 "_GLF_color" 515e5c31af7Sopenharmony_ci OpDecorate %247 BuiltIn FragCoord 516e5c31af7Sopenharmony_ci OpMemberDecorate %250 0 Offset 0 517e5c31af7Sopenharmony_ci OpDecorate %250 Block 518e5c31af7Sopenharmony_ci OpDecorate %252 DescriptorSet 0 519e5c31af7Sopenharmony_ci OpDecorate %252 Binding 0 520e5c31af7Sopenharmony_ci OpDecorate %276 Location 0 521e5c31af7Sopenharmony_ci %2 = OpTypeVoid 522e5c31af7Sopenharmony_ci %3 = OpTypeFunction %2 523e5c31af7Sopenharmony_ci %6 = OpTypeFloat 32 524e5c31af7Sopenharmony_ci %7 = OpTypeVector %6 2 525e5c31af7Sopenharmony_ci %8 = OpTypePointer Function %7 526e5c31af7Sopenharmony_ci %9 = OpTypeFunction %6 %8 %8 527e5c31af7Sopenharmony_ci %14 = OpTypeInt 32 1 528e5c31af7Sopenharmony_ci %15 = OpTypeFunction %14 %8 %8 %8 %8 529e5c31af7Sopenharmony_ci %22 = OpTypeInt 32 0 530e5c31af7Sopenharmony_ci %23 = OpConstant %22 0 531e5c31af7Sopenharmony_ci %24 = OpTypePointer Function %6 532e5c31af7Sopenharmony_ci %27 = OpConstant %22 1 533e5c31af7Sopenharmony_ci %91 = OpTypeBool 534e5c31af7Sopenharmony_ci %93 = OpConstant %6 0 535e5c31af7Sopenharmony_ci %110 = OpTypePointer Function %14 536e5c31af7Sopenharmony_ci %112 = OpConstant %14 0 537e5c31af7Sopenharmony_ci %119 = OpConstant %14 256 538e5c31af7Sopenharmony_ci %121 = OpConstant %22 256 539e5c31af7Sopenharmony_ci %122 = OpTypeArray %14 %121 540e5c31af7Sopenharmony_ci %123 = OpTypePointer Function %122 541e5c31af7Sopenharmony_ci %128 = OpConstant %14 1 542e5c31af7Sopenharmony_ci %137 = OpConstant %14 6 543e5c31af7Sopenharmony_ci %158 = OpConstant %14 4 544e5c31af7Sopenharmony_ci %173 = OpConstant %14 2 545e5c31af7Sopenharmony_ci %175 = OpConstant %14 32 546e5c31af7Sopenharmony_ci %177 = OpConstant %14 255 547e5c31af7Sopenharmony_ci %190 = OpConstant %14 16 548e5c31af7Sopenharmony_ci %245 = OpTypeVector %6 4 549e5c31af7Sopenharmony_ci %246 = OpTypePointer Input %245 550e5c31af7Sopenharmony_ci %247 = OpVariable %246 Input 551e5c31af7Sopenharmony_ci %250 = OpTypeStruct %7 552e5c31af7Sopenharmony_ci %251 = OpTypePointer Uniform %250 553e5c31af7Sopenharmony_ci %252 = OpVariable %251 Uniform 554e5c31af7Sopenharmony_ci %253 = OpTypePointer Uniform %7 555e5c31af7Sopenharmony_ci %257 = OpConstant %6 0.699999988 556e5c31af7Sopenharmony_ci %258 = OpConstant %6 0.300000012 557e5c31af7Sopenharmony_ci %259 = OpConstantComposite %7 %257 %258 558e5c31af7Sopenharmony_ci %260 = OpConstant %6 0.5 559e5c31af7Sopenharmony_ci %261 = OpConstant %6 0.899999976 560e5c31af7Sopenharmony_ci %262 = OpConstantComposite %7 %260 %261 561e5c31af7Sopenharmony_ci %263 = OpConstant %6 0.100000001 562e5c31af7Sopenharmony_ci %264 = OpConstant %6 0.400000006 563e5c31af7Sopenharmony_ci %265 = OpConstantComposite %7 %263 %264 564e5c31af7Sopenharmony_ci %275 = OpTypePointer Output %245 565e5c31af7Sopenharmony_ci %276 = OpVariable %275 Output 566e5c31af7Sopenharmony_ci %277 = OpConstant %6 1 567e5c31af7Sopenharmony_ci %278 = OpConstantComposite %245 %277 %93 %93 %277 568e5c31af7Sopenharmony_ci %280 = OpConstantComposite %245 %93 %93 %93 %277 569e5c31af7Sopenharmony_ci %285 = OpConstantFalse %91 570e5c31af7Sopenharmony_ci %286 = OpTypePointer Function %91 571e5c31af7Sopenharmony_ci %288 = OpConstantTrue %91 572e5c31af7Sopenharmony_ci %317 = OpConstant %14 17 573e5c31af7Sopenharmony_ci %4 = OpFunction %2 None %3 574e5c31af7Sopenharmony_ci %5 = OpLabel 575e5c31af7Sopenharmony_ci %244 = OpVariable %8 Function 576e5c31af7Sopenharmony_ci %266 = OpVariable %8 Function 577e5c31af7Sopenharmony_ci %268 = OpVariable %8 Function 578e5c31af7Sopenharmony_ci %269 = OpVariable %8 Function 579e5c31af7Sopenharmony_ci %270 = OpVariable %8 Function 580e5c31af7Sopenharmony_ci %248 = OpLoad %245 %247 581e5c31af7Sopenharmony_ci %249 = OpVectorShuffle %7 %248 %248 0 1 582e5c31af7Sopenharmony_ci %254 = OpAccessChain %253 %252 %112 583e5c31af7Sopenharmony_ci %255 = OpLoad %7 %254 584e5c31af7Sopenharmony_ci %256 = OpFDiv %7 %249 %255 585e5c31af7Sopenharmony_ci OpStore %244 %256 586e5c31af7Sopenharmony_ci OpStore %266 %256 587e5c31af7Sopenharmony_ci OpStore %268 %259 588e5c31af7Sopenharmony_ci OpStore %269 %262 589e5c31af7Sopenharmony_ci OpStore %270 %265 590e5c31af7Sopenharmony_ci %271 = OpFunctionCall %14 %20 %266 %268 %269 %270 591e5c31af7Sopenharmony_ci %272 = OpIEqual %91 %271 %128 592e5c31af7Sopenharmony_ci OpSelectionMerge %274 None 593e5c31af7Sopenharmony_ci OpBranchConditional %272 %273 %279 594e5c31af7Sopenharmony_ci %273 = OpLabel 595e5c31af7Sopenharmony_ci OpStore %276 %278 596e5c31af7Sopenharmony_ci OpBranch %274 597e5c31af7Sopenharmony_ci %279 = OpLabel 598e5c31af7Sopenharmony_ci OpStore %276 %280 599e5c31af7Sopenharmony_ci OpBranch %274 600e5c31af7Sopenharmony_ci %274 = OpLabel 601e5c31af7Sopenharmony_ci OpReturn 602e5c31af7Sopenharmony_ci OpFunctionEnd 603e5c31af7Sopenharmony_ci %12 = OpFunction %6 None %9 604e5c31af7Sopenharmony_ci %10 = OpFunctionParameter %8 605e5c31af7Sopenharmony_ci %11 = OpFunctionParameter %8 606e5c31af7Sopenharmony_ci %13 = OpLabel 607e5c31af7Sopenharmony_ci %25 = OpAccessChain %24 %10 %23 608e5c31af7Sopenharmony_ci %26 = OpLoad %6 %25 609e5c31af7Sopenharmony_ci %28 = OpAccessChain %24 %11 %27 610e5c31af7Sopenharmony_ci %29 = OpLoad %6 %28 611e5c31af7Sopenharmony_ci %30 = OpFMul %6 %26 %29 612e5c31af7Sopenharmony_ci %31 = OpAccessChain %24 %11 %23 613e5c31af7Sopenharmony_ci %32 = OpLoad %6 %31 614e5c31af7Sopenharmony_ci %33 = OpAccessChain %24 %10 %27 615e5c31af7Sopenharmony_ci %34 = OpLoad %6 %33 616e5c31af7Sopenharmony_ci %35 = OpFMul %6 %32 %34 617e5c31af7Sopenharmony_ci %36 = OpFSub %6 %30 %35 618e5c31af7Sopenharmony_ci OpReturnValue %36 619e5c31af7Sopenharmony_ci OpFunctionEnd 620e5c31af7Sopenharmony_ci %20 = OpFunction %14 None %15 621e5c31af7Sopenharmony_ci %16 = OpFunctionParameter %8 622e5c31af7Sopenharmony_ci %17 = OpFunctionParameter %8 623e5c31af7Sopenharmony_ci %18 = OpFunctionParameter %8 624e5c31af7Sopenharmony_ci %19 = OpFunctionParameter %8 625e5c31af7Sopenharmony_ci %21 = OpLabel 626e5c31af7Sopenharmony_ci %287 = OpVariable %286 Function %285 627e5c31af7Sopenharmony_ci %282 = OpVariable %110 Function 628e5c31af7Sopenharmony_ci %39 = OpVariable %24 Function 629e5c31af7Sopenharmony_ci %62 = OpVariable %8 Function 630e5c31af7Sopenharmony_ci %63 = OpVariable %8 Function 631e5c31af7Sopenharmony_ci %65 = OpVariable %24 Function 632e5c31af7Sopenharmony_ci %88 = OpVariable %8 Function 633e5c31af7Sopenharmony_ci %89 = OpVariable %8 Function 634e5c31af7Sopenharmony_ci %111 = OpVariable %110 Function 635e5c31af7Sopenharmony_ci %124 = OpVariable %123 Function 636e5c31af7Sopenharmony_ci %130 = OpVariable %110 Function 637e5c31af7Sopenharmony_ci %141 = OpVariable %110 Function 638e5c31af7Sopenharmony_ci %142 = OpVariable %110 Function 639e5c31af7Sopenharmony_ci %143 = OpVariable %110 Function 640e5c31af7Sopenharmony_ci %150 = OpVariable %110 Function 641e5c31af7Sopenharmony_ci %151 = OpVariable %110 Function 642e5c31af7Sopenharmony_ci %162 = OpVariable %110 Function 643e5c31af7Sopenharmony_ci %198 = OpVariable %24 Function 644e5c31af7Sopenharmony_ci %221 = OpVariable %8 Function 645e5c31af7Sopenharmony_ci %222 = OpVariable %8 Function 646e5c31af7Sopenharmony_ci OpSelectionMerge %281 None 647e5c31af7Sopenharmony_ci OpSwitch %23 %284 648e5c31af7Sopenharmony_ci %284 = OpLabel 649e5c31af7Sopenharmony_ci %40 = OpAccessChain %24 %16 %23 650e5c31af7Sopenharmony_ci %41 = OpLoad %6 %40 651e5c31af7Sopenharmony_ci %42 = OpAccessChain %24 %17 %23 652e5c31af7Sopenharmony_ci %43 = OpLoad %6 %42 653e5c31af7Sopenharmony_ci %44 = OpFSub %6 %41 %43 654e5c31af7Sopenharmony_ci %45 = OpAccessChain %24 %16 %27 655e5c31af7Sopenharmony_ci %46 = OpLoad %6 %45 656e5c31af7Sopenharmony_ci %47 = OpAccessChain %24 %17 %27 657e5c31af7Sopenharmony_ci %48 = OpLoad %6 %47 658e5c31af7Sopenharmony_ci %49 = OpFSub %6 %46 %48 659e5c31af7Sopenharmony_ci %50 = OpCompositeConstruct %7 %44 %49 660e5c31af7Sopenharmony_ci %51 = OpAccessChain %24 %18 %23 661e5c31af7Sopenharmony_ci %52 = OpLoad %6 %51 662e5c31af7Sopenharmony_ci %54 = OpLoad %6 %42 663e5c31af7Sopenharmony_ci %55 = OpFSub %6 %52 %54 664e5c31af7Sopenharmony_ci %56 = OpAccessChain %24 %18 %27 665e5c31af7Sopenharmony_ci %57 = OpLoad %6 %56 666e5c31af7Sopenharmony_ci %59 = OpLoad %6 %47 667e5c31af7Sopenharmony_ci %60 = OpFSub %6 %57 %59 668e5c31af7Sopenharmony_ci %61 = OpCompositeConstruct %7 %55 %60 669e5c31af7Sopenharmony_ci OpStore %62 %50 670e5c31af7Sopenharmony_ci OpStore %63 %61 671e5c31af7Sopenharmony_ci %64 = OpFunctionCall %6 %12 %62 %63 672e5c31af7Sopenharmony_ci OpStore %39 %64 673e5c31af7Sopenharmony_ci %67 = OpLoad %6 %40 674e5c31af7Sopenharmony_ci %69 = OpLoad %6 %51 675e5c31af7Sopenharmony_ci %70 = OpFSub %6 %67 %69 676e5c31af7Sopenharmony_ci %72 = OpLoad %6 %45 677e5c31af7Sopenharmony_ci %74 = OpLoad %6 %56 678e5c31af7Sopenharmony_ci %75 = OpFSub %6 %72 %74 679e5c31af7Sopenharmony_ci %76 = OpCompositeConstruct %7 %70 %75 680e5c31af7Sopenharmony_ci %77 = OpAccessChain %24 %19 %23 681e5c31af7Sopenharmony_ci %78 = OpLoad %6 %77 682e5c31af7Sopenharmony_ci %80 = OpLoad %6 %51 683e5c31af7Sopenharmony_ci %81 = OpFSub %6 %78 %80 684e5c31af7Sopenharmony_ci %82 = OpAccessChain %24 %19 %27 685e5c31af7Sopenharmony_ci %83 = OpLoad %6 %82 686e5c31af7Sopenharmony_ci %85 = OpLoad %6 %56 687e5c31af7Sopenharmony_ci %86 = OpFSub %6 %83 %85 688e5c31af7Sopenharmony_ci %87 = OpCompositeConstruct %7 %81 %86 689e5c31af7Sopenharmony_ci OpStore %88 %76 690e5c31af7Sopenharmony_ci OpStore %89 %87 691e5c31af7Sopenharmony_ci %90 = OpFunctionCall %6 %12 %88 %89 692e5c31af7Sopenharmony_ci OpStore %65 %90 693e5c31af7Sopenharmony_ci %94 = OpFOrdLessThan %91 %64 %93 694e5c31af7Sopenharmony_ci %96 = OpFOrdLessThan %91 %90 %93 695e5c31af7Sopenharmony_ci %97 = OpLogicalAnd %91 %94 %96 696e5c31af7Sopenharmony_ci %98 = OpLogicalNot %91 %97 697e5c31af7Sopenharmony_ci OpSelectionMerge %100 None 698e5c31af7Sopenharmony_ci OpBranchConditional %98 %99 %100 699e5c31af7Sopenharmony_ci %99 = OpLabel 700e5c31af7Sopenharmony_ci %102 = OpFOrdGreaterThanEqual %91 %64 %93 701e5c31af7Sopenharmony_ci %104 = OpFOrdGreaterThanEqual %91 %90 %93 702e5c31af7Sopenharmony_ci %105 = OpLogicalAnd %91 %102 %104 703e5c31af7Sopenharmony_ci OpBranch %100 704e5c31af7Sopenharmony_ci %100 = OpLabel 705e5c31af7Sopenharmony_ci %106 = OpPhi %91 %97 %284 %105 %99 706e5c31af7Sopenharmony_ci %107 = OpLogicalNot %91 %106 707e5c31af7Sopenharmony_ci OpSelectionMerge %109 None 708e5c31af7Sopenharmony_ci OpBranchConditional %107 %108 %109 709e5c31af7Sopenharmony_ci %108 = OpLabel 710e5c31af7Sopenharmony_ci OpStore %111 %112 711e5c31af7Sopenharmony_ci OpBranch %113 712e5c31af7Sopenharmony_ci %113 = OpLabel 713e5c31af7Sopenharmony_ci %290 = OpPhi %14 %112 %108 %129 %116 714e5c31af7Sopenharmony_ci OpLoopMerge %115 %116 None 715e5c31af7Sopenharmony_ci OpBranch %117 716e5c31af7Sopenharmony_ci %117 = OpLabel 717e5c31af7Sopenharmony_ci %120 = OpSLessThan %91 %290 %119 718e5c31af7Sopenharmony_ci OpBranchConditional %120 %114 %115 719e5c31af7Sopenharmony_ci %114 = OpLabel 720e5c31af7Sopenharmony_ci %126 = OpAccessChain %110 %124 %290 721e5c31af7Sopenharmony_ci OpStore %126 %112 722e5c31af7Sopenharmony_ci OpBranch %116 723e5c31af7Sopenharmony_ci %116 = OpLabel 724e5c31af7Sopenharmony_ci %129 = OpIAdd %14 %290 %128 725e5c31af7Sopenharmony_ci OpStore %111 %129 726e5c31af7Sopenharmony_ci OpBranch %113 727e5c31af7Sopenharmony_ci %115 = OpLabel 728e5c31af7Sopenharmony_ci OpStore %130 %112 729e5c31af7Sopenharmony_ci OpBranch %131 730e5c31af7Sopenharmony_ci %131 = OpLabel 731e5c31af7Sopenharmony_ci %291 = OpPhi %14 %112 %115 %306 %134 732e5c31af7Sopenharmony_ci OpLoopMerge %133 %134 None 733e5c31af7Sopenharmony_ci OpBranch %135 734e5c31af7Sopenharmony_ci %135 = OpLabel 735e5c31af7Sopenharmony_ci %138 = OpSLessThan %91 %291 %137 736e5c31af7Sopenharmony_ci OpBranchConditional %138 %132 %133 737e5c31af7Sopenharmony_ci %132 = OpLabel 738e5c31af7Sopenharmony_ci %140 = OpIAdd %14 %291 %128 739e5c31af7Sopenharmony_ci OpStore %130 %140 740e5c31af7Sopenharmony_ci OpStore %141 %128 741e5c31af7Sopenharmony_ci OpStore %142 %128 742e5c31af7Sopenharmony_ci OpStore %143 %112 743e5c31af7Sopenharmony_ci OpBranch %144 744e5c31af7Sopenharmony_ci %144 = OpLabel 745e5c31af7Sopenharmony_ci %296 = OpPhi %14 %128 %132 %295 %147 746e5c31af7Sopenharmony_ci %293 = OpPhi %14 %112 %132 %149 %147 747e5c31af7Sopenharmony_ci %306 = OpPhi %14 %140 %132 %306 %147 748e5c31af7Sopenharmony_ci %301 = OpPhi %14 %128 %132 %300 %147 749e5c31af7Sopenharmony_ci OpLoopMerge %146 %147 None 750e5c31af7Sopenharmony_ci OpBranch %145 751e5c31af7Sopenharmony_ci %145 = OpLabel 752e5c31af7Sopenharmony_ci %149 = OpIAdd %14 %293 %128 753e5c31af7Sopenharmony_ci OpStore %143 %149 754e5c31af7Sopenharmony_ci OpStore %150 %112 755e5c31af7Sopenharmony_ci OpStore %151 %112 756e5c31af7Sopenharmony_ci OpBranch %152 757e5c31af7Sopenharmony_ci %152 = OpLabel 758e5c31af7Sopenharmony_ci %300 = OpPhi %14 %301 %145 %188 %155 759e5c31af7Sopenharmony_ci %295 = OpPhi %14 %296 %145 %311 %155 760e5c31af7Sopenharmony_ci %294 = OpPhi %14 %112 %145 %161 %155 761e5c31af7Sopenharmony_ci %303 = OpPhi %14 %112 %145 %302 %155 762e5c31af7Sopenharmony_ci OpLoopMerge %154 %155 None 763e5c31af7Sopenharmony_ci OpBranch %156 764e5c31af7Sopenharmony_ci %156 = OpLabel 765e5c31af7Sopenharmony_ci %159 = OpSLessThan %91 %294 %158 766e5c31af7Sopenharmony_ci OpBranchConditional %159 %153 %154 767e5c31af7Sopenharmony_ci %153 = OpLabel 768e5c31af7Sopenharmony_ci %161 = OpIAdd %14 %294 %128 769e5c31af7Sopenharmony_ci OpStore %151 %161 770e5c31af7Sopenharmony_ci OpStore %162 %112 771e5c31af7Sopenharmony_ci OpBranch %163 772e5c31af7Sopenharmony_ci %163 = OpLabel 773e5c31af7Sopenharmony_ci %302 = OpPhi %14 %303 %153 %186 %166 774e5c31af7Sopenharmony_ci %298 = OpPhi %14 %112 %153 %171 %166 775e5c31af7Sopenharmony_ci %311 = OpPhi %14 %295 %153 %312 %166 776e5c31af7Sopenharmony_ci OpLoopMerge %165 %166 None 777e5c31af7Sopenharmony_ci OpBranch %167 778e5c31af7Sopenharmony_ci %167 = OpLabel 779e5c31af7Sopenharmony_ci %169 = OpSLessThan %91 %298 %158 780e5c31af7Sopenharmony_ci OpBranchConditional %169 %164 %165 781e5c31af7Sopenharmony_ci %164 = OpLabel 782e5c31af7Sopenharmony_ci %171 = OpIAdd %14 %298 %128 783e5c31af7Sopenharmony_ci OpStore %162 %171 784e5c31af7Sopenharmony_ci %174 = OpIMul %14 %302 %173 785e5c31af7Sopenharmony_ci %176 = OpIAdd %14 %174 %175 786e5c31af7Sopenharmony_ci %178 = OpExtInst %14 %1 SClamp %176 %112 %177 787e5c31af7Sopenharmony_ci %179 = OpAccessChain %110 %124 %178 788e5c31af7Sopenharmony_ci %180 = OpLoad %14 %179 789e5c31af7Sopenharmony_ci %181 = OpIEqual %91 %180 %112 790e5c31af7Sopenharmony_ci OpSelectionMerge %183 None 791e5c31af7Sopenharmony_ci OpBranchConditional %181 %182 %183 792e5c31af7Sopenharmony_ci %182 = OpLabel 793e5c31af7Sopenharmony_ci OpStore %142 %300 794e5c31af7Sopenharmony_ci OpBranch %183 795e5c31af7Sopenharmony_ci %183 = OpLabel 796e5c31af7Sopenharmony_ci %312 = OpPhi %14 %311 %164 %300 %182 797e5c31af7Sopenharmony_ci OpBranch %166 798e5c31af7Sopenharmony_ci %166 = OpLabel 799e5c31af7Sopenharmony_ci %186 = OpIAdd %14 %302 %128 800e5c31af7Sopenharmony_ci OpStore %150 %186 801e5c31af7Sopenharmony_ci OpBranch %163 802e5c31af7Sopenharmony_ci %165 = OpLabel 803e5c31af7Sopenharmony_ci OpBranch %155 804e5c31af7Sopenharmony_ci %155 = OpLabel 805e5c31af7Sopenharmony_ci %188 = OpIAdd %14 %300 %128 806e5c31af7Sopenharmony_ci OpStore %141 %188 807e5c31af7Sopenharmony_ci OpBranch %152 808e5c31af7Sopenharmony_ci %154 = OpLabel 809e5c31af7Sopenharmony_ci %191 = OpIMul %14 %295 %190 810e5c31af7Sopenharmony_ci %192 = OpIAdd %14 %128 %191 811e5c31af7Sopenharmony_ci %193 = OpExtInst %14 %1 SClamp %192 %112 %177 812e5c31af7Sopenharmony_ci %194 = OpAccessChain %110 %124 %193 813e5c31af7Sopenharmony_ci OpStore %194 %128 814e5c31af7Sopenharmony_ci OpBranch %147 815e5c31af7Sopenharmony_ci %147 = OpLabel 816e5c31af7Sopenharmony_ci %196 = OpSLessThan %91 %149 %158 817e5c31af7Sopenharmony_ci OpBranchConditional %196 %144 %146 818e5c31af7Sopenharmony_ci %146 = OpLabel 819e5c31af7Sopenharmony_ci OpBranch %134 820e5c31af7Sopenharmony_ci %134 = OpLabel 821e5c31af7Sopenharmony_ci OpBranch %131 822e5c31af7Sopenharmony_ci %133 = OpLabel 823e5c31af7Sopenharmony_ci OpStore %287 %288 824e5c31af7Sopenharmony_ci OpStore %282 %112 825e5c31af7Sopenharmony_ci OpBranch %281 826e5c31af7Sopenharmony_ci %109 = OpLabel 827e5c31af7Sopenharmony_ci %200 = OpLoad %6 %40 828e5c31af7Sopenharmony_ci %202 = OpLoad %6 %77 829e5c31af7Sopenharmony_ci %203 = OpFSub %6 %200 %202 830e5c31af7Sopenharmony_ci %205 = OpLoad %6 %45 831e5c31af7Sopenharmony_ci %207 = OpLoad %6 %82 832e5c31af7Sopenharmony_ci %208 = OpFSub %6 %205 %207 833e5c31af7Sopenharmony_ci %209 = OpCompositeConstruct %7 %203 %208 834e5c31af7Sopenharmony_ci %211 = OpLoad %6 %42 835e5c31af7Sopenharmony_ci %213 = OpLoad %6 %77 836e5c31af7Sopenharmony_ci %214 = OpFSub %6 %211 %213 837e5c31af7Sopenharmony_ci %216 = OpLoad %6 %47 838e5c31af7Sopenharmony_ci %218 = OpLoad %6 %82 839e5c31af7Sopenharmony_ci %219 = OpFSub %6 %216 %218 840e5c31af7Sopenharmony_ci %220 = OpCompositeConstruct %7 %214 %219 841e5c31af7Sopenharmony_ci OpStore %221 %209 842e5c31af7Sopenharmony_ci OpStore %222 %220 843e5c31af7Sopenharmony_ci %223 = OpFunctionCall %6 %12 %221 %222 844e5c31af7Sopenharmony_ci OpStore %198 %223 845e5c31af7Sopenharmony_ci %225 = OpFOrdLessThan %91 %64 %93 846e5c31af7Sopenharmony_ci %227 = OpFOrdLessThan %91 %223 %93 847e5c31af7Sopenharmony_ci %228 = OpLogicalAnd %91 %225 %227 848e5c31af7Sopenharmony_ci %229 = OpLogicalNot %91 %228 849e5c31af7Sopenharmony_ci OpSelectionMerge %231 None 850e5c31af7Sopenharmony_ci OpBranchConditional %229 %230 %231 851e5c31af7Sopenharmony_ci %230 = OpLabel 852e5c31af7Sopenharmony_ci %233 = OpFOrdGreaterThanEqual %91 %64 %93 853e5c31af7Sopenharmony_ci %235 = OpFOrdGreaterThanEqual %91 %223 %93 854e5c31af7Sopenharmony_ci %236 = OpLogicalAnd %91 %233 %235 855e5c31af7Sopenharmony_ci OpBranch %231 856e5c31af7Sopenharmony_ci %231 = OpLabel 857e5c31af7Sopenharmony_ci %237 = OpPhi %91 %228 %109 %236 %230 858e5c31af7Sopenharmony_ci %238 = OpLogicalNot %91 %237 859e5c31af7Sopenharmony_ci OpSelectionMerge %240 None 860e5c31af7Sopenharmony_ci OpBranchConditional %238 %239 %240 861e5c31af7Sopenharmony_ci %239 = OpLabel 862e5c31af7Sopenharmony_ci OpStore %287 %288 863e5c31af7Sopenharmony_ci OpStore %282 %112 864e5c31af7Sopenharmony_ci OpBranch %281 865e5c31af7Sopenharmony_ci %240 = OpLabel 866e5c31af7Sopenharmony_ci OpStore %287 %288 867e5c31af7Sopenharmony_ci OpStore %282 %128 868e5c31af7Sopenharmony_ci OpBranch %281 869e5c31af7Sopenharmony_ci %281 = OpLabel 870e5c31af7Sopenharmony_ci %292 = OpPhi %14 %112 %133 %112 %239 %128 %240 871e5c31af7Sopenharmony_ci OpReturnValue %292 872e5c31af7Sopenharmony_ci OpFunctionEnd 873e5c31af7Sopenharmony_ciEND 874e5c31af7Sopenharmony_ci 875e5c31af7Sopenharmony_ci# uniforms for variant 876e5c31af7Sopenharmony_ci 877e5c31af7Sopenharmony_ci# resolution 878e5c31af7Sopenharmony_ciBUFFER variant_resolution DATA_TYPE vec2<float> DATA 879e5c31af7Sopenharmony_ci 256.0 256.0 880e5c31af7Sopenharmony_ciEND 881e5c31af7Sopenharmony_ci 882e5c31af7Sopenharmony_ciBUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM 883e5c31af7Sopenharmony_ci 884e5c31af7Sopenharmony_ciPIPELINE graphics variant_pipeline 885e5c31af7Sopenharmony_ci ATTACH variant_vertex_shader 886e5c31af7Sopenharmony_ci ATTACH variant_fragment_shader 887e5c31af7Sopenharmony_ci FRAMEBUFFER_SIZE 256 256 888e5c31af7Sopenharmony_ci BIND BUFFER variant_framebuffer AS color LOCATION 0 889e5c31af7Sopenharmony_ci BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0 890e5c31af7Sopenharmony_ciEND 891e5c31af7Sopenharmony_ciCLEAR_COLOR variant_pipeline 0 0 0 255 892e5c31af7Sopenharmony_ci 893e5c31af7Sopenharmony_ciCLEAR variant_pipeline 894e5c31af7Sopenharmony_ciRUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256 895e5c31af7Sopenharmony_ci 896e5c31af7Sopenharmony_ciEXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005 897