OpCapability Shader %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %_entrypoint_v "_entrypoint" %sk_FragColor %sk_Clockwise OpExecutionMode %_entrypoint_v OriginUpperLeft OpName %sk_FragColor "sk_FragColor" OpName %sk_Clockwise "sk_Clockwise" 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 %valid "valid" OpDecorate %sk_FragColor RelaxedPrecision OpDecorate %sk_FragColor Location 0 OpDecorate %sk_FragColor Index 0 OpDecorate %sk_Clockwise BuiltIn FrontFacing OpMemberDecorate %_UniformBuffer 0 Offset 0 OpMemberDecorate %_UniformBuffer 0 RelaxedPrecision OpMemberDecorate %_UniformBuffer 1 Offset 16 OpMemberDecorate %_UniformBuffer 1 RelaxedPrecision OpDecorate %_UniformBuffer Block OpDecorate %14 Binding 0 OpDecorate %14 DescriptorSet 0 OpMemberDecorate %S 0 Offset 0 OpMemberDecorate %S 1 Offset 4 OpDecorate %36 RelaxedPrecision OpDecorate %64 RelaxedPrecision OpMemberDecorate %Nested 0 Offset 0 OpMemberDecorate %Nested 0 RelaxedPrecision OpMemberDecorate %Nested 1 Offset 16 OpMemberDecorate %Nested 1 RelaxedPrecision OpDecorate %78 RelaxedPrecision OpDecorate %80 RelaxedPrecision OpDecorate %104 RelaxedPrecision OpDecorate %105 RelaxedPrecision OpDecorate %116 RelaxedPrecision OpDecorate %128 RelaxedPrecision OpDecorate %140 RelaxedPrecision OpDecorate %141 RelaxedPrecision OpDecorate %164 RelaxedPrecision OpDecorate %165 RelaxedPrecision OpDecorate %188 RelaxedPrecision OpDecorate %212 RelaxedPrecision OpDecorate %220 RelaxedPrecision OpDecorate %222 RelaxedPrecision OpDecorate %223 RelaxedPrecision %float = OpTypeFloat 32 %v4float = OpTypeVector %float 4 %_ptr_Output_v4float = OpTypePointer Output %v4float %sk_FragColor = OpVariable %_ptr_Output_v4float Output %bool = OpTypeBool %_ptr_Input_bool = OpTypePointer Input %bool %sk_Clockwise = OpVariable %_ptr_Input_bool Input %_UniformBuffer = OpTypeStruct %v4float %v4float %_ptr_Uniform__UniformBuffer = OpTypePointer Uniform %_UniformBuffer %14 = OpVariable %_ptr_Uniform__UniformBuffer Uniform %void = OpTypeVoid %19 = OpTypeFunction %void %int = OpTypeInt 32 1 %S = OpTypeStruct %float %int %24 = 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 %41 = OpTypeFunction %float %_ptr_Function_S %50 = OpTypeFunction %void %_ptr_Function_S %59 = OpTypeFunction %v4float %Nested = OpTypeStruct %S %S %_ptr_Function_Nested = OpTypePointer Function %Nested %_ptr_Function_bool = OpTypePointer Function %bool %false = OpConstantFalse %bool %float_3 = OpConstant %float 3 %_ptr_Function_v4float = OpTypePointer Function %v4float %_ptr_Uniform_v4float = OpTypePointer Uniform %v4float %_entrypoint_v = OpFunction %void None %19 %20 = OpLabel %21 = OpFunctionCall %v4float %main OpStore %sk_FragColor %21 OpReturn OpFunctionEnd %returns_a_struct_S = OpFunction %S None %24 %25 = OpLabel %s = OpVariable %_ptr_Function_S Function %30 = OpAccessChain %_ptr_Function_float %s %int_0 OpStore %30 %float_1 %34 = OpAccessChain %_ptr_Function_int %s %int_1 OpStore %34 %int_2 %36 = OpLoad %S %s OpReturnValue %36 OpFunctionEnd %constructs_a_struct_S = OpFunction %S None %24 %37 = OpLabel %40 = OpCompositeConstruct %S %float_2 %int_3 OpReturnValue %40 OpFunctionEnd %accepts_a_struct_fS = OpFunction %float None %41 %42 = OpFunctionParameter %_ptr_Function_S %43 = OpLabel %44 = OpAccessChain %_ptr_Function_float %42 %int_0 %45 = OpLoad %float %44 %46 = OpAccessChain %_ptr_Function_int %42 %int_1 %47 = OpLoad %int %46 %48 = OpConvertSToF %float %47 %49 = OpFAdd %float %45 %48 OpReturnValue %49 OpFunctionEnd %modifies_a_struct_vS = OpFunction %void None %50 %51 = OpFunctionParameter %_ptr_Function_S %52 = OpLabel %53 = OpAccessChain %_ptr_Function_float %51 %int_0 %54 = OpLoad %float %53 %55 = OpFAdd %float %54 %float_1 OpStore %53 %55 %56 = OpAccessChain %_ptr_Function_int %51 %int_1 %57 = OpLoad %int %56 %58 = OpIAdd %int %57 %int_1 OpStore %56 %58 OpReturn OpFunctionEnd %main = OpFunction %v4float None %59 %60 = OpLabel %s_0 = OpVariable %_ptr_Function_S Function %x = OpVariable %_ptr_Function_float Function %65 = 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 %81 = OpVariable %_ptr_Function_S Function %valid = OpVariable %_ptr_Function_bool Function %213 = OpVariable %_ptr_Function_v4float Function %62 = OpFunctionCall %S %returns_a_struct_S OpStore %s_0 %62 %64 = OpLoad %S %s_0 OpStore %65 %64 %66 = OpFunctionCall %float %accepts_a_struct_fS %65 OpStore %x %66 %67 = OpFunctionCall %void %modifies_a_struct_vS %s_0 %69 = OpFunctionCall %S %constructs_a_struct_S OpStore %expected %69 %75 = OpFunctionCall %S %returns_a_struct_S %76 = OpAccessChain %_ptr_Function_S %n1 %int_1 OpStore %76 %75 %77 = OpAccessChain %_ptr_Function_S %n1 %int_0 OpStore %77 %75 %78 = OpLoad %Nested %n1 OpStore %n2 %78 OpStore %n3 %78 %79 = OpAccessChain %_ptr_Function_S %n3 %int_1 %80 = OpLoad %S %79 OpStore %81 %80 %82 = OpFunctionCall %void %modifies_a_struct_vS %81 %83 = OpLoad %S %81 OpStore %79 %83 %87 = OpLoad %float %x %89 = OpFOrdEqual %bool %87 %float_3 OpSelectionMerge %91 None OpBranchConditional %89 %90 %91 %90 = OpLabel %92 = OpAccessChain %_ptr_Function_float %s_0 %int_0 %93 = OpLoad %float %92 %94 = OpFOrdEqual %bool %93 %float_2 OpBranch %91 %91 = OpLabel %95 = OpPhi %bool %false %60 %94 %90 OpSelectionMerge %97 None OpBranchConditional %95 %96 %97 %96 = OpLabel %98 = OpAccessChain %_ptr_Function_int %s_0 %int_1 %99 = OpLoad %int %98 %100 = OpIEqual %bool %99 %int_3 OpBranch %97 %97 = OpLabel %101 = OpPhi %bool %false %91 %100 %96 OpSelectionMerge %103 None OpBranchConditional %101 %102 %103 %102 = OpLabel %104 = OpLoad %S %s_0 %105 = OpLoad %S %expected %106 = OpCompositeExtract %float %104 0 %107 = OpCompositeExtract %float %105 0 %108 = OpFOrdEqual %bool %106 %107 %109 = OpCompositeExtract %int %104 1 %110 = OpCompositeExtract %int %105 1 %111 = OpIEqual %bool %109 %110 %112 = OpLogicalAnd %bool %111 %108 OpBranch %103 %103 = OpLabel %113 = OpPhi %bool %false %97 %112 %102 OpSelectionMerge %115 None OpBranchConditional %113 %114 %115 %114 = OpLabel %116 = OpLoad %S %s_0 %117 = OpCompositeConstruct %S %float_2 %int_3 %118 = OpCompositeExtract %float %116 0 %119 = OpCompositeExtract %float %117 0 %120 = OpFOrdEqual %bool %118 %119 %121 = OpCompositeExtract %int %116 1 %122 = OpCompositeExtract %int %117 1 %123 = OpIEqual %bool %121 %122 %124 = OpLogicalAnd %bool %123 %120 OpBranch %115 %115 = OpLabel %125 = OpPhi %bool %false %103 %124 %114 OpSelectionMerge %127 None OpBranchConditional %125 %126 %127 %126 = OpLabel %128 = OpLoad %S %s_0 %129 = OpFunctionCall %S %returns_a_struct_S %130 = OpCompositeExtract %float %128 0 %131 = OpCompositeExtract %float %129 0 %132 = OpFOrdNotEqual %bool %130 %131 %133 = OpCompositeExtract %int %128 1 %134 = OpCompositeExtract %int %129 1 %135 = OpINotEqual %bool %133 %134 %136 = OpLogicalOr %bool %135 %132 OpBranch %127 %127 = OpLabel %137 = OpPhi %bool %false %115 %136 %126 OpSelectionMerge %139 None OpBranchConditional %137 %138 %139 %138 = OpLabel %140 = OpLoad %Nested %n1 %141 = OpLoad %Nested %n2 %142 = OpCompositeExtract %S %140 0 %143 = OpCompositeExtract %S %141 0 %144 = OpCompositeExtract %float %142 0 %145 = OpCompositeExtract %float %143 0 %146 = OpFOrdEqual %bool %144 %145 %147 = OpCompositeExtract %int %142 1 %148 = OpCompositeExtract %int %143 1 %149 = OpIEqual %bool %147 %148 %150 = OpLogicalAnd %bool %149 %146 %151 = OpCompositeExtract %S %140 1 %152 = OpCompositeExtract %S %141 1 %153 = OpCompositeExtract %float %151 0 %154 = OpCompositeExtract %float %152 0 %155 = OpFOrdEqual %bool %153 %154 %156 = OpCompositeExtract %int %151 1 %157 = OpCompositeExtract %int %152 1 %158 = OpIEqual %bool %156 %157 %159 = OpLogicalAnd %bool %158 %155 %160 = OpLogicalAnd %bool %159 %150 OpBranch %139 %139 = OpLabel %161 = OpPhi %bool %false %127 %160 %138 OpSelectionMerge %163 None OpBranchConditional %161 %162 %163 %162 = OpLabel %164 = OpLoad %Nested %n1 %165 = OpLoad %Nested %n3 %166 = OpCompositeExtract %S %164 0 %167 = OpCompositeExtract %S %165 0 %168 = OpCompositeExtract %float %166 0 %169 = OpCompositeExtract %float %167 0 %170 = OpFOrdNotEqual %bool %168 %169 %171 = OpCompositeExtract %int %166 1 %172 = OpCompositeExtract %int %167 1 %173 = OpINotEqual %bool %171 %172 %174 = OpLogicalOr %bool %173 %170 %175 = OpCompositeExtract %S %164 1 %176 = OpCompositeExtract %S %165 1 %177 = OpCompositeExtract %float %175 0 %178 = OpCompositeExtract %float %176 0 %179 = OpFOrdNotEqual %bool %177 %178 %180 = OpCompositeExtract %int %175 1 %181 = OpCompositeExtract %int %176 1 %182 = OpINotEqual %bool %180 %181 %183 = OpLogicalOr %bool %182 %179 %184 = OpLogicalOr %bool %183 %174 OpBranch %163 %163 = OpLabel %185 = OpPhi %bool %false %139 %184 %162 OpSelectionMerge %187 None OpBranchConditional %185 %186 %187 %186 = OpLabel %188 = OpLoad %Nested %n3 %189 = OpCompositeConstruct %S %float_1 %int_2 %190 = OpCompositeConstruct %S %float_2 %int_3 %191 = OpCompositeConstruct %Nested %189 %190 %192 = OpCompositeExtract %S %188 0 %193 = OpCompositeExtract %S %191 0 %194 = OpCompositeExtract %float %192 0 %195 = OpCompositeExtract %float %193 0 %196 = OpFOrdEqual %bool %194 %195 %197 = OpCompositeExtract %int %192 1 %198 = OpCompositeExtract %int %193 1 %199 = OpIEqual %bool %197 %198 %200 = OpLogicalAnd %bool %199 %196 %201 = OpCompositeExtract %S %188 1 %202 = OpCompositeExtract %S %191 1 %203 = OpCompositeExtract %float %201 0 %204 = OpCompositeExtract %float %202 0 %205 = OpFOrdEqual %bool %203 %204 %206 = OpCompositeExtract %int %201 1 %207 = OpCompositeExtract %int %202 1 %208 = OpIEqual %bool %206 %207 %209 = OpLogicalAnd %bool %208 %205 %210 = OpLogicalAnd %bool %209 %200 OpBranch %187 %187 = OpLabel %211 = OpPhi %bool %false %163 %210 %186 OpStore %valid %211 %212 = OpLoad %bool %valid OpSelectionMerge %217 None OpBranchConditional %212 %215 %216 %215 = OpLabel %218 = OpAccessChain %_ptr_Uniform_v4float %14 %int_1 %220 = OpLoad %v4float %218 OpStore %213 %220 OpBranch %217 %216 = OpLabel %221 = OpAccessChain %_ptr_Uniform_v4float %14 %int_0 %222 = OpLoad %v4float %221 OpStore %213 %222 OpBranch %217 %217 = OpLabel %223 = OpLoad %v4float %213 OpReturnValue %223 OpFunctionEnd