OpCapability Shader %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %_entrypoint_v "_entrypoint" %sk_FragColor OpExecutionMode %_entrypoint_v OriginUpperLeft OpName %sk_FragColor "sk_FragColor" OpName %_UniformBuffer "_UniformBuffer" OpMemberName %_UniformBuffer 0 "colorGreen" OpMemberName %_UniformBuffer 1 "colorRed" OpName %_entrypoint_v "_entrypoint_v" OpName %test_half_b "test_half_b" OpName %ok "ok" OpName %m23 "m23" OpName %m24 "m24" OpName %m32 "m32" OpName %m34 "m34" OpName %m42 "m42" OpName %m43 "m43" OpName %m22 "m22" OpName %m33 "m33" OpName %main "main" OpName %_0_ok "_0_ok" OpName %_1_m23 "_1_m23" OpName %_2_m24 "_2_m24" OpName %_3_m32 "_3_m32" OpName %_7_m22 "_7_m22" OpDecorate %sk_FragColor RelaxedPrecision OpDecorate %sk_FragColor Location 0 OpDecorate %sk_FragColor Index 0 OpMemberDecorate %_UniformBuffer 0 Offset 0 OpMemberDecorate %_UniformBuffer 0 RelaxedPrecision OpMemberDecorate %_UniformBuffer 1 Offset 16 OpMemberDecorate %_UniformBuffer 1 RelaxedPrecision OpDecorate %_UniformBuffer Block OpDecorate %8 Binding 0 OpDecorate %8 DescriptorSet 0 OpDecorate %m23 RelaxedPrecision OpDecorate %39 RelaxedPrecision OpDecorate %41 RelaxedPrecision OpDecorate %m24 RelaxedPrecision OpDecorate %55 RelaxedPrecision OpDecorate %57 RelaxedPrecision OpDecorate %m32 RelaxedPrecision OpDecorate %71 RelaxedPrecision OpDecorate %73 RelaxedPrecision OpDecorate %76 RelaxedPrecision OpDecorate %m34 RelaxedPrecision OpDecorate %90 RelaxedPrecision OpDecorate %92 RelaxedPrecision OpDecorate %95 RelaxedPrecision OpDecorate %m42 RelaxedPrecision OpDecorate %108 RelaxedPrecision OpDecorate %110 RelaxedPrecision OpDecorate %113 RelaxedPrecision OpDecorate %116 RelaxedPrecision OpDecorate %m43 RelaxedPrecision OpDecorate %131 RelaxedPrecision OpDecorate %133 RelaxedPrecision OpDecorate %136 RelaxedPrecision OpDecorate %139 RelaxedPrecision OpDecorate %m22 RelaxedPrecision OpDecorate %146 RelaxedPrecision OpDecorate %153 RelaxedPrecision OpDecorate %154 RelaxedPrecision OpDecorate %156 RelaxedPrecision OpDecorate %157 RelaxedPrecision OpDecorate %m33 RelaxedPrecision OpDecorate %164 RelaxedPrecision OpDecorate %172 RelaxedPrecision OpDecorate %173 RelaxedPrecision OpDecorate %175 RelaxedPrecision OpDecorate %176 RelaxedPrecision OpDecorate %179 RelaxedPrecision OpDecorate %180 RelaxedPrecision OpDecorate %187 RelaxedPrecision OpDecorate %188 RelaxedPrecision OpDecorate %189 RelaxedPrecision OpDecorate %195 RelaxedPrecision OpDecorate %197 RelaxedPrecision OpDecorate %203 RelaxedPrecision OpDecorate %204 RelaxedPrecision OpDecorate %205 RelaxedPrecision OpDecorate %206 RelaxedPrecision OpDecorate %214 RelaxedPrecision OpDecorate %216 RelaxedPrecision OpDecorate %219 RelaxedPrecision OpDecorate %224 RelaxedPrecision OpDecorate %231 RelaxedPrecision OpDecorate %232 RelaxedPrecision OpDecorate %234 RelaxedPrecision OpDecorate %235 RelaxedPrecision OpDecorate %335 RelaxedPrecision OpDecorate %338 RelaxedPrecision OpDecorate %339 RelaxedPrecision %float = OpTypeFloat 32 %v4float = OpTypeVector %float 4 %_ptr_Output_v4float = OpTypePointer Output %v4float %sk_FragColor = OpVariable %_ptr_Output_v4float Output %_UniformBuffer = OpTypeStruct %v4float %v4float %_ptr_Uniform__UniformBuffer = OpTypePointer Uniform %_UniformBuffer %8 = OpVariable %_ptr_Uniform__UniformBuffer Uniform %void = OpTypeVoid %13 = OpTypeFunction %void %float_0 = OpConstant %float 0 %v2float = OpTypeVector %float 2 %17 = OpConstantComposite %v2float %float_0 %float_0 %_ptr_Function_v2float = OpTypePointer Function %v2float %bool = OpTypeBool %22 = OpTypeFunction %bool %_ptr_Function_bool = OpTypePointer Function %bool %true = OpConstantTrue %bool %v3float = OpTypeVector %float 3 %mat2v3float = OpTypeMatrix %v3float 2 %_ptr_Function_mat2v3float = OpTypePointer Function %mat2v3float %float_2 = OpConstant %float 2 %32 = OpConstantComposite %v3float %float_2 %float_0 %float_0 %33 = OpConstantComposite %v3float %float_0 %float_2 %float_0 %34 = OpConstantComposite %mat2v3float %32 %33 %false = OpConstantFalse %bool %v3bool = OpTypeVector %bool 3 %mat2v4float = OpTypeMatrix %v4float 2 %_ptr_Function_mat2v4float = OpTypePointer Function %mat2v4float %float_3 = OpConstant %float 3 %49 = OpConstantComposite %v4float %float_3 %float_0 %float_0 %float_0 %50 = OpConstantComposite %v4float %float_0 %float_3 %float_0 %float_0 %51 = OpConstantComposite %mat2v4float %49 %50 %v4bool = OpTypeVector %bool 4 %mat3v2float = OpTypeMatrix %v2float 3 %_ptr_Function_mat3v2float = OpTypePointer Function %mat3v2float %float_4 = OpConstant %float 4 %65 = OpConstantComposite %v2float %float_4 %float_0 %66 = OpConstantComposite %v2float %float_0 %float_4 %67 = OpConstantComposite %mat3v2float %65 %66 %17 %v2bool = OpTypeVector %bool 2 %mat3v4float = OpTypeMatrix %v4float 3 %_ptr_Function_mat3v4float = OpTypePointer Function %mat3v4float %float_5 = OpConstant %float 5 %84 = OpConstantComposite %v4float %float_5 %float_0 %float_0 %float_0 %85 = OpConstantComposite %v4float %float_0 %float_5 %float_0 %float_0 %86 = OpConstantComposite %v4float %float_0 %float_0 %float_5 %float_0 %87 = OpConstantComposite %mat3v4float %84 %85 %86 %mat4v2float = OpTypeMatrix %v2float 4 %_ptr_Function_mat4v2float = OpTypePointer Function %mat4v2float %float_6 = OpConstant %float 6 %103 = OpConstantComposite %v2float %float_6 %float_0 %104 = OpConstantComposite %v2float %float_0 %float_6 %105 = OpConstantComposite %mat4v2float %103 %104 %17 %17 %mat4v3float = OpTypeMatrix %v3float 4 %_ptr_Function_mat4v3float = OpTypePointer Function %mat4v3float %float_7 = OpConstant %float 7 %124 = OpConstantComposite %v3float %float_7 %float_0 %float_0 %125 = OpConstantComposite %v3float %float_0 %float_7 %float_0 %126 = OpConstantComposite %v3float %float_0 %float_0 %float_7 %127 = OpConstantComposite %v3float %float_0 %float_0 %float_0 %128 = OpConstantComposite %mat4v3float %124 %125 %126 %127 %mat2v2float = OpTypeMatrix %v2float 2 %_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float %float_8 = OpConstant %float 8 %150 = OpConstantComposite %v2float %float_8 %float_0 %151 = OpConstantComposite %v2float %float_0 %float_8 %152 = OpConstantComposite %mat2v2float %150 %151 %mat3v3float = OpTypeMatrix %v3float 3 %_ptr_Function_mat3v3float = OpTypePointer Function %mat3v3float %float_35 = OpConstant %float 35 %168 = OpConstantComposite %v3float %float_35 %float_0 %float_0 %169 = OpConstantComposite %v3float %float_0 %float_35 %float_0 %170 = OpConstantComposite %v3float %float_0 %float_0 %float_35 %171 = OpConstantComposite %mat3v3float %168 %169 %170 %float_1 = OpConstant %float 1 %185 = OpConstantComposite %v3float %float_1 %float_1 %float_1 %186 = OpConstantComposite %mat2v3float %185 %185 %192 = OpConstantComposite %v3float %float_3 %float_1 %float_1 %193 = OpConstantComposite %v3float %float_1 %float_3 %float_1 %194 = OpConstantComposite %mat2v3float %192 %193 %201 = OpConstantComposite %v2float %float_2 %float_2 %202 = OpConstantComposite %mat3v2float %201 %201 %201 %float_n2 = OpConstant %float -2 %210 = OpConstantComposite %v2float %float_2 %float_n2 %211 = OpConstantComposite %v2float %float_n2 %float_2 %212 = OpConstantComposite %v2float %float_n2 %float_n2 %213 = OpConstantComposite %mat3v2float %210 %211 %212 %float_0_25 = OpConstant %float 0.25 %float_0_75 = OpConstant %float 0.75 %228 = OpConstantComposite %v4float %float_0_75 %float_0 %float_0 %float_0 %229 = OpConstantComposite %v4float %float_0 %float_0_75 %float_0 %float_0 %230 = OpConstantComposite %mat2v4float %228 %229 %239 = OpTypeFunction %v4float %_ptr_Function_v2float %_ptr_Function_v4float = OpTypePointer Function %v4float %_ptr_Uniform_v4float = OpTypePointer Uniform %v4float %int = OpTypeInt 32 1 %int_0 = OpConstant %int 0 %int_1 = OpConstant %int 1 %_entrypoint_v = OpFunction %void None %13 %14 = OpLabel %18 = OpVariable %_ptr_Function_v2float Function OpStore %18 %17 %20 = OpFunctionCall %v4float %main %18 OpStore %sk_FragColor %20 OpReturn OpFunctionEnd %test_half_b = OpFunction %bool None %22 %23 = OpLabel %ok = OpVariable %_ptr_Function_bool Function %m23 = OpVariable %_ptr_Function_mat2v3float Function %m24 = OpVariable %_ptr_Function_mat2v4float Function %m32 = OpVariable %_ptr_Function_mat3v2float Function %m34 = OpVariable %_ptr_Function_mat3v4float Function %m42 = OpVariable %_ptr_Function_mat4v2float Function %m43 = OpVariable %_ptr_Function_mat4v3float Function %m22 = OpVariable %_ptr_Function_mat2v2float Function %m33 = OpVariable %_ptr_Function_mat3v3float Function OpStore %ok %true OpStore %m23 %34 OpSelectionMerge %37 None OpBranchConditional %true %36 %37 %36 = OpLabel %39 = OpFOrdEqual %v3bool %32 %32 %40 = OpAll %bool %39 %41 = OpFOrdEqual %v3bool %33 %33 %42 = OpAll %bool %41 %43 = OpLogicalAnd %bool %40 %42 OpBranch %37 %37 = OpLabel %44 = OpPhi %bool %false %23 %43 %36 OpStore %ok %44 OpStore %m24 %51 OpSelectionMerge %53 None OpBranchConditional %44 %52 %53 %52 = OpLabel %55 = OpFOrdEqual %v4bool %49 %49 %56 = OpAll %bool %55 %57 = OpFOrdEqual %v4bool %50 %50 %58 = OpAll %bool %57 %59 = OpLogicalAnd %bool %56 %58 OpBranch %53 %53 = OpLabel %60 = OpPhi %bool %false %37 %59 %52 OpStore %ok %60 OpStore %m32 %67 OpSelectionMerge %69 None OpBranchConditional %60 %68 %69 %68 = OpLabel %71 = OpFOrdEqual %v2bool %65 %65 %72 = OpAll %bool %71 %73 = OpFOrdEqual %v2bool %66 %66 %74 = OpAll %bool %73 %75 = OpLogicalAnd %bool %72 %74 %76 = OpFOrdEqual %v2bool %17 %17 %77 = OpAll %bool %76 %78 = OpLogicalAnd %bool %75 %77 OpBranch %69 %69 = OpLabel %79 = OpPhi %bool %false %53 %78 %68 OpStore %ok %79 OpStore %m34 %87 OpSelectionMerge %89 None OpBranchConditional %79 %88 %89 %88 = OpLabel %90 = OpFOrdEqual %v4bool %84 %84 %91 = OpAll %bool %90 %92 = OpFOrdEqual %v4bool %85 %85 %93 = OpAll %bool %92 %94 = OpLogicalAnd %bool %91 %93 %95 = OpFOrdEqual %v4bool %86 %86 %96 = OpAll %bool %95 %97 = OpLogicalAnd %bool %94 %96 OpBranch %89 %89 = OpLabel %98 = OpPhi %bool %false %69 %97 %88 OpStore %ok %98 OpStore %m42 %105 OpSelectionMerge %107 None OpBranchConditional %98 %106 %107 %106 = OpLabel %108 = OpFOrdEqual %v2bool %103 %103 %109 = OpAll %bool %108 %110 = OpFOrdEqual %v2bool %104 %104 %111 = OpAll %bool %110 %112 = OpLogicalAnd %bool %109 %111 %113 = OpFOrdEqual %v2bool %17 %17 %114 = OpAll %bool %113 %115 = OpLogicalAnd %bool %112 %114 %116 = OpFOrdEqual %v2bool %17 %17 %117 = OpAll %bool %116 %118 = OpLogicalAnd %bool %115 %117 OpBranch %107 %107 = OpLabel %119 = OpPhi %bool %false %89 %118 %106 OpStore %ok %119 OpStore %m43 %128 OpSelectionMerge %130 None OpBranchConditional %119 %129 %130 %129 = OpLabel %131 = OpFOrdEqual %v3bool %124 %124 %132 = OpAll %bool %131 %133 = OpFOrdEqual %v3bool %125 %125 %134 = OpAll %bool %133 %135 = OpLogicalAnd %bool %132 %134 %136 = OpFOrdEqual %v3bool %126 %126 %137 = OpAll %bool %136 %138 = OpLogicalAnd %bool %135 %137 %139 = OpFOrdEqual %v3bool %127 %127 %140 = OpAll %bool %139 %141 = OpLogicalAnd %bool %138 %140 OpBranch %130 %130 = OpLabel %142 = OpPhi %bool %false %107 %141 %129 OpStore %ok %142 %146 = OpMatrixTimesMatrix %mat2v2float %67 %34 OpStore %m22 %146 OpSelectionMerge %148 None OpBranchConditional %142 %147 %148 %147 = OpLabel %153 = OpCompositeExtract %v2float %146 0 %154 = OpFOrdEqual %v2bool %153 %150 %155 = OpAll %bool %154 %156 = OpCompositeExtract %v2float %146 1 %157 = OpFOrdEqual %v2bool %156 %151 %158 = OpAll %bool %157 %159 = OpLogicalAnd %bool %155 %158 OpBranch %148 %148 = OpLabel %160 = OpPhi %bool %false %130 %159 %147 OpStore %ok %160 %164 = OpMatrixTimesMatrix %mat3v3float %128 %87 OpStore %m33 %164 OpSelectionMerge %166 None OpBranchConditional %160 %165 %166 %165 = OpLabel %172 = OpCompositeExtract %v3float %164 0 %173 = OpFOrdEqual %v3bool %172 %168 %174 = OpAll %bool %173 %175 = OpCompositeExtract %v3float %164 1 %176 = OpFOrdEqual %v3bool %175 %169 %177 = OpAll %bool %176 %178 = OpLogicalAnd %bool %174 %177 %179 = OpCompositeExtract %v3float %164 2 %180 = OpFOrdEqual %v3bool %179 %170 %181 = OpAll %bool %180 %182 = OpLogicalAnd %bool %178 %181 OpBranch %166 %166 = OpLabel %183 = OpPhi %bool %false %148 %182 %165 OpStore %ok %183 %187 = OpFAdd %v3float %32 %185 %188 = OpFAdd %v3float %33 %185 %189 = OpCompositeConstruct %mat2v3float %187 %188 OpStore %m23 %189 OpSelectionMerge %191 None OpBranchConditional %183 %190 %191 %190 = OpLabel %195 = OpFOrdEqual %v3bool %187 %192 %196 = OpAll %bool %195 %197 = OpFOrdEqual %v3bool %188 %193 %198 = OpAll %bool %197 %199 = OpLogicalAnd %bool %196 %198 OpBranch %191 %191 = OpLabel %200 = OpPhi %bool %false %166 %199 %190 OpStore %ok %200 %203 = OpFSub %v2float %65 %201 %204 = OpFSub %v2float %66 %201 %205 = OpFSub %v2float %17 %201 %206 = OpCompositeConstruct %mat3v2float %203 %204 %205 OpStore %m32 %206 OpSelectionMerge %208 None OpBranchConditional %200 %207 %208 %207 = OpLabel %214 = OpFOrdEqual %v2bool %203 %210 %215 = OpAll %bool %214 %216 = OpFOrdEqual %v2bool %204 %211 %217 = OpAll %bool %216 %218 = OpLogicalAnd %bool %215 %217 %219 = OpFOrdEqual %v2bool %205 %212 %220 = OpAll %bool %219 %221 = OpLogicalAnd %bool %218 %220 OpBranch %208 %208 = OpLabel %222 = OpPhi %bool %false %191 %221 %207 OpStore %ok %222 %224 = OpMatrixTimesScalar %mat2v4float %51 %float_0_25 OpStore %m24 %224 OpSelectionMerge %226 None OpBranchConditional %222 %225 %226 %225 = OpLabel %231 = OpCompositeExtract %v4float %224 0 %232 = OpFOrdEqual %v4bool %231 %228 %233 = OpAll %bool %232 %234 = OpCompositeExtract %v4float %224 1 %235 = OpFOrdEqual %v4bool %234 %229 %236 = OpAll %bool %235 %237 = OpLogicalAnd %bool %233 %236 OpBranch %226 %226 = OpLabel %238 = OpPhi %bool %false %208 %237 %225 OpStore %ok %238 OpReturnValue %238 OpFunctionEnd %main = OpFunction %v4float None %239 %240 = OpFunctionParameter %_ptr_Function_v2float %241 = OpLabel %_0_ok = OpVariable %_ptr_Function_bool Function %_1_m23 = OpVariable %_ptr_Function_mat2v3float Function %_2_m24 = OpVariable %_ptr_Function_mat2v4float Function %_3_m32 = OpVariable %_ptr_Function_mat3v2float Function %_7_m22 = OpVariable %_ptr_Function_mat2v2float Function %326 = OpVariable %_ptr_Function_v4float Function OpStore %_0_ok %true OpStore %_1_m23 %34 OpSelectionMerge %245 None OpBranchConditional %true %244 %245 %244 = OpLabel %246 = OpFOrdEqual %v3bool %32 %32 %247 = OpAll %bool %246 %248 = OpFOrdEqual %v3bool %33 %33 %249 = OpAll %bool %248 %250 = OpLogicalAnd %bool %247 %249 OpBranch %245 %245 = OpLabel %251 = OpPhi %bool %false %241 %250 %244 OpStore %_0_ok %251 OpStore %_2_m24 %51 OpSelectionMerge %254 None OpBranchConditional %251 %253 %254 %253 = OpLabel %255 = OpFOrdEqual %v4bool %49 %49 %256 = OpAll %bool %255 %257 = OpFOrdEqual %v4bool %50 %50 %258 = OpAll %bool %257 %259 = OpLogicalAnd %bool %256 %258 OpBranch %254 %254 = OpLabel %260 = OpPhi %bool %false %245 %259 %253 OpStore %_0_ok %260 OpStore %_3_m32 %67 OpSelectionMerge %263 None OpBranchConditional %260 %262 %263 %262 = OpLabel %264 = OpFOrdEqual %v2bool %65 %65 %265 = OpAll %bool %264 %266 = OpFOrdEqual %v2bool %66 %66 %267 = OpAll %bool %266 %268 = OpLogicalAnd %bool %265 %267 %269 = OpFOrdEqual %v2bool %17 %17 %270 = OpAll %bool %269 %271 = OpLogicalAnd %bool %268 %270 OpBranch %263 %263 = OpLabel %272 = OpPhi %bool %false %254 %271 %262 OpStore %_0_ok %272 %274 = OpMatrixTimesMatrix %mat2v2float %67 %34 OpStore %_7_m22 %274 OpSelectionMerge %276 None OpBranchConditional %272 %275 %276 %275 = OpLabel %277 = OpCompositeExtract %v2float %274 0 %278 = OpFOrdEqual %v2bool %277 %150 %279 = OpAll %bool %278 %280 = OpCompositeExtract %v2float %274 1 %281 = OpFOrdEqual %v2bool %280 %151 %282 = OpAll %bool %281 %283 = OpLogicalAnd %bool %279 %282 OpBranch %276 %276 = OpLabel %284 = OpPhi %bool %false %263 %283 %275 OpStore %_0_ok %284 %285 = OpFAdd %v3float %32 %185 %286 = OpFAdd %v3float %33 %185 %287 = OpCompositeConstruct %mat2v3float %285 %286 OpStore %_1_m23 %287 OpSelectionMerge %289 None OpBranchConditional %284 %288 %289 %288 = OpLabel %290 = OpFOrdEqual %v3bool %285 %192 %291 = OpAll %bool %290 %292 = OpFOrdEqual %v3bool %286 %193 %293 = OpAll %bool %292 %294 = OpLogicalAnd %bool %291 %293 OpBranch %289 %289 = OpLabel %295 = OpPhi %bool %false %276 %294 %288 OpStore %_0_ok %295 %296 = OpFSub %v2float %65 %201 %297 = OpFSub %v2float %66 %201 %298 = OpFSub %v2float %17 %201 %299 = OpCompositeConstruct %mat3v2float %296 %297 %298 OpStore %_3_m32 %299 OpSelectionMerge %301 None OpBranchConditional %295 %300 %301 %300 = OpLabel %302 = OpFOrdEqual %v2bool %296 %210 %303 = OpAll %bool %302 %304 = OpFOrdEqual %v2bool %297 %211 %305 = OpAll %bool %304 %306 = OpLogicalAnd %bool %303 %305 %307 = OpFOrdEqual %v2bool %298 %212 %308 = OpAll %bool %307 %309 = OpLogicalAnd %bool %306 %308 OpBranch %301 %301 = OpLabel %310 = OpPhi %bool %false %289 %309 %300 OpStore %_0_ok %310 %311 = OpMatrixTimesScalar %mat2v4float %51 %float_0_25 OpStore %_2_m24 %311 OpSelectionMerge %313 None OpBranchConditional %310 %312 %313 %312 = OpLabel %314 = OpCompositeExtract %v4float %311 0 %315 = OpFOrdEqual %v4bool %314 %228 %316 = OpAll %bool %315 %317 = OpCompositeExtract %v4float %311 1 %318 = OpFOrdEqual %v4bool %317 %229 %319 = OpAll %bool %318 %320 = OpLogicalAnd %bool %316 %319 OpBranch %313 %313 = OpLabel %321 = OpPhi %bool %false %301 %320 %312 OpStore %_0_ok %321 OpSelectionMerge %323 None OpBranchConditional %321 %322 %323 %322 = OpLabel %324 = OpFunctionCall %bool %test_half_b OpBranch %323 %323 = OpLabel %325 = OpPhi %bool %false %313 %324 %322 OpSelectionMerge %330 None OpBranchConditional %325 %328 %329 %328 = OpLabel %331 = OpAccessChain %_ptr_Uniform_v4float %8 %int_0 %335 = OpLoad %v4float %331 OpStore %326 %335 OpBranch %330 %329 = OpLabel %336 = OpAccessChain %_ptr_Uniform_v4float %8 %int_1 %338 = OpLoad %v4float %336 OpStore %326 %338 OpBranch %330 %330 = OpLabel %339 = OpLoad %v4float %326 OpReturnValue %339 OpFunctionEnd