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