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 "colorRed" OpMemberName %_UniformBuffer 1 "colorGreen" OpName %_entrypoint_v "_entrypoint_v" OpName %S "S" OpMemberName %S 0 "x" OpMemberName %S 1 "y" OpName %returns_a_struct_S "returns_a_struct_S" OpName %s "s" OpName %constructs_a_struct_S "constructs_a_struct_S" OpName %accepts_a_struct_fS "accepts_a_struct_fS" OpName %modifies_a_struct_vS "modifies_a_struct_vS" OpName %main "main" OpName %s_0 "s" OpName %x "x" OpName %expected "expected" OpName %Nested "Nested" OpMemberName %Nested 0 "a" OpMemberName %Nested 1 "b" OpName %n1 "n1" OpName %n2 "n2" OpName %n3 "n3" OpName %Compound "Compound" OpMemberName %Compound 0 "f4" OpMemberName %Compound 1 "i3" OpName %c1 "c1" OpName %c2 "c2" OpName %c3 "c3" OpName %valid "valid" 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 %11 Binding 0 OpDecorate %11 DescriptorSet 0 OpMemberDecorate %S 0 Offset 0 OpMemberDecorate %S 1 Offset 4 OpDecorate %38 RelaxedPrecision OpMemberDecorate %Nested 0 Offset 0 OpMemberDecorate %Nested 0 RelaxedPrecision OpMemberDecorate %Nested 1 Offset 16 OpMemberDecorate %Nested 1 RelaxedPrecision OpDecorate %82 RelaxedPrecision OpDecorate %84 RelaxedPrecision OpDecorate %86 RelaxedPrecision OpMemberDecorate %Compound 0 Offset 0 OpMemberDecorate %Compound 1 Offset 16 OpDecorate %105 RelaxedPrecision OpDecorate %106 RelaxedPrecision OpDecorate %111 RelaxedPrecision OpDecorate %112 RelaxedPrecision OpDecorate %135 RelaxedPrecision OpDecorate %136 RelaxedPrecision OpDecorate %147 RelaxedPrecision OpDecorate %157 RelaxedPrecision OpDecorate %169 RelaxedPrecision OpDecorate %170 RelaxedPrecision OpDecorate %193 RelaxedPrecision OpDecorate %194 RelaxedPrecision OpDecorate %217 RelaxedPrecision OpDecorate %255 RelaxedPrecision OpDecorate %257 RelaxedPrecision OpDecorate %258 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 %11 = OpVariable %_ptr_Uniform__UniformBuffer Uniform %void = OpTypeVoid %16 = OpTypeFunction %void %float_0 = OpConstant %float 0 %v2float = OpTypeVector %float 2 %20 = OpConstantComposite %v2float %float_0 %float_0 %_ptr_Function_v2float = OpTypePointer Function %v2float %int = OpTypeInt 32 1 %S = OpTypeStruct %float %int %26 = OpTypeFunction %S %_ptr_Function_S = OpTypePointer Function %S %float_1 = OpConstant %float 1 %int_0 = OpConstant %int 0 %_ptr_Function_float = OpTypePointer Function %float %int_2 = OpConstant %int 2 %int_1 = OpConstant %int 1 %_ptr_Function_int = OpTypePointer Function %int %float_2 = OpConstant %float 2 %int_3 = OpConstant %int 3 %43 = OpTypeFunction %float %_ptr_Function_S %52 = OpTypeFunction %void %_ptr_Function_S %61 = OpTypeFunction %v4float %_ptr_Function_v2float %Nested = OpTypeStruct %S %S %_ptr_Function_Nested = OpTypePointer Function %Nested %v3int = OpTypeVector %int 3 %Compound = OpTypeStruct %v4float %v3int %_ptr_Function_Compound = OpTypePointer Function %Compound %float_3 = OpConstant %float 3 %float_4 = OpConstant %float 4 %96 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4 %int_5 = OpConstant %int 5 %int_6 = OpConstant %int 6 %int_7 = OpConstant %int 7 %100 = OpConstantComposite %v3int %int_5 %int_6 %int_7 %_ptr_Uniform_v4float = OpTypePointer Uniform %v4float %bool = OpTypeBool %_ptr_Function_bool = OpTypePointer Function %bool %false = OpConstantFalse %bool %v4bool = OpTypeVector %bool 4 %true = OpConstantTrue %bool %_ptr_Function_v4float = OpTypePointer Function %v4float %_entrypoint_v = OpFunction %void None %16 %17 = OpLabel %21 = OpVariable %_ptr_Function_v2float Function OpStore %21 %20 %23 = OpFunctionCall %v4float %main %21 OpStore %sk_FragColor %23 OpReturn OpFunctionEnd %returns_a_struct_S = OpFunction %S None %26 %27 = OpLabel %s = OpVariable %_ptr_Function_S Function %32 = OpAccessChain %_ptr_Function_float %s %int_0 OpStore %32 %float_1 %36 = OpAccessChain %_ptr_Function_int %s %int_1 OpStore %36 %int_2 %38 = OpLoad %S %s OpReturnValue %38 OpFunctionEnd %constructs_a_struct_S = OpFunction %S None %26 %39 = OpLabel %42 = OpCompositeConstruct %S %float_2 %int_3 OpReturnValue %42 OpFunctionEnd %accepts_a_struct_fS = OpFunction %float None %43 %44 = OpFunctionParameter %_ptr_Function_S %45 = OpLabel %46 = OpAccessChain %_ptr_Function_float %44 %int_0 %47 = OpLoad %float %46 %48 = OpAccessChain %_ptr_Function_int %44 %int_1 %49 = OpLoad %int %48 %50 = OpConvertSToF %float %49 %51 = OpFAdd %float %47 %50 OpReturnValue %51 OpFunctionEnd %modifies_a_struct_vS = OpFunction %void None %52 %53 = OpFunctionParameter %_ptr_Function_S %54 = OpLabel %55 = OpAccessChain %_ptr_Function_float %53 %int_0 %56 = OpLoad %float %55 %57 = OpFAdd %float %56 %float_1 OpStore %55 %57 %58 = OpAccessChain %_ptr_Function_int %53 %int_1 %59 = OpLoad %int %58 %60 = OpIAdd %int %59 %int_1 OpStore %58 %60 OpReturn OpFunctionEnd %main = OpFunction %v4float None %61 %62 = OpFunctionParameter %_ptr_Function_v2float %63 = OpLabel %s_0 = OpVariable %_ptr_Function_S Function %x = OpVariable %_ptr_Function_float Function %67 = OpVariable %_ptr_Function_S Function %69 = OpVariable %_ptr_Function_S Function %expected = OpVariable %_ptr_Function_S Function %n1 = OpVariable %_ptr_Function_Nested Function %n2 = OpVariable %_ptr_Function_Nested Function %n3 = OpVariable %_ptr_Function_Nested Function %87 = OpVariable %_ptr_Function_S Function %c1 = OpVariable %_ptr_Function_Compound Function %c2 = OpVariable %_ptr_Function_Compound Function %c3 = OpVariable %_ptr_Function_Compound Function %valid = OpVariable %_ptr_Function_bool Function %249 = OpVariable %_ptr_Function_v4float Function %65 = OpFunctionCall %S %returns_a_struct_S OpStore %s_0 %65 OpStore %67 %65 %68 = OpFunctionCall %float %accepts_a_struct_fS %67 OpStore %x %68 OpStore %69 %65 %70 = OpFunctionCall %void %modifies_a_struct_vS %69 %71 = OpLoad %S %69 OpStore %s_0 %71 %73 = OpFunctionCall %S %constructs_a_struct_S OpStore %expected %73 %79 = OpFunctionCall %S %returns_a_struct_S %80 = OpAccessChain %_ptr_Function_S %n1 %int_0 OpStore %80 %79 %81 = OpAccessChain %_ptr_Function_S %n1 %int_0 %82 = OpLoad %S %81 %83 = OpAccessChain %_ptr_Function_S %n1 %int_1 OpStore %83 %82 %84 = OpLoad %Nested %n1 OpStore %n2 %84 OpStore %n3 %84 %85 = OpAccessChain %_ptr_Function_S %n3 %int_1 %86 = OpLoad %S %85 OpStore %87 %86 %88 = OpFunctionCall %void %modifies_a_struct_vS %87 %89 = OpLoad %S %87 OpStore %85 %89 %101 = OpCompositeConstruct %Compound %96 %100 OpStore %c1 %101 %103 = OpAccessChain %_ptr_Uniform_v4float %11 %int_1 %105 = OpLoad %v4float %103 %106 = OpCompositeExtract %float %105 1 %107 = OpCompositeConstruct %v4float %106 %float_2 %float_3 %float_4 %108 = OpCompositeConstruct %Compound %107 %100 OpStore %c2 %108 %110 = OpAccessChain %_ptr_Uniform_v4float %11 %int_1 %111 = OpLoad %v4float %110 %112 = OpCompositeExtract %float %111 0 %113 = OpCompositeConstruct %v4float %112 %float_2 %float_3 %float_4 %114 = OpCompositeConstruct %Compound %113 %100 OpStore %c3 %114 %119 = OpLoad %float %x %120 = OpFOrdEqual %bool %119 %float_3 OpSelectionMerge %122 None OpBranchConditional %120 %121 %122 %121 = OpLabel %123 = OpAccessChain %_ptr_Function_float %s_0 %int_0 %124 = OpLoad %float %123 %125 = OpFOrdEqual %bool %124 %float_2 OpBranch %122 %122 = OpLabel %126 = OpPhi %bool %false %63 %125 %121 OpSelectionMerge %128 None OpBranchConditional %126 %127 %128 %127 = OpLabel %129 = OpAccessChain %_ptr_Function_int %s_0 %int_1 %130 = OpLoad %int %129 %131 = OpIEqual %bool %130 %int_3 OpBranch %128 %128 = OpLabel %132 = OpPhi %bool %false %122 %131 %127 OpSelectionMerge %134 None OpBranchConditional %132 %133 %134 %133 = OpLabel %135 = OpLoad %S %s_0 %136 = OpLoad %S %expected %137 = OpCompositeExtract %float %135 0 %138 = OpCompositeExtract %float %136 0 %139 = OpFOrdEqual %bool %137 %138 %140 = OpCompositeExtract %int %135 1 %141 = OpCompositeExtract %int %136 1 %142 = OpIEqual %bool %140 %141 %143 = OpLogicalAnd %bool %142 %139 OpBranch %134 %134 = OpLabel %144 = OpPhi %bool %false %128 %143 %133 OpSelectionMerge %146 None OpBranchConditional %144 %145 %146 %145 = OpLabel %147 = OpLoad %S %s_0 %148 = OpCompositeConstruct %S %float_2 %int_3 %149 = OpCompositeExtract %float %147 0 %150 = OpFOrdEqual %bool %149 %float_2 %151 = OpCompositeExtract %int %147 1 %152 = OpIEqual %bool %151 %int_3 %153 = OpLogicalAnd %bool %152 %150 OpBranch %146 %146 = OpLabel %154 = OpPhi %bool %false %134 %153 %145 OpSelectionMerge %156 None OpBranchConditional %154 %155 %156 %155 = OpLabel %157 = OpLoad %S %s_0 %158 = OpFunctionCall %S %returns_a_struct_S %159 = OpCompositeExtract %float %157 0 %160 = OpCompositeExtract %float %158 0 %161 = OpFUnordNotEqual %bool %159 %160 %162 = OpCompositeExtract %int %157 1 %163 = OpCompositeExtract %int %158 1 %164 = OpINotEqual %bool %162 %163 %165 = OpLogicalOr %bool %164 %161 OpBranch %156 %156 = OpLabel %166 = OpPhi %bool %false %146 %165 %155 OpSelectionMerge %168 None OpBranchConditional %166 %167 %168 %167 = OpLabel %169 = OpLoad %Nested %n1 %170 = OpLoad %Nested %n2 %171 = OpCompositeExtract %S %169 0 %172 = OpCompositeExtract %S %170 0 %173 = OpCompositeExtract %float %171 0 %174 = OpCompositeExtract %float %172 0 %175 = OpFOrdEqual %bool %173 %174 %176 = OpCompositeExtract %int %171 1 %177 = OpCompositeExtract %int %172 1 %178 = OpIEqual %bool %176 %177 %179 = OpLogicalAnd %bool %178 %175 %180 = OpCompositeExtract %S %169 1 %181 = OpCompositeExtract %S %170 1 %182 = OpCompositeExtract %float %180 0 %183 = OpCompositeExtract %float %181 0 %184 = OpFOrdEqual %bool %182 %183 %185 = OpCompositeExtract %int %180 1 %186 = OpCompositeExtract %int %181 1 %187 = OpIEqual %bool %185 %186 %188 = OpLogicalAnd %bool %187 %184 %189 = OpLogicalAnd %bool %188 %179 OpBranch %168 %168 = OpLabel %190 = OpPhi %bool %false %156 %189 %167 OpSelectionMerge %192 None OpBranchConditional %190 %191 %192 %191 = OpLabel %193 = OpLoad %Nested %n1 %194 = OpLoad %Nested %n3 %195 = OpCompositeExtract %S %193 0 %196 = OpCompositeExtract %S %194 0 %197 = OpCompositeExtract %float %195 0 %198 = OpCompositeExtract %float %196 0 %199 = OpFUnordNotEqual %bool %197 %198 %200 = OpCompositeExtract %int %195 1 %201 = OpCompositeExtract %int %196 1 %202 = OpINotEqual %bool %200 %201 %203 = OpLogicalOr %bool %202 %199 %204 = OpCompositeExtract %S %193 1 %205 = OpCompositeExtract %S %194 1 %206 = OpCompositeExtract %float %204 0 %207 = OpCompositeExtract %float %205 0 %208 = OpFUnordNotEqual %bool %206 %207 %209 = OpCompositeExtract %int %204 1 %210 = OpCompositeExtract %int %205 1 %211 = OpINotEqual %bool %209 %210 %212 = OpLogicalOr %bool %211 %208 %213 = OpLogicalOr %bool %212 %203 OpBranch %192 %192 = OpLabel %214 = OpPhi %bool %false %168 %213 %191 OpSelectionMerge %216 None OpBranchConditional %214 %215 %216 %215 = OpLabel %217 = OpLoad %Nested %n3 %218 = OpCompositeConstruct %S %float_1 %int_2 %219 = OpCompositeConstruct %S %float_2 %int_3 %220 = OpCompositeConstruct %Nested %218 %219 %221 = OpCompositeExtract %S %217 0 %222 = OpCompositeExtract %float %221 0 %223 = OpFOrdEqual %bool %222 %float_1 %224 = OpCompositeExtract %int %221 1 %225 = OpIEqual %bool %224 %int_2 %226 = OpLogicalAnd %bool %225 %223 %227 = OpCompositeExtract %S %217 1 %228 = OpCompositeExtract %float %227 0 %229 = OpFOrdEqual %bool %228 %float_2 %230 = OpCompositeExtract %int %227 1 %231 = OpIEqual %bool %230 %int_3 %232 = OpLogicalAnd %bool %231 %229 %233 = OpLogicalAnd %bool %232 %226 OpBranch %216 %216 = OpLabel %234 = OpPhi %bool %false %192 %233 %215 OpSelectionMerge %236 None OpBranchConditional %234 %235 %236 %235 = OpLabel %237 = OpFOrdEqual %v4bool %96 %107 %239 = OpAll %bool %237 %241 = OpLogicalAnd %bool %true %239 OpBranch %236 %236 = OpLabel %242 = OpPhi %bool %false %216 %241 %235 OpSelectionMerge %244 None OpBranchConditional %242 %243 %244 %243 = OpLabel %245 = OpFUnordNotEqual %v4bool %107 %113 %246 = OpAny %bool %245 %247 = OpLogicalOr %bool %false %246 OpBranch %244 %244 = OpLabel %248 = OpPhi %bool %false %236 %247 %243 OpStore %valid %248 OpSelectionMerge %253 None OpBranchConditional %248 %251 %252 %251 = OpLabel %254 = OpAccessChain %_ptr_Uniform_v4float %11 %int_1 %255 = OpLoad %v4float %254 OpStore %249 %255 OpBranch %253 %252 = OpLabel %256 = OpAccessChain %_ptr_Uniform_v4float %11 %int_0 %257 = OpLoad %v4float %256 OpStore %249 %257 OpBranch %253 %253 = OpLabel %258 = OpLoad %v4float %249 OpReturnValue %258 OpFunctionEnd