Replace composite vectors of literals with OpConstantComposite.

Some GPUs (Adrenos in particular) perform noticeably better when we
use OpConstantComposite instead of OpCompositeConstruct. This also gives
us some deduplication of redundant ops.

Change-Id: I53b7a3e1cf61e51647a661a08ff4c7b53ee60f10
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/528636
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
This commit is contained in:
John Stiles 2022-04-07 22:05:30 -04:00 committed by SkCQ
parent c002866c71
commit 699dd5ae4a
19 changed files with 3036 additions and 3163 deletions

View File

@ -1280,6 +1280,10 @@ SpvId SPIRVCodeGenerator::writeConstantVector(const AnyConstructor& c) {
key.fValueId[n] = this->writeLiteral(*slotVal, scalarType);
}
return this->writeConstantVector(type, key);
}
SpvId SPIRVCodeGenerator::writeConstantVector(const Type& type, const SPIRVVectorConstant& key) {
// Check to see if we've already synthesized this vector constant.
if (SpvId* entry = fVectorConstants.find(key)) {
return *entry;
@ -1689,12 +1693,48 @@ SpvId SPIRVCodeGenerator::writeVectorConstructor(const ConstructorCompound& c, O
return this->writeComposite(arguments, type, out);
}
SpvId SPIRVCodeGenerator::writeCompositeAsConstant(const std::vector<SpvId>& arguments,
const Type& type,
OutputStream& out) {
if (!type.isVector()) {
// Only vectors are allowed.
return (SpvId)-1;
}
SPIRVVectorConstant key = {/*fTypeId=*/(SpvId)-1,
/*fValueId=*/{(SpvId)-1, (SpvId)-1, (SpvId)-1, (SpvId)-1}};
for (size_t index = 0; index < arguments.size(); ++index) {
// See if this argument is a numeric constant by scanning fNumberConstants.
SpvId arg = arguments[index];
bool found = false;
for (const auto& [k, v] : fNumberConstants) {
if (v == arg) {
found = true;
break;
}
}
if (!found) {
// This argument isn't a literal.
return (SpvId)-1;
}
key.fValueId[index] = arg;
}
// We found a composite that's composed entirely of literals. Write an OpConstantComposite.
key.fTypeId = this->getType(type);
return this->writeConstantVector(type, key);
}
SpvId SPIRVCodeGenerator::writeComposite(const std::vector<SpvId>& arguments,
const Type& type,
OutputStream& out) {
// If this is a vector composed entirely of literals, write a constant.
SpvId result = this->writeCompositeAsConstant(arguments, type, out);
if (result != (SpvId)-1) {
return result;
}
SkASSERT(arguments.size() == (type.isStruct() ? type.fields().size() : (size_t)type.columns()));
SpvId result = this->nextId(&type);
result = this->nextId(&type);
this->writeOpCode(SpvOpCompositeConstruct, 3 + (int32_t) arguments.size(), out);
this->writeWord(this->getType(type), out);
this->writeWord(result, out);

View File

@ -268,6 +268,8 @@ private:
SpvId writeConstantVector(const AnyConstructor& c);
SpvId writeConstantVector(const Type& type, const SPIRVVectorConstant& key);
SpvId writeScalarToMatrixSplat(const Type& matrixType, SpvId scalarId, OutputStream& out);
SpvId writeFloatConstructor(const AnyConstructor& c, OutputStream& out);
@ -327,6 +329,10 @@ private:
SpvId writeConstructorCompoundCast(const ConstructorCompoundCast& c, OutputStream& out);
SpvId writeCompositeAsConstant(const std::vector<SpvId>& arguments,
const Type& type,
OutputStream& out);
SpvId writeComposite(const std::vector<SpvId>& arguments, const Type& type, OutputStream& out);
SpvId writeFieldAccess(const FieldAccess& f, OutputStream& out);

View File

@ -41,28 +41,19 @@ OpDecorate %63 RelaxedPrecision
OpDecorate %64 RelaxedPrecision
OpDecorate %66 RelaxedPrecision
OpDecorate %67 RelaxedPrecision
OpDecorate %68 RelaxedPrecision
OpDecorate %69 RelaxedPrecision
OpDecorate %82 RelaxedPrecision
OpDecorate %83 RelaxedPrecision
OpDecorate %84 RelaxedPrecision
OpDecorate %85 RelaxedPrecision
OpDecorate %86 RelaxedPrecision
OpDecorate %105 RelaxedPrecision
OpDecorate %106 RelaxedPrecision
OpDecorate %107 RelaxedPrecision
OpDecorate %108 RelaxedPrecision
OpDecorate %109 RelaxedPrecision
OpDecorate %110 RelaxedPrecision
OpDecorate %80 RelaxedPrecision
OpDecorate %81 RelaxedPrecision
OpDecorate %100 RelaxedPrecision
OpDecorate %101 RelaxedPrecision
OpDecorate %125 RelaxedPrecision
OpDecorate %130 RelaxedPrecision
OpDecorate %131 RelaxedPrecision
OpDecorate %132 RelaxedPrecision
OpDecorate %133 RelaxedPrecision
OpDecorate %134 RelaxedPrecision
OpDecorate %139 RelaxedPrecision
OpDecorate %140 RelaxedPrecision
OpDecorate %141 RelaxedPrecision
OpDecorate %142 RelaxedPrecision
OpDecorate %143 RelaxedPrecision
OpDecorate %168 RelaxedPrecision
OpDecorate %171 RelaxedPrecision
OpDecorate %172 RelaxedPrecision
OpDecorate %159 RelaxedPrecision
OpDecorate %162 RelaxedPrecision
OpDecorate %163 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -86,6 +77,8 @@ OpDecorate %172 RelaxedPrecision
%float_1 = OpConstant %float 1
%float_1_5 = OpConstant %float 1.5
%float_n0_5 = OpConstant %float -0.5
%33 = OpConstantComposite %v2float %float_n2 %float_1
%34 = OpConstantComposite %v2float %float_1_5 %float_n0_5
%v3float = OpTypeVector %float 3
%mat3v3float = OpTypeMatrix %v3float 3
%_ptr_Function_mat3v3float = OpTypePointer Function %mat3v3float
@ -97,6 +90,9 @@ OpDecorate %172 RelaxedPrecision
%float_n4 = OpConstant %float -4
%float_n5 = OpConstant %float -5
%float_4 = OpConstant %float 4
%48 = OpConstantComposite %v3float %float_n24 %float_18 %float_5
%49 = OpConstantComposite %v3float %float_20 %float_n15 %float_n4
%50 = OpConstantComposite %v3float %float_n5 %float_4 %float_1
%mat4v4float = OpTypeMatrix %v4float 4
%_ptr_Function_mat4v4float = OpTypePointer Function %mat4v4float
%float_0_5 = OpConstant %float 0.5
@ -104,6 +100,10 @@ OpDecorate %172 RelaxedPrecision
%float_n1 = OpConstant %float -1
%float_2 = OpConstant %float 2
%float_3 = OpConstant %float 3
%60 = OpConstantComposite %v4float %float_n2 %float_n0_5 %float_1 %float_0_5
%61 = OpConstantComposite %v4float %float_1 %float_0_5 %float_0 %float_n0_5
%62 = OpConstantComposite %v4float %float_n8 %float_n1 %float_2 %float_2
%63 = OpConstantComposite %v4float %float_3 %float_0_5 %float_n1 %float_n0_5
%false = OpConstantFalse %bool
%v2bool = OpTypeVector %bool 2
%v3bool = OpTypeVector %bool 3
@ -112,6 +112,9 @@ OpDecorate %172 RelaxedPrecision
%float_7 = OpConstant %float 7
%float_8 = OpConstant %float 8
%float_9 = OpConstant %float 9
%130 = OpConstantComposite %v3float %float_1 %float_2 %float_3
%131 = OpConstantComposite %v3float %float_4 %float_5 %float_6
%132 = OpConstantComposite %v3float %float_7 %float_8 %float_9
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%int = OpTypeInt 32 1
@ -131,130 +134,109 @@ OpFunctionEnd
%inv2x2 = OpVariable %_ptr_Function_mat2v2float Function
%inv3x3 = OpVariable %_ptr_Function_mat3v3float Function
%inv4x4 = OpVariable %_ptr_Function_mat4v4float Function
%159 = OpVariable %_ptr_Function_v4float Function
%33 = OpCompositeConstruct %v2float %float_n2 %float_1
%34 = OpCompositeConstruct %v2float %float_1_5 %float_n0_5
%150 = OpVariable %_ptr_Function_v4float Function
%35 = OpCompositeConstruct %mat2v2float %33 %34
OpStore %inv2x2 %35
%48 = OpCompositeConstruct %v3float %float_n24 %float_18 %float_5
%49 = OpCompositeConstruct %v3float %float_20 %float_n15 %float_n4
%50 = OpCompositeConstruct %v3float %float_n5 %float_4 %float_1
%51 = OpCompositeConstruct %mat3v3float %48 %49 %50
OpStore %inv3x3 %51
%60 = OpCompositeConstruct %v4float %float_n2 %float_n0_5 %float_1 %float_0_5
%61 = OpCompositeConstruct %v4float %float_1 %float_0_5 %float_0 %float_n0_5
%62 = OpCompositeConstruct %v4float %float_n8 %float_n1 %float_2 %float_2
%63 = OpCompositeConstruct %v4float %float_3 %float_0_5 %float_n1 %float_n0_5
%64 = OpCompositeConstruct %mat4v4float %60 %61 %62 %63
OpStore %inv4x4 %64
%66 = OpCompositeConstruct %v2float %float_n2 %float_1
%67 = OpCompositeConstruct %v2float %float_1_5 %float_n0_5
%68 = OpCompositeConstruct %mat2v2float %66 %67
%69 = OpLoad %mat2v2float %inv2x2
%71 = OpCompositeExtract %v2float %68 0
%72 = OpCompositeExtract %v2float %69 0
%73 = OpFOrdEqual %v2bool %71 %72
%74 = OpAll %bool %73
%75 = OpCompositeExtract %v2float %68 1
%76 = OpCompositeExtract %v2float %69 1
%77 = OpFOrdEqual %v2bool %75 %76
%78 = OpAll %bool %77
%79 = OpLogicalAnd %bool %74 %78
OpSelectionMerge %81 None
OpBranchConditional %79 %80 %81
%80 = OpLabel
%82 = OpCompositeConstruct %v3float %float_n24 %float_18 %float_5
%83 = OpCompositeConstruct %v3float %float_20 %float_n15 %float_n4
%84 = OpCompositeConstruct %v3float %float_n5 %float_4 %float_1
%85 = OpCompositeConstruct %mat3v3float %82 %83 %84
%86 = OpLoad %mat3v3float %inv3x3
%88 = OpCompositeExtract %v3float %85 0
%89 = OpCompositeExtract %v3float %86 0
%90 = OpFOrdEqual %v3bool %88 %89
%91 = OpAll %bool %90
%92 = OpCompositeExtract %v3float %85 1
%93 = OpCompositeExtract %v3float %86 1
%66 = OpCompositeConstruct %mat2v2float %33 %34
%67 = OpLoad %mat2v2float %inv2x2
%69 = OpCompositeExtract %v2float %66 0
%70 = OpCompositeExtract %v2float %67 0
%71 = OpFOrdEqual %v2bool %69 %70
%72 = OpAll %bool %71
%73 = OpCompositeExtract %v2float %66 1
%74 = OpCompositeExtract %v2float %67 1
%75 = OpFOrdEqual %v2bool %73 %74
%76 = OpAll %bool %75
%77 = OpLogicalAnd %bool %72 %76
OpSelectionMerge %79 None
OpBranchConditional %77 %78 %79
%78 = OpLabel
%80 = OpCompositeConstruct %mat3v3float %48 %49 %50
%81 = OpLoad %mat3v3float %inv3x3
%83 = OpCompositeExtract %v3float %80 0
%84 = OpCompositeExtract %v3float %81 0
%85 = OpFOrdEqual %v3bool %83 %84
%86 = OpAll %bool %85
%87 = OpCompositeExtract %v3float %80 1
%88 = OpCompositeExtract %v3float %81 1
%89 = OpFOrdEqual %v3bool %87 %88
%90 = OpAll %bool %89
%91 = OpLogicalAnd %bool %86 %90
%92 = OpCompositeExtract %v3float %80 2
%93 = OpCompositeExtract %v3float %81 2
%94 = OpFOrdEqual %v3bool %92 %93
%95 = OpAll %bool %94
%96 = OpLogicalAnd %bool %91 %95
%97 = OpCompositeExtract %v3float %85 2
%98 = OpCompositeExtract %v3float %86 2
%99 = OpFOrdEqual %v3bool %97 %98
%100 = OpAll %bool %99
%101 = OpLogicalAnd %bool %96 %100
OpBranch %81
%81 = OpLabel
%102 = OpPhi %bool %false %25 %101 %80
OpSelectionMerge %104 None
OpBranchConditional %102 %103 %104
%103 = OpLabel
%105 = OpCompositeConstruct %v4float %float_n2 %float_n0_5 %float_1 %float_0_5
%106 = OpCompositeConstruct %v4float %float_1 %float_0_5 %float_0 %float_n0_5
%107 = OpCompositeConstruct %v4float %float_n8 %float_n1 %float_2 %float_2
%108 = OpCompositeConstruct %v4float %float_3 %float_0_5 %float_n1 %float_n0_5
%109 = OpCompositeConstruct %mat4v4float %105 %106 %107 %108
%110 = OpLoad %mat4v4float %inv4x4
%112 = OpCompositeExtract %v4float %109 0
%113 = OpCompositeExtract %v4float %110 0
OpBranch %79
%79 = OpLabel
%97 = OpPhi %bool %false %25 %96 %78
OpSelectionMerge %99 None
OpBranchConditional %97 %98 %99
%98 = OpLabel
%100 = OpCompositeConstruct %mat4v4float %60 %61 %62 %63
%101 = OpLoad %mat4v4float %inv4x4
%103 = OpCompositeExtract %v4float %100 0
%104 = OpCompositeExtract %v4float %101 0
%105 = OpFOrdEqual %v4bool %103 %104
%106 = OpAll %bool %105
%107 = OpCompositeExtract %v4float %100 1
%108 = OpCompositeExtract %v4float %101 1
%109 = OpFOrdEqual %v4bool %107 %108
%110 = OpAll %bool %109
%111 = OpLogicalAnd %bool %106 %110
%112 = OpCompositeExtract %v4float %100 2
%113 = OpCompositeExtract %v4float %101 2
%114 = OpFOrdEqual %v4bool %112 %113
%115 = OpAll %bool %114
%116 = OpCompositeExtract %v4float %109 1
%117 = OpCompositeExtract %v4float %110 1
%118 = OpFOrdEqual %v4bool %116 %117
%119 = OpAll %bool %118
%120 = OpLogicalAnd %bool %115 %119
%121 = OpCompositeExtract %v4float %109 2
%122 = OpCompositeExtract %v4float %110 2
%123 = OpFOrdEqual %v4bool %121 %122
%124 = OpAll %bool %123
%125 = OpLogicalAnd %bool %120 %124
%126 = OpCompositeExtract %v4float %109 3
%127 = OpCompositeExtract %v4float %110 3
%128 = OpFOrdEqual %v4bool %126 %127
%129 = OpAll %bool %128
%130 = OpLogicalAnd %bool %125 %129
OpBranch %104
%104 = OpLabel
%131 = OpPhi %bool %false %81 %130 %103
OpSelectionMerge %133 None
OpBranchConditional %131 %132 %133
%132 = OpLabel
%139 = OpCompositeConstruct %v3float %float_1 %float_2 %float_3
%140 = OpCompositeConstruct %v3float %float_4 %float_5 %float_6
%141 = OpCompositeConstruct %v3float %float_7 %float_8 %float_9
%142 = OpCompositeConstruct %mat3v3float %139 %140 %141
%134 = OpExtInst %mat3v3float %1 MatrixInverse %142
%143 = OpLoad %mat3v3float %inv3x3
%144 = OpCompositeExtract %v3float %134 0
%145 = OpCompositeExtract %v3float %143 0
%116 = OpLogicalAnd %bool %111 %115
%117 = OpCompositeExtract %v4float %100 3
%118 = OpCompositeExtract %v4float %101 3
%119 = OpFOrdEqual %v4bool %117 %118
%120 = OpAll %bool %119
%121 = OpLogicalAnd %bool %116 %120
OpBranch %99
%99 = OpLabel
%122 = OpPhi %bool %false %79 %121 %98
OpSelectionMerge %124 None
OpBranchConditional %122 %123 %124
%123 = OpLabel
%133 = OpCompositeConstruct %mat3v3float %130 %131 %132
%125 = OpExtInst %mat3v3float %1 MatrixInverse %133
%134 = OpLoad %mat3v3float %inv3x3
%135 = OpCompositeExtract %v3float %125 0
%136 = OpCompositeExtract %v3float %134 0
%137 = OpFUnordNotEqual %v3bool %135 %136
%138 = OpAny %bool %137
%139 = OpCompositeExtract %v3float %125 1
%140 = OpCompositeExtract %v3float %134 1
%141 = OpFUnordNotEqual %v3bool %139 %140
%142 = OpAny %bool %141
%143 = OpLogicalOr %bool %138 %142
%144 = OpCompositeExtract %v3float %125 2
%145 = OpCompositeExtract %v3float %134 2
%146 = OpFUnordNotEqual %v3bool %144 %145
%147 = OpAny %bool %146
%148 = OpCompositeExtract %v3float %134 1
%149 = OpCompositeExtract %v3float %143 1
%150 = OpFUnordNotEqual %v3bool %148 %149
%151 = OpAny %bool %150
%152 = OpLogicalOr %bool %147 %151
%153 = OpCompositeExtract %v3float %134 2
%154 = OpCompositeExtract %v3float %143 2
%155 = OpFUnordNotEqual %v3bool %153 %154
%156 = OpAny %bool %155
%157 = OpLogicalOr %bool %152 %156
OpBranch %133
%133 = OpLabel
%158 = OpPhi %bool %false %104 %157 %132
OpSelectionMerge %163 None
OpBranchConditional %158 %161 %162
%161 = OpLabel
%164 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%168 = OpLoad %v4float %164
OpStore %159 %168
OpBranch %163
%162 = OpLabel
%169 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%171 = OpLoad %v4float %169
OpStore %159 %171
OpBranch %163
%163 = OpLabel
%172 = OpLoad %v4float %159
OpReturnValue %172
%148 = OpLogicalOr %bool %143 %147
OpBranch %124
%124 = OpLabel
%149 = OpPhi %bool %false %99 %148 %123
OpSelectionMerge %154 None
OpBranchConditional %149 %152 %153
%152 = OpLabel
%155 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%159 = OpLoad %v4float %155
OpStore %150 %159
OpBranch %154
%153 = OpLabel
%160 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%162 = OpLoad %v4float %160
OpStore %150 %162
OpBranch %154
%154 = OpLabel
%163 = OpLoad %v4float %150
OpReturnValue %163
OpFunctionEnd

View File

@ -51,20 +51,16 @@ OpDecorate %71 RelaxedPrecision
OpDecorate %72 RelaxedPrecision
OpDecorate %73 RelaxedPrecision
OpDecorate %74 RelaxedPrecision
OpDecorate %75 RelaxedPrecision
OpDecorate %76 RelaxedPrecision
OpDecorate %78 RelaxedPrecision
OpDecorate %79 RelaxedPrecision
OpDecorate %80 RelaxedPrecision
OpDecorate %81 RelaxedPrecision
OpDecorate %111 RelaxedPrecision
OpDecorate %118 RelaxedPrecision
OpDecorate %119 RelaxedPrecision
OpDecorate %120 RelaxedPrecision
OpDecorate %121 RelaxedPrecision
OpDecorate %77 RelaxedPrecision
OpDecorate %107 RelaxedPrecision
OpDecorate %114 RelaxedPrecision
OpDecorate %115 RelaxedPrecision
OpDecorate %116 RelaxedPrecision
OpDecorate %117 RelaxedPrecision
OpDecorate %142 RelaxedPrecision
OpDecorate %145 RelaxedPrecision
OpDecorate %146 RelaxedPrecision
OpDecorate %149 RelaxedPrecision
OpDecorate %150 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -89,6 +85,8 @@ OpDecorate %150 RelaxedPrecision
%float_5 = OpConstant %float 5
%float_10 = OpConstant %float 10
%float_15 = OpConstant %float 15
%34 = OpConstantComposite %v2float %float_0 %float_5
%35 = OpConstantComposite %v2float %float_10 %float_15
%_ptr_Uniform_mat2v2float = OpTypePointer Uniform %mat2v2float
%int = OpTypeInt 32 1
%int_2 = OpConstant %int 2
@ -97,15 +95,21 @@ OpDecorate %150 RelaxedPrecision
%_ptr_Uniform_mat3v3float = OpTypePointer Uniform %mat3v3float
%int_3 = OpConstant %int 3
%float_2 = OpConstant %float 2
%63 = OpConstantComposite %v3float %float_2 %float_2 %float_2
%false = OpConstantFalse %bool
%v2bool = OpTypeVector %bool 2
%float_4 = OpConstant %float 4
%92 = OpConstantComposite %v2float %float_1 %float_0
%93 = OpConstantComposite %v2float %float_0 %float_4
%float_6 = OpConstant %float 6
%float_8 = OpConstant %float 8
%float_12 = OpConstant %float 12
%float_14 = OpConstant %float 14
%float_16 = OpConstant %float 16
%float_18 = OpConstant %float 18
%114 = OpConstantComposite %v3float %float_2 %float_4 %float_6
%115 = OpConstantComposite %v3float %float_8 %float_10 %float_12
%116 = OpConstantComposite %v3float %float_14 %float_16 %float_18
%v3bool = OpTypeVector %bool 3
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
@ -125,9 +129,7 @@ OpFunctionEnd
%h22 = OpVariable %_ptr_Function_mat2v2float Function
%f22 = OpVariable %_ptr_Function_mat2v2float Function
%h33 = OpVariable %_ptr_Function_mat3v3float Function
%138 = OpVariable %_ptr_Function_v4float Function
%34 = OpCompositeConstruct %v2float %float_0 %float_5
%35 = OpCompositeConstruct %v2float %float_10 %float_15
%134 = OpVariable %_ptr_Function_v4float Function
%36 = OpCompositeConstruct %mat2v2float %34 %35
OpStore %h22 %36
%39 = OpAccessChain %_ptr_Uniform_mat2v2float %10 %int_2
@ -145,91 +147,81 @@ OpStore %h22 %36
OpStore %f22 %54
%58 = OpAccessChain %_ptr_Uniform_mat3v3float %10 %int_3
%61 = OpLoad %mat3v3float %58
%63 = OpCompositeConstruct %v3float %float_2 %float_2 %float_2
%64 = OpCompositeConstruct %v3float %float_2 %float_2 %float_2
%65 = OpCompositeConstruct %v3float %float_2 %float_2 %float_2
%66 = OpCompositeConstruct %mat3v3float %63 %64 %65
%67 = OpCompositeExtract %v3float %61 0
%68 = OpCompositeExtract %v3float %66 0
%69 = OpFMul %v3float %67 %68
%70 = OpCompositeExtract %v3float %61 1
%71 = OpCompositeExtract %v3float %66 1
%72 = OpFMul %v3float %70 %71
%73 = OpCompositeExtract %v3float %61 2
%74 = OpCompositeExtract %v3float %66 2
%75 = OpFMul %v3float %73 %74
%76 = OpCompositeConstruct %mat3v3float %69 %72 %75
OpStore %h33 %76
%78 = OpLoad %mat2v2float %h22
%79 = OpCompositeConstruct %v2float %float_0 %float_5
%80 = OpCompositeConstruct %v2float %float_10 %float_15
%81 = OpCompositeConstruct %mat2v2float %79 %80
%83 = OpCompositeExtract %v2float %78 0
%84 = OpCompositeExtract %v2float %81 0
%64 = OpCompositeConstruct %mat3v3float %63 %63 %63
%65 = OpCompositeExtract %v3float %61 0
%66 = OpCompositeExtract %v3float %64 0
%67 = OpFMul %v3float %65 %66
%68 = OpCompositeExtract %v3float %61 1
%69 = OpCompositeExtract %v3float %64 1
%70 = OpFMul %v3float %68 %69
%71 = OpCompositeExtract %v3float %61 2
%72 = OpCompositeExtract %v3float %64 2
%73 = OpFMul %v3float %71 %72
%74 = OpCompositeConstruct %mat3v3float %67 %70 %73
OpStore %h33 %74
%76 = OpLoad %mat2v2float %h22
%77 = OpCompositeConstruct %mat2v2float %34 %35
%79 = OpCompositeExtract %v2float %76 0
%80 = OpCompositeExtract %v2float %77 0
%81 = OpFOrdEqual %v2bool %79 %80
%82 = OpAll %bool %81
%83 = OpCompositeExtract %v2float %76 1
%84 = OpCompositeExtract %v2float %77 1
%85 = OpFOrdEqual %v2bool %83 %84
%86 = OpAll %bool %85
%87 = OpCompositeExtract %v2float %78 1
%88 = OpCompositeExtract %v2float %81 1
%89 = OpFOrdEqual %v2bool %87 %88
%90 = OpAll %bool %89
%91 = OpLogicalAnd %bool %86 %90
OpSelectionMerge %93 None
OpBranchConditional %91 %92 %93
%92 = OpLabel
%94 = OpLoad %mat2v2float %f22
%96 = OpCompositeConstruct %v2float %float_1 %float_0
%97 = OpCompositeConstruct %v2float %float_0 %float_4
%98 = OpCompositeConstruct %mat2v2float %96 %97
%99 = OpCompositeExtract %v2float %94 0
%100 = OpCompositeExtract %v2float %98 0
%87 = OpLogicalAnd %bool %82 %86
OpSelectionMerge %89 None
OpBranchConditional %87 %88 %89
%88 = OpLabel
%90 = OpLoad %mat2v2float %f22
%94 = OpCompositeConstruct %mat2v2float %92 %93
%95 = OpCompositeExtract %v2float %90 0
%96 = OpCompositeExtract %v2float %94 0
%97 = OpFOrdEqual %v2bool %95 %96
%98 = OpAll %bool %97
%99 = OpCompositeExtract %v2float %90 1
%100 = OpCompositeExtract %v2float %94 1
%101 = OpFOrdEqual %v2bool %99 %100
%102 = OpAll %bool %101
%103 = OpCompositeExtract %v2float %94 1
%104 = OpCompositeExtract %v2float %98 1
%105 = OpFOrdEqual %v2bool %103 %104
%106 = OpAll %bool %105
%107 = OpLogicalAnd %bool %102 %106
OpBranch %93
%93 = OpLabel
%108 = OpPhi %bool %false %28 %107 %92
OpSelectionMerge %110 None
OpBranchConditional %108 %109 %110
%109 = OpLabel
%111 = OpLoad %mat3v3float %h33
%118 = OpCompositeConstruct %v3float %float_2 %float_4 %float_6
%119 = OpCompositeConstruct %v3float %float_8 %float_10 %float_12
%120 = OpCompositeConstruct %v3float %float_14 %float_16 %float_18
%121 = OpCompositeConstruct %mat3v3float %118 %119 %120
%123 = OpCompositeExtract %v3float %111 0
%124 = OpCompositeExtract %v3float %121 0
%103 = OpLogicalAnd %bool %98 %102
OpBranch %89
%89 = OpLabel
%104 = OpPhi %bool %false %28 %103 %88
OpSelectionMerge %106 None
OpBranchConditional %104 %105 %106
%105 = OpLabel
%107 = OpLoad %mat3v3float %h33
%117 = OpCompositeConstruct %mat3v3float %114 %115 %116
%119 = OpCompositeExtract %v3float %107 0
%120 = OpCompositeExtract %v3float %117 0
%121 = OpFOrdEqual %v3bool %119 %120
%122 = OpAll %bool %121
%123 = OpCompositeExtract %v3float %107 1
%124 = OpCompositeExtract %v3float %117 1
%125 = OpFOrdEqual %v3bool %123 %124
%126 = OpAll %bool %125
%127 = OpCompositeExtract %v3float %111 1
%128 = OpCompositeExtract %v3float %121 1
%129 = OpFOrdEqual %v3bool %127 %128
%130 = OpAll %bool %129
%131 = OpLogicalAnd %bool %126 %130
%132 = OpCompositeExtract %v3float %111 2
%133 = OpCompositeExtract %v3float %121 2
%134 = OpFOrdEqual %v3bool %132 %133
%135 = OpAll %bool %134
%136 = OpLogicalAnd %bool %131 %135
OpBranch %110
%110 = OpLabel
%137 = OpPhi %bool %false %93 %136 %109
OpSelectionMerge %142 None
OpBranchConditional %137 %140 %141
%140 = OpLabel
%143 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%146 = OpLoad %v4float %143
OpStore %138 %146
OpBranch %142
%141 = OpLabel
%147 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%149 = OpLoad %v4float %147
OpStore %138 %149
OpBranch %142
%142 = OpLabel
%150 = OpLoad %v4float %138
OpReturnValue %150
%127 = OpLogicalAnd %bool %122 %126
%128 = OpCompositeExtract %v3float %107 2
%129 = OpCompositeExtract %v3float %117 2
%130 = OpFOrdEqual %v3bool %128 %129
%131 = OpAll %bool %130
%132 = OpLogicalAnd %bool %127 %131
OpBranch %106
%106 = OpLabel
%133 = OpPhi %bool %false %89 %132 %105
OpSelectionMerge %138 None
OpBranchConditional %133 %136 %137
%136 = OpLabel
%139 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%142 = OpLoad %v4float %139
OpStore %134 %142
OpBranch %138
%137 = OpLabel
%143 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%145 = OpLoad %v4float %143
OpStore %134 %145
OpBranch %138
%138 = OpLabel
%146 = OpLoad %v4float %134
OpReturnValue %146
OpFunctionEnd

View File

@ -27,8 +27,8 @@ OpDecorate %10 DescriptorSet 0
OpDecorate %h24 RelaxedPrecision
OpDecorate %31 RelaxedPrecision
OpDecorate %32 RelaxedPrecision
OpDecorate %33 RelaxedPrecision
OpDecorate %38 RelaxedPrecision
OpDecorate %37 RelaxedPrecision
OpDecorate %40 RelaxedPrecision
OpDecorate %41 RelaxedPrecision
OpDecorate %42 RelaxedPrecision
OpDecorate %43 RelaxedPrecision
@ -37,14 +37,14 @@ OpDecorate %45 RelaxedPrecision
OpDecorate %46 RelaxedPrecision
OpDecorate %47 RelaxedPrecision
OpDecorate %48 RelaxedPrecision
OpDecorate %49 RelaxedPrecision
OpDecorate %h42 RelaxedPrecision
OpDecorate %61 RelaxedPrecision
OpDecorate %62 RelaxedPrecision
OpDecorate %63 RelaxedPrecision
OpDecorate %64 RelaxedPrecision
OpDecorate %65 RelaxedPrecision
OpDecorate %66 RelaxedPrecision
OpDecorate %68 RelaxedPrecision
OpDecorate %67 RelaxedPrecision
OpDecorate %69 RelaxedPrecision
OpDecorate %70 RelaxedPrecision
OpDecorate %71 RelaxedPrecision
OpDecorate %72 RelaxedPrecision
@ -71,20 +71,19 @@ OpDecorate %92 RelaxedPrecision
OpDecorate %93 RelaxedPrecision
OpDecorate %94 RelaxedPrecision
OpDecorate %95 RelaxedPrecision
OpDecorate %96 RelaxedPrecision
OpDecorate %112 RelaxedPrecision
OpDecorate %113 RelaxedPrecision
OpDecorate %114 RelaxedPrecision
OpDecorate %115 RelaxedPrecision
OpDecorate %116 RelaxedPrecision
OpDecorate %128 RelaxedPrecision
OpDecorate %129 RelaxedPrecision
OpDecorate %130 RelaxedPrecision
OpDecorate %131 RelaxedPrecision
OpDecorate %132 RelaxedPrecision
OpDecorate %133 RelaxedPrecision
OpDecorate %134 RelaxedPrecision
OpDecorate %191 RelaxedPrecision
OpDecorate %193 RelaxedPrecision
OpDecorate %194 RelaxedPrecision
OpDecorate %186 RelaxedPrecision
OpDecorate %188 RelaxedPrecision
OpDecorate %189 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -105,6 +104,7 @@ OpDecorate %194 RelaxedPrecision
%mat2v4float = OpTypeMatrix %v4float 2
%_ptr_Function_mat2v4float = OpTypePointer Function %mat2v4float
%float_9 = OpConstant %float 9
%31 = OpConstantComposite %v4float %float_9 %float_9 %float_9 %float_9
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%int = OpTypeInt 32 1
%int_1 = OpConstant %int 1
@ -119,6 +119,10 @@ OpDecorate %194 RelaxedPrecision
%float_6 = OpConstant %float 6
%float_7 = OpConstant %float 7
%float_8 = OpConstant %float 8
%61 = OpConstantComposite %v2float %float_1 %float_2
%62 = OpConstantComposite %v2float %float_3 %float_4
%63 = OpConstantComposite %v2float %float_5 %float_6
%64 = OpConstantComposite %v2float %float_7 %float_8
%v3float = OpTypeVector %float 3
%mat4v3float = OpTypeMatrix %v3float 4
%_ptr_Function_mat4v3float = OpTypePointer Function %mat4v3float
@ -128,8 +132,18 @@ OpDecorate %194 RelaxedPrecision
%float_36 = OpConstant %float 36
%float_40 = OpConstant %float 40
%float_42 = OpConstant %float 42
%106 = OpConstantComposite %v3float %float_12 %float_22 %float_30
%107 = OpConstantComposite %v3float %float_36 %float_40 %float_42
%108 = OpConstantComposite %v3float %float_42 %float_40 %float_36
%109 = OpConstantComposite %v3float %float_30 %float_22 %float_12
%false = OpConstantFalse %bool
%113 = OpConstantComposite %v4float %float_9 %float_0 %float_0 %float_9
%114 = OpConstantComposite %v4float %float_0 %float_9 %float_0 %float_9
%v4bool = OpTypeVector %bool 4
%129 = OpConstantComposite %v2float %float_1 %float_0
%130 = OpConstantComposite %v2float %float_0 %float_4
%131 = OpConstantComposite %v2float %float_0 %float_6
%132 = OpConstantComposite %v2float %float_0 %float_8
%v2bool = OpTypeVector %bool 2
%v3bool = OpTypeVector %bool 3
%_ptr_Function_v4float = OpTypePointer Function %v4float
@ -147,153 +161,133 @@ OpFunctionEnd
%h24 = OpVariable %_ptr_Function_mat2v4float Function
%h42 = OpVariable %_ptr_Function_mat4v2float Function
%f43 = OpVariable %_ptr_Function_mat4v3float Function
%185 = OpVariable %_ptr_Function_v4float Function
%31 = OpCompositeConstruct %v4float %float_9 %float_9 %float_9 %float_9
%32 = OpCompositeConstruct %v4float %float_9 %float_9 %float_9 %float_9
%33 = OpCompositeConstruct %mat2v4float %31 %32
%34 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%38 = OpLoad %v4float %34
%39 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%41 = OpLoad %v4float %39
%42 = OpCompositeConstruct %mat2v4float %38 %41
%43 = OpCompositeExtract %v4float %33 0
%44 = OpCompositeExtract %v4float %42 0
%45 = OpFMul %v4float %43 %44
%46 = OpCompositeExtract %v4float %33 1
%47 = OpCompositeExtract %v4float %42 1
%48 = OpFMul %v4float %46 %47
%49 = OpCompositeConstruct %mat2v4float %45 %48
OpStore %h24 %49
%62 = OpCompositeConstruct %v2float %float_1 %float_2
%63 = OpCompositeConstruct %v2float %float_3 %float_4
%64 = OpCompositeConstruct %v2float %float_5 %float_6
%65 = OpCompositeConstruct %v2float %float_7 %float_8
%66 = OpCompositeConstruct %mat4v2float %62 %63 %64 %65
%67 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%68 = OpLoad %v4float %67
%69 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%70 = OpLoad %v4float %69
%71 = OpCompositeExtract %float %68 0
%72 = OpCompositeExtract %float %68 1
%73 = OpCompositeConstruct %v2float %71 %72
%74 = OpCompositeExtract %float %68 2
%75 = OpCompositeExtract %float %68 3
%76 = OpCompositeConstruct %v2float %74 %75
%77 = OpCompositeExtract %float %70 0
%78 = OpCompositeExtract %float %70 1
%79 = OpCompositeConstruct %v2float %77 %78
%80 = OpCompositeExtract %float %70 2
%81 = OpCompositeExtract %float %70 3
%82 = OpCompositeConstruct %v2float %80 %81
%83 = OpCompositeConstruct %mat4v2float %73 %76 %79 %82
%84 = OpCompositeExtract %v2float %66 0
%85 = OpCompositeExtract %v2float %83 0
%86 = OpFMul %v2float %84 %85
%87 = OpCompositeExtract %v2float %66 1
%88 = OpCompositeExtract %v2float %83 1
%89 = OpFMul %v2float %87 %88
%90 = OpCompositeExtract %v2float %66 2
%91 = OpCompositeExtract %v2float %83 2
%92 = OpFMul %v2float %90 %91
%93 = OpCompositeExtract %v2float %66 3
%94 = OpCompositeExtract %v2float %83 3
%95 = OpFMul %v2float %93 %94
%96 = OpCompositeConstruct %mat4v2float %86 %89 %92 %95
OpStore %h42 %96
%107 = OpCompositeConstruct %v3float %float_12 %float_22 %float_30
%108 = OpCompositeConstruct %v3float %float_36 %float_40 %float_42
%109 = OpCompositeConstruct %v3float %float_42 %float_40 %float_36
%110 = OpCompositeConstruct %v3float %float_30 %float_22 %float_12
%111 = OpCompositeConstruct %mat4v3float %107 %108 %109 %110
OpStore %f43 %111
%113 = OpLoad %mat2v4float %h24
%114 = OpCompositeConstruct %v4float %float_9 %float_0 %float_0 %float_9
%115 = OpCompositeConstruct %v4float %float_0 %float_9 %float_0 %float_9
%116 = OpCompositeConstruct %mat2v4float %114 %115
%118 = OpCompositeExtract %v4float %113 0
%119 = OpCompositeExtract %v4float %116 0
%120 = OpFOrdEqual %v4bool %118 %119
%121 = OpAll %bool %120
%122 = OpCompositeExtract %v4float %113 1
%123 = OpCompositeExtract %v4float %116 1
%124 = OpFOrdEqual %v4bool %122 %123
%125 = OpAll %bool %124
%126 = OpLogicalAnd %bool %121 %125
OpSelectionMerge %128 None
OpBranchConditional %126 %127 %128
%180 = OpVariable %_ptr_Function_v4float Function
%32 = OpCompositeConstruct %mat2v4float %31 %31
%33 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%37 = OpLoad %v4float %33
%38 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%40 = OpLoad %v4float %38
%41 = OpCompositeConstruct %mat2v4float %37 %40
%42 = OpCompositeExtract %v4float %32 0
%43 = OpCompositeExtract %v4float %41 0
%44 = OpFMul %v4float %42 %43
%45 = OpCompositeExtract %v4float %32 1
%46 = OpCompositeExtract %v4float %41 1
%47 = OpFMul %v4float %45 %46
%48 = OpCompositeConstruct %mat2v4float %44 %47
OpStore %h24 %48
%65 = OpCompositeConstruct %mat4v2float %61 %62 %63 %64
%66 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%67 = OpLoad %v4float %66
%68 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%69 = OpLoad %v4float %68
%70 = OpCompositeExtract %float %67 0
%71 = OpCompositeExtract %float %67 1
%72 = OpCompositeConstruct %v2float %70 %71
%73 = OpCompositeExtract %float %67 2
%74 = OpCompositeExtract %float %67 3
%75 = OpCompositeConstruct %v2float %73 %74
%76 = OpCompositeExtract %float %69 0
%77 = OpCompositeExtract %float %69 1
%78 = OpCompositeConstruct %v2float %76 %77
%79 = OpCompositeExtract %float %69 2
%80 = OpCompositeExtract %float %69 3
%81 = OpCompositeConstruct %v2float %79 %80
%82 = OpCompositeConstruct %mat4v2float %72 %75 %78 %81
%83 = OpCompositeExtract %v2float %65 0
%84 = OpCompositeExtract %v2float %82 0
%85 = OpFMul %v2float %83 %84
%86 = OpCompositeExtract %v2float %65 1
%87 = OpCompositeExtract %v2float %82 1
%88 = OpFMul %v2float %86 %87
%89 = OpCompositeExtract %v2float %65 2
%90 = OpCompositeExtract %v2float %82 2
%91 = OpFMul %v2float %89 %90
%92 = OpCompositeExtract %v2float %65 3
%93 = OpCompositeExtract %v2float %82 3
%94 = OpFMul %v2float %92 %93
%95 = OpCompositeConstruct %mat4v2float %85 %88 %91 %94
OpStore %h42 %95
%110 = OpCompositeConstruct %mat4v3float %106 %107 %108 %109
OpStore %f43 %110
%112 = OpLoad %mat2v4float %h24
%115 = OpCompositeConstruct %mat2v4float %113 %114
%117 = OpCompositeExtract %v4float %112 0
%118 = OpCompositeExtract %v4float %115 0
%119 = OpFOrdEqual %v4bool %117 %118
%120 = OpAll %bool %119
%121 = OpCompositeExtract %v4float %112 1
%122 = OpCompositeExtract %v4float %115 1
%123 = OpFOrdEqual %v4bool %121 %122
%124 = OpAll %bool %123
%125 = OpLogicalAnd %bool %120 %124
OpSelectionMerge %127 None
OpBranchConditional %125 %126 %127
%126 = OpLabel
%128 = OpLoad %mat4v2float %h42
%133 = OpCompositeConstruct %mat4v2float %129 %130 %131 %132
%135 = OpCompositeExtract %v2float %128 0
%136 = OpCompositeExtract %v2float %133 0
%137 = OpFOrdEqual %v2bool %135 %136
%138 = OpAll %bool %137
%139 = OpCompositeExtract %v2float %128 1
%140 = OpCompositeExtract %v2float %133 1
%141 = OpFOrdEqual %v2bool %139 %140
%142 = OpAll %bool %141
%143 = OpLogicalAnd %bool %138 %142
%144 = OpCompositeExtract %v2float %128 2
%145 = OpCompositeExtract %v2float %133 2
%146 = OpFOrdEqual %v2bool %144 %145
%147 = OpAll %bool %146
%148 = OpLogicalAnd %bool %143 %147
%149 = OpCompositeExtract %v2float %128 3
%150 = OpCompositeExtract %v2float %133 3
%151 = OpFOrdEqual %v2bool %149 %150
%152 = OpAll %bool %151
%153 = OpLogicalAnd %bool %148 %152
OpBranch %127
%127 = OpLabel
%129 = OpLoad %mat4v2float %h42
%130 = OpCompositeConstruct %v2float %float_1 %float_0
%131 = OpCompositeConstruct %v2float %float_0 %float_4
%132 = OpCompositeConstruct %v2float %float_0 %float_6
%133 = OpCompositeConstruct %v2float %float_0 %float_8
%134 = OpCompositeConstruct %mat4v2float %130 %131 %132 %133
%136 = OpCompositeExtract %v2float %129 0
%137 = OpCompositeExtract %v2float %134 0
%138 = OpFOrdEqual %v2bool %136 %137
%139 = OpAll %bool %138
%140 = OpCompositeExtract %v2float %129 1
%141 = OpCompositeExtract %v2float %134 1
%142 = OpFOrdEqual %v2bool %140 %141
%143 = OpAll %bool %142
%144 = OpLogicalAnd %bool %139 %143
%145 = OpCompositeExtract %v2float %129 2
%146 = OpCompositeExtract %v2float %134 2
%147 = OpFOrdEqual %v2bool %145 %146
%148 = OpAll %bool %147
%149 = OpLogicalAnd %bool %144 %148
%150 = OpCompositeExtract %v2float %129 3
%151 = OpCompositeExtract %v2float %134 3
%152 = OpFOrdEqual %v2bool %150 %151
%153 = OpAll %bool %152
%154 = OpLogicalAnd %bool %149 %153
OpBranch %128
%128 = OpLabel
%155 = OpPhi %bool %false %25 %154 %127
OpSelectionMerge %157 None
OpBranchConditional %155 %156 %157
%156 = OpLabel
%158 = OpLoad %mat4v3float %f43
%159 = OpCompositeConstruct %v3float %float_12 %float_22 %float_30
%160 = OpCompositeConstruct %v3float %float_36 %float_40 %float_42
%161 = OpCompositeConstruct %v3float %float_42 %float_40 %float_36
%162 = OpCompositeConstruct %v3float %float_30 %float_22 %float_12
%163 = OpCompositeConstruct %mat4v3float %159 %160 %161 %162
%165 = OpCompositeExtract %v3float %158 0
%166 = OpCompositeExtract %v3float %163 0
%167 = OpFOrdEqual %v3bool %165 %166
%168 = OpAll %bool %167
%169 = OpCompositeExtract %v3float %158 1
%170 = OpCompositeExtract %v3float %163 1
%154 = OpPhi %bool %false %25 %153 %126
OpSelectionMerge %156 None
OpBranchConditional %154 %155 %156
%155 = OpLabel
%157 = OpLoad %mat4v3float %f43
%158 = OpCompositeConstruct %mat4v3float %106 %107 %108 %109
%160 = OpCompositeExtract %v3float %157 0
%161 = OpCompositeExtract %v3float %158 0
%162 = OpFOrdEqual %v3bool %160 %161
%163 = OpAll %bool %162
%164 = OpCompositeExtract %v3float %157 1
%165 = OpCompositeExtract %v3float %158 1
%166 = OpFOrdEqual %v3bool %164 %165
%167 = OpAll %bool %166
%168 = OpLogicalAnd %bool %163 %167
%169 = OpCompositeExtract %v3float %157 2
%170 = OpCompositeExtract %v3float %158 2
%171 = OpFOrdEqual %v3bool %169 %170
%172 = OpAll %bool %171
%173 = OpLogicalAnd %bool %168 %172
%174 = OpCompositeExtract %v3float %158 2
%175 = OpCompositeExtract %v3float %163 2
%174 = OpCompositeExtract %v3float %157 3
%175 = OpCompositeExtract %v3float %158 3
%176 = OpFOrdEqual %v3bool %174 %175
%177 = OpAll %bool %176
%178 = OpLogicalAnd %bool %173 %177
%179 = OpCompositeExtract %v3float %158 3
%180 = OpCompositeExtract %v3float %163 3
%181 = OpFOrdEqual %v3bool %179 %180
%182 = OpAll %bool %181
%183 = OpLogicalAnd %bool %178 %182
OpBranch %157
%157 = OpLabel
%184 = OpPhi %bool %false %128 %183 %156
OpSelectionMerge %189 None
OpBranchConditional %184 %187 %188
%187 = OpLabel
%190 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%191 = OpLoad %v4float %190
OpStore %185 %191
OpBranch %189
%188 = OpLabel
%192 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%193 = OpLoad %v4float %192
OpStore %185 %193
OpBranch %189
%189 = OpLabel
%194 = OpLoad %v4float %185
OpReturnValue %194
OpBranch %156
%156 = OpLabel
%179 = OpPhi %bool %false %127 %178 %155
OpSelectionMerge %184 None
OpBranchConditional %179 %182 %183
%182 = OpLabel
%185 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%186 = OpLoad %v4float %185
OpStore %180 %186
OpBranch %184
%183 = OpLabel
%187 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%188 = OpLoad %v4float %187
OpStore %180 %188
OpBranch %184
%184 = OpLabel
%189 = OpLoad %v4float %180
OpReturnValue %189
OpFunctionEnd

View File

@ -33,14 +33,14 @@ OpMemberDecorate %_UniformBuffer 4 RelaxedPrecision
OpDecorate %_UniformBuffer Block
OpDecorate %10 Binding 0
OpDecorate %10 DescriptorSet 0
OpDecorate %132 RelaxedPrecision
OpDecorate %131 RelaxedPrecision
OpDecorate %135 RelaxedPrecision
OpDecorate %136 RelaxedPrecision
OpDecorate %137 RelaxedPrecision
OpDecorate %175 RelaxedPrecision
OpDecorate %196 RelaxedPrecision
OpDecorate %229 RelaxedPrecision
OpDecorate %231 RelaxedPrecision
OpDecorate %232 RelaxedPrecision
OpDecorate %173 RelaxedPrecision
OpDecorate %192 RelaxedPrecision
OpDecorate %224 RelaxedPrecision
OpDecorate %226 RelaxedPrecision
OpDecorate %227 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -75,6 +75,8 @@ OpDecorate %232 RelaxedPrecision
%float_6 = OpConstant %float 6
%float_4 = OpConstant %float 4
%float_8 = OpConstant %float 8
%51 = OpConstantComposite %v2float %float_3 %float_6
%52 = OpConstantComposite %v2float %float_4 %float_8
%v2bool = OpTypeVector %bool 2
%_ptr_Uniform_mat3v3float = OpTypePointer Uniform %mat3v3float
%int_3 = OpConstant %int 3
@ -84,11 +86,16 @@ OpDecorate %232 RelaxedPrecision
%float_10 = OpConstant %float 10
%float_15 = OpConstant %float 15
%float_18 = OpConstant %float 18
%81 = OpConstantComposite %v3float %float_4 %float_8 %float_12
%82 = OpConstantComposite %v3float %float_5 %float_10 %float_15
%83 = OpConstantComposite %v3float %float_6 %float_12 %float_18
%v3bool = OpTypeVector %bool 3
%mat3v2float = OpTypeMatrix %v2float 3
%111 = OpConstantComposite %v2float %float_5 %float_10
%112 = OpConstantComposite %v2float %float_6 %float_12
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%int_4 = OpConstant %int 4
%137 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_2
%136 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_2
%mat4v4float = OpTypeMatrix %v4float 4
%float_n1_25 = OpConstant %float -1.25
%float_0_75 = OpConstant %float 0.75
@ -96,9 +103,15 @@ OpDecorate %232 RelaxedPrecision
%float_n2_5 = OpConstant %float -2.5
%float_1_5 = OpConstant %float 1.5
%float_4_5 = OpConstant %float 4.5
%144 = OpConstantComposite %v4float %float_n1_25 %float_0 %float_0_75 %float_2_25
%145 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%146 = OpConstantComposite %v4float %float_n2_5 %float_0 %float_1_5 %float_4_5
%v4bool = OpTypeVector %bool 4
%mat2v4float = OpTypeMatrix %v4float 2
%mat4v2float = OpTypeMatrix %v2float 4
%194 = OpConstantComposite %v2float %float_n1_25 %float_n2_5
%195 = OpConstantComposite %v2float %float_0_75 %float_1_5
%196 = OpConstantComposite %v2float %float_2_25 %float_4_5
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_entrypoint_v = OpFunction %void None %19
%20 = OpLabel
@ -112,7 +125,7 @@ OpFunctionEnd
%27 = OpFunctionParameter %_ptr_Function_v2float
%28 = OpLabel
%c12 = OpVariable %_ptr_Function_v2float Function
%223 = OpVariable %_ptr_Function_v4float Function
%218 = OpVariable %_ptr_Function_v4float Function
OpStore %c12 %32
%35 = OpAccessChain %_ptr_Uniform_mat2v2float %10 %int_2
%40 = OpAccessChain %_ptr_Uniform_v2float %35 %int_0
@ -121,8 +134,6 @@ OpStore %c12 %32
%45 = OpAccessChain %_ptr_Uniform_v2float %43 %int_1
%46 = OpLoad %v2float %45
%34 = OpOuterProduct %mat2v2float %42 %46
%51 = OpCompositeConstruct %v2float %float_3 %float_6
%52 = OpCompositeConstruct %v2float %float_4 %float_8
%53 = OpCompositeConstruct %mat2v2float %51 %52
%55 = OpCompositeExtract %v2float %34 0
%56 = OpCompositeExtract %v2float %53 0
@ -143,9 +154,6 @@ OpBranchConditional %63 %64 %65
%74 = OpAccessChain %_ptr_Uniform_v3float %73 %int_1
%75 = OpLoad %v3float %74
%66 = OpOuterProduct %mat3v3float %72 %75
%81 = OpCompositeConstruct %v3float %float_4 %float_8 %float_12
%82 = OpCompositeConstruct %v3float %float_5 %float_10 %float_15
%83 = OpCompositeConstruct %v3float %float_6 %float_12 %float_18
%84 = OpCompositeConstruct %mat3v3float %81 %82 %83
%86 = OpCompositeExtract %v3float %66 0
%87 = OpCompositeExtract %v3float %84 0
@ -174,129 +182,116 @@ OpBranchConditional %100 %101 %102
%108 = OpAccessChain %_ptr_Uniform_v3float %107 %int_1
%109 = OpLoad %v3float %108
%103 = OpOuterProduct %mat3v2float %106 %109
%111 = OpCompositeConstruct %v2float %float_4 %float_8
%112 = OpCompositeConstruct %v2float %float_5 %float_10
%113 = OpCompositeConstruct %v2float %float_6 %float_12
%114 = OpCompositeConstruct %mat3v2float %111 %112 %113
%115 = OpCompositeExtract %v2float %103 0
%116 = OpCompositeExtract %v2float %114 0
%117 = OpFOrdEqual %v2bool %115 %116
%118 = OpAll %bool %117
%119 = OpCompositeExtract %v2float %103 1
%120 = OpCompositeExtract %v2float %114 1
%121 = OpFOrdEqual %v2bool %119 %120
%122 = OpAll %bool %121
%123 = OpLogicalAnd %bool %118 %122
%124 = OpCompositeExtract %v2float %103 2
%125 = OpCompositeExtract %v2float %114 2
%126 = OpFOrdEqual %v2bool %124 %125
%127 = OpAll %bool %126
%128 = OpLogicalAnd %bool %123 %127
%113 = OpCompositeConstruct %mat3v2float %52 %111 %112
%114 = OpCompositeExtract %v2float %103 0
%115 = OpCompositeExtract %v2float %113 0
%116 = OpFOrdEqual %v2bool %114 %115
%117 = OpAll %bool %116
%118 = OpCompositeExtract %v2float %103 1
%119 = OpCompositeExtract %v2float %113 1
%120 = OpFOrdEqual %v2bool %118 %119
%121 = OpAll %bool %120
%122 = OpLogicalAnd %bool %117 %121
%123 = OpCompositeExtract %v2float %103 2
%124 = OpCompositeExtract %v2float %113 2
%125 = OpFOrdEqual %v2bool %123 %124
%126 = OpAll %bool %125
%127 = OpLogicalAnd %bool %122 %126
OpBranch %102
%102 = OpLabel
%129 = OpPhi %bool %false %65 %128 %101
OpSelectionMerge %131 None
OpBranchConditional %129 %130 %131
%128 = OpPhi %bool %false %65 %127 %101
OpSelectionMerge %130 None
OpBranchConditional %128 %129 %130
%129 = OpLabel
%132 = OpAccessChain %_ptr_Uniform_v4float %10 %int_4
%135 = OpLoad %v4float %132
%131 = OpOuterProduct %mat4v4float %135 %136
%147 = OpCompositeConstruct %mat4v4float %144 %145 %145 %146
%149 = OpCompositeExtract %v4float %131 0
%150 = OpCompositeExtract %v4float %147 0
%151 = OpFOrdEqual %v4bool %149 %150
%152 = OpAll %bool %151
%153 = OpCompositeExtract %v4float %131 1
%154 = OpCompositeExtract %v4float %147 1
%155 = OpFOrdEqual %v4bool %153 %154
%156 = OpAll %bool %155
%157 = OpLogicalAnd %bool %152 %156
%158 = OpCompositeExtract %v4float %131 2
%159 = OpCompositeExtract %v4float %147 2
%160 = OpFOrdEqual %v4bool %158 %159
%161 = OpAll %bool %160
%162 = OpLogicalAnd %bool %157 %161
%163 = OpCompositeExtract %v4float %131 3
%164 = OpCompositeExtract %v4float %147 3
%165 = OpFOrdEqual %v4bool %163 %164
%166 = OpAll %bool %165
%167 = OpLogicalAnd %bool %162 %166
OpBranch %130
%130 = OpLabel
%133 = OpAccessChain %_ptr_Uniform_v4float %10 %int_4
%136 = OpLoad %v4float %133
%132 = OpOuterProduct %mat4v4float %136 %137
%145 = OpCompositeConstruct %v4float %float_n1_25 %float_0 %float_0_75 %float_2_25
%146 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %float_0
%147 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %float_0
%148 = OpCompositeConstruct %v4float %float_n2_5 %float_0 %float_1_5 %float_4_5
%149 = OpCompositeConstruct %mat4v4float %145 %146 %147 %148
%151 = OpCompositeExtract %v4float %132 0
%152 = OpCompositeExtract %v4float %149 0
%153 = OpFOrdEqual %v4bool %151 %152
%154 = OpAll %bool %153
%155 = OpCompositeExtract %v4float %132 1
%156 = OpCompositeExtract %v4float %149 1
%157 = OpFOrdEqual %v4bool %155 %156
%158 = OpAll %bool %157
%159 = OpLogicalAnd %bool %154 %158
%160 = OpCompositeExtract %v4float %132 2
%161 = OpCompositeExtract %v4float %149 2
%162 = OpFOrdEqual %v4bool %160 %161
%163 = OpAll %bool %162
%164 = OpLogicalAnd %bool %159 %163
%165 = OpCompositeExtract %v4float %132 3
%166 = OpCompositeExtract %v4float %149 3
%167 = OpFOrdEqual %v4bool %165 %166
%168 = OpAll %bool %167
%169 = OpLogicalAnd %bool %164 %168
OpBranch %131
%131 = OpLabel
%170 = OpPhi %bool %false %102 %169 %130
OpSelectionMerge %172 None
OpBranchConditional %170 %171 %172
%171 = OpLabel
%174 = OpAccessChain %_ptr_Uniform_v4float %10 %int_4
%175 = OpLoad %v4float %174
%176 = OpLoad %v2float %c12
%173 = OpOuterProduct %mat2v4float %175 %176
%178 = OpCompositeConstruct %v4float %float_n1_25 %float_0 %float_0_75 %float_2_25
%179 = OpCompositeConstruct %v4float %float_n2_5 %float_0 %float_1_5 %float_4_5
%180 = OpCompositeConstruct %mat2v4float %178 %179
%181 = OpCompositeExtract %v4float %173 0
%182 = OpCompositeExtract %v4float %180 0
%168 = OpPhi %bool %false %102 %167 %129
OpSelectionMerge %170 None
OpBranchConditional %168 %169 %170
%169 = OpLabel
%172 = OpAccessChain %_ptr_Uniform_v4float %10 %int_4
%173 = OpLoad %v4float %172
%174 = OpLoad %v2float %c12
%171 = OpOuterProduct %mat2v4float %173 %174
%176 = OpCompositeConstruct %mat2v4float %144 %146
%177 = OpCompositeExtract %v4float %171 0
%178 = OpCompositeExtract %v4float %176 0
%179 = OpFOrdEqual %v4bool %177 %178
%180 = OpAll %bool %179
%181 = OpCompositeExtract %v4float %171 1
%182 = OpCompositeExtract %v4float %176 1
%183 = OpFOrdEqual %v4bool %181 %182
%184 = OpAll %bool %183
%185 = OpCompositeExtract %v4float %173 1
%186 = OpCompositeExtract %v4float %180 1
%187 = OpFOrdEqual %v4bool %185 %186
%188 = OpAll %bool %187
%189 = OpLogicalAnd %bool %184 %188
OpBranch %172
%172 = OpLabel
%190 = OpPhi %bool %false %131 %189 %171
OpSelectionMerge %192 None
OpBranchConditional %190 %191 %192
%191 = OpLabel
%194 = OpLoad %v2float %c12
%195 = OpAccessChain %_ptr_Uniform_v4float %10 %int_4
%196 = OpLoad %v4float %195
%193 = OpOuterProduct %mat4v2float %194 %196
%198 = OpCompositeConstruct %v2float %float_n1_25 %float_n2_5
%199 = OpCompositeConstruct %v2float %float_0 %float_0
%200 = OpCompositeConstruct %v2float %float_0_75 %float_1_5
%201 = OpCompositeConstruct %v2float %float_2_25 %float_4_5
%202 = OpCompositeConstruct %mat4v2float %198 %199 %200 %201
%203 = OpCompositeExtract %v2float %193 0
%204 = OpCompositeExtract %v2float %202 0
%205 = OpFOrdEqual %v2bool %203 %204
%206 = OpAll %bool %205
%207 = OpCompositeExtract %v2float %193 1
%208 = OpCompositeExtract %v2float %202 1
%185 = OpLogicalAnd %bool %180 %184
OpBranch %170
%170 = OpLabel
%186 = OpPhi %bool %false %130 %185 %169
OpSelectionMerge %188 None
OpBranchConditional %186 %187 %188
%187 = OpLabel
%190 = OpLoad %v2float %c12
%191 = OpAccessChain %_ptr_Uniform_v4float %10 %int_4
%192 = OpLoad %v4float %191
%189 = OpOuterProduct %mat4v2float %190 %192
%197 = OpCompositeConstruct %mat4v2float %194 %22 %195 %196
%198 = OpCompositeExtract %v2float %189 0
%199 = OpCompositeExtract %v2float %197 0
%200 = OpFOrdEqual %v2bool %198 %199
%201 = OpAll %bool %200
%202 = OpCompositeExtract %v2float %189 1
%203 = OpCompositeExtract %v2float %197 1
%204 = OpFOrdEqual %v2bool %202 %203
%205 = OpAll %bool %204
%206 = OpLogicalAnd %bool %201 %205
%207 = OpCompositeExtract %v2float %189 2
%208 = OpCompositeExtract %v2float %197 2
%209 = OpFOrdEqual %v2bool %207 %208
%210 = OpAll %bool %209
%211 = OpLogicalAnd %bool %206 %210
%212 = OpCompositeExtract %v2float %193 2
%213 = OpCompositeExtract %v2float %202 2
%212 = OpCompositeExtract %v2float %189 3
%213 = OpCompositeExtract %v2float %197 3
%214 = OpFOrdEqual %v2bool %212 %213
%215 = OpAll %bool %214
%216 = OpLogicalAnd %bool %211 %215
%217 = OpCompositeExtract %v2float %193 3
%218 = OpCompositeExtract %v2float %202 3
%219 = OpFOrdEqual %v2bool %217 %218
%220 = OpAll %bool %219
%221 = OpLogicalAnd %bool %216 %220
OpBranch %192
%192 = OpLabel
%222 = OpPhi %bool %false %172 %221 %191
OpSelectionMerge %227 None
OpBranchConditional %222 %225 %226
%225 = OpLabel
%228 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%229 = OpLoad %v4float %228
OpStore %223 %229
OpBranch %227
%226 = OpLabel
%230 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%231 = OpLoad %v4float %230
OpStore %223 %231
OpBranch %227
%227 = OpLabel
%232 = OpLoad %v4float %223
OpReturnValue %232
OpBranch %188
%188 = OpLabel
%217 = OpPhi %bool %false %170 %216 %187
OpSelectionMerge %222 None
OpBranchConditional %217 %220 %221
%220 = OpLabel
%223 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%224 = OpLoad %v4float %223
OpStore %218 %224
OpBranch %222
%221 = OpLabel
%225 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%226 = OpLoad %v4float %225
OpStore %218 %226
OpBranch %222
%222 = OpLabel
%227 = OpLoad %v4float %218
OpReturnValue %227
OpFunctionEnd

View File

@ -61,17 +61,27 @@ OpDecorate %127 RelaxedPrecision
%float_4 = OpConstant %float 4
%float_5 = OpConstant %float 5
%float_6 = OpConstant %float 6
%38 = OpConstantComposite %v3float %float_1 %float_2 %float_3
%39 = OpConstantComposite %v3float %float_4 %float_5 %float_6
%false = OpConstantFalse %bool
%_ptr_Uniform_mat2v2float = OpTypePointer Uniform %mat2v2float
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%48 = OpConstantComposite %v2float %float_1 %float_3
%49 = OpConstantComposite %v2float %float_2 %float_4
%v2bool = OpTypeVector %bool 2
%mat3v2float = OpTypeMatrix %v2float 3
%66 = OpConstantComposite %v2float %float_1 %float_4
%67 = OpConstantComposite %v2float %float_2 %float_5
%68 = OpConstantComposite %v2float %float_3 %float_6
%_ptr_Uniform_mat3v3float = OpTypePointer Uniform %mat3v3float
%int_1 = OpConstant %int 1
%float_7 = OpConstant %float 7
%float_8 = OpConstant %float 8
%float_9 = OpConstant %float 9
%95 = OpConstantComposite %v3float %float_1 %float_4 %float_7
%96 = OpConstantComposite %v3float %float_2 %float_5 %float_8
%97 = OpConstantComposite %v3float %float_3 %float_6 %float_9
%v3bool = OpTypeVector %bool 3
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
@ -90,15 +100,11 @@ OpFunctionEnd
%28 = OpLabel
%testMatrix2x3 = OpVariable %_ptr_Function_mat2v3float Function
%115 = OpVariable %_ptr_Function_v4float Function
%38 = OpCompositeConstruct %v3float %float_1 %float_2 %float_3
%39 = OpCompositeConstruct %v3float %float_4 %float_5 %float_6
%40 = OpCompositeConstruct %mat2v3float %38 %39
OpStore %testMatrix2x3 %40
%43 = OpAccessChain %_ptr_Uniform_mat2v2float %10 %int_0
%47 = OpLoad %mat2v2float %43
%42 = OpTranspose %mat2v2float %47
%48 = OpCompositeConstruct %v2float %float_1 %float_3
%49 = OpCompositeConstruct %v2float %float_2 %float_4
%50 = OpCompositeConstruct %mat2v2float %48 %49
%52 = OpCompositeExtract %v2float %42 0
%53 = OpCompositeExtract %v2float %50 0
@ -114,9 +120,6 @@ OpBranchConditional %60 %61 %62
%61 = OpLabel
%64 = OpLoad %mat2v3float %testMatrix2x3
%63 = OpTranspose %mat3v2float %64
%66 = OpCompositeConstruct %v2float %float_1 %float_4
%67 = OpCompositeConstruct %v2float %float_2 %float_5
%68 = OpCompositeConstruct %v2float %float_3 %float_6
%69 = OpCompositeConstruct %mat3v2float %66 %67 %68
%70 = OpCompositeExtract %v2float %63 0
%71 = OpCompositeExtract %v2float %69 0
@ -141,9 +144,6 @@ OpBranchConditional %84 %85 %86
%88 = OpAccessChain %_ptr_Uniform_mat3v3float %10 %int_1
%91 = OpLoad %mat3v3float %88
%87 = OpTranspose %mat3v3float %91
%95 = OpCompositeConstruct %v3float %float_1 %float_4 %float_7
%96 = OpCompositeConstruct %v3float %float_2 %float_5 %float_8
%97 = OpCompositeConstruct %v3float %float_3 %float_6 %float_9
%98 = OpCompositeConstruct %mat3v3float %95 %96 %97
%100 = OpCompositeExtract %v3float %87 0
%101 = OpCompositeExtract %v3float %98 0

View File

@ -86,10 +86,14 @@ OpDecorate %155 RelaxedPrecision
%mat2v2float = OpTypeMatrix %v2float 2
%_arr_mat2v2float_int_2 = OpTypeArray %mat2v2float %int_2
%_ptr_Function__arr_mat2v2float_int_2 = OpTypePointer Function %_arr_mat2v2float_int_2
%61 = OpConstantComposite %v2float %float_1 %float_2
%62 = OpConstantComposite %v2float %float_3 %float_4
%float_5 = OpConstant %float 5
%float_6 = OpConstant %float 6
%float_7 = OpConstant %float 7
%float_8 = OpConstant %float 8
%68 = OpConstantComposite %v2float %float_5 %float_6
%69 = OpConstantComposite %v2float %float_7 %float_8
%_ptr_Function__arr_mat2v2float_int_2_0 = OpTypePointer Function %_arr_mat2v2float_int_2
%false = OpConstantFalse %bool
%v3bool = OpTypeVector %bool 3
@ -131,11 +135,7 @@ OpStore %s3 %54
OpStore %i3 %55
%56 = OpLoad %_arr_v3int_int_3 %i3
OpStore %s3 %56
%61 = OpCompositeConstruct %v2float %float_1 %float_2
%62 = OpCompositeConstruct %v2float %float_3 %float_4
%63 = OpCompositeConstruct %mat2v2float %61 %62
%68 = OpCompositeConstruct %v2float %float_5 %float_6
%69 = OpCompositeConstruct %v2float %float_7 %float_8
%70 = OpCompositeConstruct %mat2v2float %68 %69
%71 = OpCompositeConstruct %_arr_mat2v2float_int_2 %63 %70
OpStore %h2x2 %71

View File

@ -55,8 +55,8 @@ OpDecorate %79 RelaxedPrecision
OpDecorate %80 RelaxedPrecision
OpDecorate %81 RelaxedPrecision
OpDecorate %82 RelaxedPrecision
OpDecorate %83 RelaxedPrecision
OpDecorate %84 RelaxedPrecision
OpDecorate %85 RelaxedPrecision
OpDecorate %86 RelaxedPrecision
OpDecorate %87 RelaxedPrecision
OpDecorate %88 RelaxedPrecision
OpDecorate %89 RelaxedPrecision
@ -64,34 +64,32 @@ OpDecorate %90 RelaxedPrecision
OpDecorate %91 RelaxedPrecision
OpDecorate %92 RelaxedPrecision
OpDecorate %93 RelaxedPrecision
OpDecorate %94 RelaxedPrecision
OpDecorate %95 RelaxedPrecision
OpMemberDecorate %S 0 Offset 0
OpMemberDecorate %S 1 Offset 4
OpDecorate %_arr_S_int_3 ArrayStride 16
OpDecorate %183 RelaxedPrecision
OpDecorate %184 RelaxedPrecision
OpDecorate %185 RelaxedPrecision
OpDecorate %186 RelaxedPrecision
OpDecorate %187 RelaxedPrecision
OpDecorate %188 RelaxedPrecision
OpDecorate %199 RelaxedPrecision
OpDecorate %200 RelaxedPrecision
OpDecorate %211 RelaxedPrecision
OpDecorate %212 RelaxedPrecision
OpDecorate %197 RelaxedPrecision
OpDecorate %198 RelaxedPrecision
OpDecorate %209 RelaxedPrecision
OpDecorate %210 RelaxedPrecision
OpDecorate %224 RelaxedPrecision
OpDecorate %225 RelaxedPrecision
OpDecorate %226 RelaxedPrecision
OpDecorate %227 RelaxedPrecision
OpDecorate %228 RelaxedPrecision
OpDecorate %229 RelaxedPrecision
OpDecorate %239 RelaxedPrecision
OpDecorate %240 RelaxedPrecision
OpDecorate %251 RelaxedPrecision
OpDecorate %252 RelaxedPrecision
OpDecorate %266 RelaxedPrecision
OpDecorate %267 RelaxedPrecision
OpDecorate %300 RelaxedPrecision
OpDecorate %301 RelaxedPrecision
OpDecorate %237 RelaxedPrecision
OpDecorate %238 RelaxedPrecision
OpDecorate %249 RelaxedPrecision
OpDecorate %250 RelaxedPrecision
OpDecorate %264 RelaxedPrecision
OpDecorate %265 RelaxedPrecision
OpDecorate %298 RelaxedPrecision
OpDecorate %299 RelaxedPrecision
OpDecorate %337 RelaxedPrecision
OpDecorate %339 RelaxedPrecision
OpDecorate %341 RelaxedPrecision
OpDecorate %342 RelaxedPrecision
OpDecorate %340 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -135,6 +133,10 @@ OpDecorate %342 RelaxedPrecision
%_ptr_Function__arr_mat2v2float_int_3 = OpTypePointer Function %_arr_mat2v2float_int_3
%float_5 = OpConstant %float 5
%float_6 = OpConstant %float 6
%71 = OpConstantComposite %v2float %float_3 %float_4
%72 = OpConstantComposite %v2float %float_5 %float_6
%88 = OpConstantComposite %v2float %float_2 %float_3
%89 = OpConstantComposite %v2float %float_4 %float_5
%S = OpTypeStruct %int %int
%_arr_S_int_3 = OpTypeArray %S %int_3
%_ptr_Function__arr_S_int_3 = OpTypePointer Function %_arr_S_int_3
@ -167,7 +169,7 @@ OpFunctionEnd
%s1 = OpVariable %_ptr_Function__arr_S_int_3 Function
%s2 = OpVariable %_ptr_Function__arr_S_int_3 Function
%s3 = OpVariable %_ptr_Function__arr_S_int_3 Function
%332 = OpVariable %_ptr_Function_v4float Function
%330 = OpVariable %_ptr_Function_v4float Function
%35 = OpCompositeConstruct %_arr_float_int_4 %float_1 %float_2 %float_3 %float_4
OpStore %f1 %35
%37 = OpCompositeConstruct %_arr_float_int_4 %float_1 %float_2 %float_3 %float_4
@ -186,8 +188,6 @@ OpStore %v3 %58
%67 = OpCompositeConstruct %v2float %float_2 %float_0
%68 = OpCompositeConstruct %v2float %float_0 %float_2
%66 = OpCompositeConstruct %mat2v2float %67 %68
%71 = OpCompositeConstruct %v2float %float_3 %float_4
%72 = OpCompositeConstruct %v2float %float_5 %float_6
%73 = OpCompositeConstruct %mat2v2float %71 %72
%74 = OpCompositeConstruct %_arr_mat2v2float_int_3 %63 %66 %73
OpStore %m1 %74
@ -197,284 +197,280 @@ OpStore %m1 %74
%80 = OpCompositeConstruct %v2float %float_2 %float_0
%81 = OpCompositeConstruct %v2float %float_0 %float_2
%79 = OpCompositeConstruct %mat2v2float %80 %81
%82 = OpCompositeConstruct %v2float %float_3 %float_4
%83 = OpCompositeConstruct %v2float %float_5 %float_6
%84 = OpCompositeConstruct %mat2v2float %82 %83
%85 = OpCompositeConstruct %_arr_mat2v2float_int_3 %76 %79 %84
OpStore %m2 %85
%88 = OpCompositeConstruct %v2float %float_1 %float_0
%89 = OpCompositeConstruct %v2float %float_0 %float_1
%87 = OpCompositeConstruct %mat2v2float %88 %89
%90 = OpCompositeConstruct %v2float %float_2 %float_3
%91 = OpCompositeConstruct %v2float %float_4 %float_5
%92 = OpCompositeConstruct %mat2v2float %90 %91
%94 = OpCompositeConstruct %v2float %float_6 %float_0
%95 = OpCompositeConstruct %v2float %float_0 %float_6
%93 = OpCompositeConstruct %mat2v2float %94 %95
%96 = OpCompositeConstruct %_arr_mat2v2float_int_3 %87 %92 %93
OpStore %m3 %96
%101 = OpCompositeConstruct %S %int_1 %int_2
%102 = OpCompositeConstruct %S %int_3 %int_4
%103 = OpCompositeConstruct %S %int_5 %int_6
%104 = OpCompositeConstruct %_arr_S_int_3 %101 %102 %103
OpStore %s1 %104
%106 = OpCompositeConstruct %S %int_1 %int_2
%108 = OpCompositeConstruct %S %int_0 %int_0
%109 = OpCompositeConstruct %S %int_5 %int_6
%110 = OpCompositeConstruct %_arr_S_int_3 %106 %108 %109
OpStore %s2 %110
%112 = OpCompositeConstruct %S %int_1 %int_2
%113 = OpCompositeConstruct %S %int_3 %int_4
%114 = OpCompositeConstruct %S %int_5 %int_6
%115 = OpCompositeConstruct %_arr_S_int_3 %112 %113 %114
OpStore %s3 %115
%117 = OpLoad %_arr_float_int_4 %f1
%118 = OpLoad %_arr_float_int_4 %f2
%119 = OpCompositeExtract %float %117 0
%120 = OpCompositeExtract %float %118 0
%121 = OpFOrdEqual %bool %119 %120
%122 = OpCompositeExtract %float %117 1
%123 = OpCompositeExtract %float %118 1
%124 = OpFOrdEqual %bool %122 %123
%125 = OpLogicalAnd %bool %124 %121
%126 = OpCompositeExtract %float %117 2
%127 = OpCompositeExtract %float %118 2
%128 = OpFOrdEqual %bool %126 %127
%129 = OpLogicalAnd %bool %128 %125
%130 = OpCompositeExtract %float %117 3
%131 = OpCompositeExtract %float %118 3
%132 = OpFOrdEqual %bool %130 %131
%133 = OpLogicalAnd %bool %132 %129
OpSelectionMerge %135 None
OpBranchConditional %133 %134 %135
%134 = OpLabel
%136 = OpLoad %_arr_float_int_4 %f1
%137 = OpLoad %_arr_float_int_4 %f3
%138 = OpCompositeExtract %float %136 0
%139 = OpCompositeExtract %float %137 0
%140 = OpFUnordNotEqual %bool %138 %139
%141 = OpCompositeExtract %float %136 1
%142 = OpCompositeExtract %float %137 1
%143 = OpFUnordNotEqual %bool %141 %142
%144 = OpLogicalOr %bool %143 %140
%145 = OpCompositeExtract %float %136 2
%146 = OpCompositeExtract %float %137 2
%147 = OpFUnordNotEqual %bool %145 %146
%148 = OpLogicalOr %bool %147 %144
%149 = OpCompositeExtract %float %136 3
%150 = OpCompositeExtract %float %137 3
%151 = OpFUnordNotEqual %bool %149 %150
%152 = OpLogicalOr %bool %151 %148
OpBranch %135
%135 = OpLabel
%153 = OpPhi %bool %false %25 %152 %134
OpSelectionMerge %155 None
OpBranchConditional %153 %154 %155
%154 = OpLabel
%156 = OpLoad %_arr_v3int_int_2 %v1
%157 = OpLoad %_arr_v3int_int_2 %v2
%158 = OpCompositeExtract %v3int %156 0
%159 = OpCompositeExtract %v3int %157 0
%160 = OpIEqual %v3bool %158 %159
%162 = OpAll %bool %160
%163 = OpCompositeExtract %v3int %156 1
%164 = OpCompositeExtract %v3int %157 1
%165 = OpIEqual %v3bool %163 %164
%166 = OpAll %bool %165
%167 = OpLogicalAnd %bool %166 %162
OpBranch %155
%155 = OpLabel
%168 = OpPhi %bool %false %135 %167 %154
OpSelectionMerge %170 None
OpBranchConditional %168 %169 %170
%169 = OpLabel
%171 = OpLoad %_arr_v3int_int_2 %v1
%172 = OpLoad %_arr_v3int_int_2 %v3
%173 = OpCompositeExtract %v3int %171 0
%174 = OpCompositeExtract %v3int %172 0
%175 = OpINotEqual %v3bool %173 %174
%176 = OpAny %bool %175
%177 = OpCompositeExtract %v3int %171 1
%178 = OpCompositeExtract %v3int %172 1
%179 = OpINotEqual %v3bool %177 %178
%180 = OpAny %bool %179
%181 = OpLogicalOr %bool %180 %176
OpBranch %170
%170 = OpLabel
%182 = OpPhi %bool %false %155 %181 %169
OpSelectionMerge %184 None
OpBranchConditional %182 %183 %184
%183 = OpLabel
%185 = OpLoad %_arr_mat2v2float_int_3 %m1
%186 = OpLoad %_arr_mat2v2float_int_3 %m2
%187 = OpCompositeExtract %mat2v2float %185 0
%188 = OpCompositeExtract %mat2v2float %186 0
%190 = OpCompositeExtract %v2float %187 0
%191 = OpCompositeExtract %v2float %188 0
%192 = OpFOrdEqual %v2bool %190 %191
%193 = OpAll %bool %192
%194 = OpCompositeExtract %v2float %187 1
%195 = OpCompositeExtract %v2float %188 1
%196 = OpFOrdEqual %v2bool %194 %195
%197 = OpAll %bool %196
%198 = OpLogicalAnd %bool %193 %197
%199 = OpCompositeExtract %mat2v2float %185 1
%200 = OpCompositeExtract %mat2v2float %186 1
%201 = OpCompositeExtract %v2float %199 0
%202 = OpCompositeExtract %v2float %200 0
%203 = OpFOrdEqual %v2bool %201 %202
%204 = OpAll %bool %203
%205 = OpCompositeExtract %v2float %199 1
%206 = OpCompositeExtract %v2float %200 1
%207 = OpFOrdEqual %v2bool %205 %206
%208 = OpAll %bool %207
%209 = OpLogicalAnd %bool %204 %208
%210 = OpLogicalAnd %bool %209 %198
%211 = OpCompositeExtract %mat2v2float %185 2
%212 = OpCompositeExtract %mat2v2float %186 2
%213 = OpCompositeExtract %v2float %211 0
%214 = OpCompositeExtract %v2float %212 0
%215 = OpFOrdEqual %v2bool %213 %214
%216 = OpAll %bool %215
%217 = OpCompositeExtract %v2float %211 1
%218 = OpCompositeExtract %v2float %212 1
%219 = OpFOrdEqual %v2bool %217 %218
%220 = OpAll %bool %219
%221 = OpLogicalAnd %bool %216 %220
%222 = OpLogicalAnd %bool %221 %210
OpBranch %184
%184 = OpLabel
%223 = OpPhi %bool %false %170 %222 %183
OpSelectionMerge %225 None
OpBranchConditional %223 %224 %225
%224 = OpLabel
%226 = OpLoad %_arr_mat2v2float_int_3 %m1
%227 = OpLoad %_arr_mat2v2float_int_3 %m3
%228 = OpCompositeExtract %mat2v2float %226 0
%229 = OpCompositeExtract %mat2v2float %227 0
%230 = OpCompositeExtract %v2float %228 0
%231 = OpCompositeExtract %v2float %229 0
%232 = OpFUnordNotEqual %v2bool %230 %231
%233 = OpAny %bool %232
%234 = OpCompositeExtract %v2float %228 1
%235 = OpCompositeExtract %v2float %229 1
%236 = OpFUnordNotEqual %v2bool %234 %235
%237 = OpAny %bool %236
%238 = OpLogicalOr %bool %233 %237
%239 = OpCompositeExtract %mat2v2float %226 1
%240 = OpCompositeExtract %mat2v2float %227 1
%241 = OpCompositeExtract %v2float %239 0
%242 = OpCompositeExtract %v2float %240 0
%243 = OpFUnordNotEqual %v2bool %241 %242
%244 = OpAny %bool %243
%245 = OpCompositeExtract %v2float %239 1
%246 = OpCompositeExtract %v2float %240 1
%247 = OpFUnordNotEqual %v2bool %245 %246
%248 = OpAny %bool %247
%249 = OpLogicalOr %bool %244 %248
%250 = OpLogicalOr %bool %249 %238
%251 = OpCompositeExtract %mat2v2float %226 2
%252 = OpCompositeExtract %mat2v2float %227 2
%253 = OpCompositeExtract %v2float %251 0
%254 = OpCompositeExtract %v2float %252 0
%255 = OpFUnordNotEqual %v2bool %253 %254
%256 = OpAny %bool %255
%257 = OpCompositeExtract %v2float %251 1
%258 = OpCompositeExtract %v2float %252 1
%259 = OpFUnordNotEqual %v2bool %257 %258
%260 = OpAny %bool %259
%261 = OpLogicalOr %bool %256 %260
%262 = OpLogicalOr %bool %261 %250
OpBranch %225
%225 = OpLabel
%263 = OpPhi %bool %false %184 %262 %224
OpSelectionMerge %265 None
OpBranchConditional %263 %264 %265
%264 = OpLabel
%266 = OpLoad %_arr_S_int_3 %s1
%267 = OpLoad %_arr_S_int_3 %s2
%268 = OpCompositeExtract %S %266 0
%269 = OpCompositeExtract %S %267 0
%270 = OpCompositeExtract %int %268 0
%271 = OpCompositeExtract %int %269 0
%272 = OpINotEqual %bool %270 %271
%273 = OpCompositeExtract %int %268 1
%274 = OpCompositeExtract %int %269 1
%275 = OpINotEqual %bool %273 %274
%276 = OpLogicalOr %bool %275 %272
%277 = OpCompositeExtract %S %266 1
%278 = OpCompositeExtract %S %267 1
%279 = OpCompositeExtract %int %277 0
%280 = OpCompositeExtract %int %278 0
%281 = OpINotEqual %bool %279 %280
%282 = OpCompositeExtract %int %277 1
%283 = OpCompositeExtract %int %278 1
%284 = OpINotEqual %bool %282 %283
%285 = OpLogicalOr %bool %284 %281
%286 = OpLogicalOr %bool %285 %276
%287 = OpCompositeExtract %S %266 2
%288 = OpCompositeExtract %S %267 2
%289 = OpCompositeExtract %int %287 0
%290 = OpCompositeExtract %int %288 0
%291 = OpINotEqual %bool %289 %290
%292 = OpCompositeExtract %int %287 1
%293 = OpCompositeExtract %int %288 1
%294 = OpINotEqual %bool %292 %293
%295 = OpLogicalOr %bool %294 %291
%296 = OpLogicalOr %bool %295 %286
OpBranch %265
%265 = OpLabel
%297 = OpPhi %bool %false %225 %296 %264
OpSelectionMerge %299 None
OpBranchConditional %297 %298 %299
%298 = OpLabel
%300 = OpLoad %_arr_S_int_3 %s3
%301 = OpLoad %_arr_S_int_3 %s1
%302 = OpCompositeExtract %S %300 0
%303 = OpCompositeExtract %S %301 0
%304 = OpCompositeExtract %int %302 0
%305 = OpCompositeExtract %int %303 0
%306 = OpIEqual %bool %304 %305
%307 = OpCompositeExtract %int %302 1
%308 = OpCompositeExtract %int %303 1
%309 = OpIEqual %bool %307 %308
%310 = OpLogicalAnd %bool %309 %306
%311 = OpCompositeExtract %S %300 1
%312 = OpCompositeExtract %S %301 1
%313 = OpCompositeExtract %int %311 0
%314 = OpCompositeExtract %int %312 0
%315 = OpIEqual %bool %313 %314
%316 = OpCompositeExtract %int %311 1
%317 = OpCompositeExtract %int %312 1
%318 = OpIEqual %bool %316 %317
%319 = OpLogicalAnd %bool %318 %315
%320 = OpLogicalAnd %bool %319 %310
%321 = OpCompositeExtract %S %300 2
%322 = OpCompositeExtract %S %301 2
%323 = OpCompositeExtract %int %321 0
%324 = OpCompositeExtract %int %322 0
%325 = OpIEqual %bool %323 %324
%326 = OpCompositeExtract %int %321 1
%327 = OpCompositeExtract %int %322 1
%328 = OpIEqual %bool %326 %327
%329 = OpLogicalAnd %bool %328 %325
%330 = OpLogicalAnd %bool %329 %320
OpBranch %299
%299 = OpLabel
%331 = OpPhi %bool %false %265 %330 %298
OpSelectionMerge %336 None
OpBranchConditional %331 %334 %335
%82 = OpCompositeConstruct %mat2v2float %71 %72
%83 = OpCompositeConstruct %_arr_mat2v2float_int_3 %76 %79 %82
OpStore %m2 %83
%86 = OpCompositeConstruct %v2float %float_1 %float_0
%87 = OpCompositeConstruct %v2float %float_0 %float_1
%85 = OpCompositeConstruct %mat2v2float %86 %87
%90 = OpCompositeConstruct %mat2v2float %88 %89
%92 = OpCompositeConstruct %v2float %float_6 %float_0
%93 = OpCompositeConstruct %v2float %float_0 %float_6
%91 = OpCompositeConstruct %mat2v2float %92 %93
%94 = OpCompositeConstruct %_arr_mat2v2float_int_3 %85 %90 %91
OpStore %m3 %94
%99 = OpCompositeConstruct %S %int_1 %int_2
%100 = OpCompositeConstruct %S %int_3 %int_4
%101 = OpCompositeConstruct %S %int_5 %int_6
%102 = OpCompositeConstruct %_arr_S_int_3 %99 %100 %101
OpStore %s1 %102
%104 = OpCompositeConstruct %S %int_1 %int_2
%106 = OpCompositeConstruct %S %int_0 %int_0
%107 = OpCompositeConstruct %S %int_5 %int_6
%108 = OpCompositeConstruct %_arr_S_int_3 %104 %106 %107
OpStore %s2 %108
%110 = OpCompositeConstruct %S %int_1 %int_2
%111 = OpCompositeConstruct %S %int_3 %int_4
%112 = OpCompositeConstruct %S %int_5 %int_6
%113 = OpCompositeConstruct %_arr_S_int_3 %110 %111 %112
OpStore %s3 %113
%115 = OpLoad %_arr_float_int_4 %f1
%116 = OpLoad %_arr_float_int_4 %f2
%117 = OpCompositeExtract %float %115 0
%118 = OpCompositeExtract %float %116 0
%119 = OpFOrdEqual %bool %117 %118
%120 = OpCompositeExtract %float %115 1
%121 = OpCompositeExtract %float %116 1
%122 = OpFOrdEqual %bool %120 %121
%123 = OpLogicalAnd %bool %122 %119
%124 = OpCompositeExtract %float %115 2
%125 = OpCompositeExtract %float %116 2
%126 = OpFOrdEqual %bool %124 %125
%127 = OpLogicalAnd %bool %126 %123
%128 = OpCompositeExtract %float %115 3
%129 = OpCompositeExtract %float %116 3
%130 = OpFOrdEqual %bool %128 %129
%131 = OpLogicalAnd %bool %130 %127
OpSelectionMerge %133 None
OpBranchConditional %131 %132 %133
%132 = OpLabel
%134 = OpLoad %_arr_float_int_4 %f1
%135 = OpLoad %_arr_float_int_4 %f3
%136 = OpCompositeExtract %float %134 0
%137 = OpCompositeExtract %float %135 0
%138 = OpFUnordNotEqual %bool %136 %137
%139 = OpCompositeExtract %float %134 1
%140 = OpCompositeExtract %float %135 1
%141 = OpFUnordNotEqual %bool %139 %140
%142 = OpLogicalOr %bool %141 %138
%143 = OpCompositeExtract %float %134 2
%144 = OpCompositeExtract %float %135 2
%145 = OpFUnordNotEqual %bool %143 %144
%146 = OpLogicalOr %bool %145 %142
%147 = OpCompositeExtract %float %134 3
%148 = OpCompositeExtract %float %135 3
%149 = OpFUnordNotEqual %bool %147 %148
%150 = OpLogicalOr %bool %149 %146
OpBranch %133
%133 = OpLabel
%151 = OpPhi %bool %false %25 %150 %132
OpSelectionMerge %153 None
OpBranchConditional %151 %152 %153
%152 = OpLabel
%154 = OpLoad %_arr_v3int_int_2 %v1
%155 = OpLoad %_arr_v3int_int_2 %v2
%156 = OpCompositeExtract %v3int %154 0
%157 = OpCompositeExtract %v3int %155 0
%158 = OpIEqual %v3bool %156 %157
%160 = OpAll %bool %158
%161 = OpCompositeExtract %v3int %154 1
%162 = OpCompositeExtract %v3int %155 1
%163 = OpIEqual %v3bool %161 %162
%164 = OpAll %bool %163
%165 = OpLogicalAnd %bool %164 %160
OpBranch %153
%153 = OpLabel
%166 = OpPhi %bool %false %133 %165 %152
OpSelectionMerge %168 None
OpBranchConditional %166 %167 %168
%167 = OpLabel
%169 = OpLoad %_arr_v3int_int_2 %v1
%170 = OpLoad %_arr_v3int_int_2 %v3
%171 = OpCompositeExtract %v3int %169 0
%172 = OpCompositeExtract %v3int %170 0
%173 = OpINotEqual %v3bool %171 %172
%174 = OpAny %bool %173
%175 = OpCompositeExtract %v3int %169 1
%176 = OpCompositeExtract %v3int %170 1
%177 = OpINotEqual %v3bool %175 %176
%178 = OpAny %bool %177
%179 = OpLogicalOr %bool %178 %174
OpBranch %168
%168 = OpLabel
%180 = OpPhi %bool %false %153 %179 %167
OpSelectionMerge %182 None
OpBranchConditional %180 %181 %182
%181 = OpLabel
%183 = OpLoad %_arr_mat2v2float_int_3 %m1
%184 = OpLoad %_arr_mat2v2float_int_3 %m2
%185 = OpCompositeExtract %mat2v2float %183 0
%186 = OpCompositeExtract %mat2v2float %184 0
%188 = OpCompositeExtract %v2float %185 0
%189 = OpCompositeExtract %v2float %186 0
%190 = OpFOrdEqual %v2bool %188 %189
%191 = OpAll %bool %190
%192 = OpCompositeExtract %v2float %185 1
%193 = OpCompositeExtract %v2float %186 1
%194 = OpFOrdEqual %v2bool %192 %193
%195 = OpAll %bool %194
%196 = OpLogicalAnd %bool %191 %195
%197 = OpCompositeExtract %mat2v2float %183 1
%198 = OpCompositeExtract %mat2v2float %184 1
%199 = OpCompositeExtract %v2float %197 0
%200 = OpCompositeExtract %v2float %198 0
%201 = OpFOrdEqual %v2bool %199 %200
%202 = OpAll %bool %201
%203 = OpCompositeExtract %v2float %197 1
%204 = OpCompositeExtract %v2float %198 1
%205 = OpFOrdEqual %v2bool %203 %204
%206 = OpAll %bool %205
%207 = OpLogicalAnd %bool %202 %206
%208 = OpLogicalAnd %bool %207 %196
%209 = OpCompositeExtract %mat2v2float %183 2
%210 = OpCompositeExtract %mat2v2float %184 2
%211 = OpCompositeExtract %v2float %209 0
%212 = OpCompositeExtract %v2float %210 0
%213 = OpFOrdEqual %v2bool %211 %212
%214 = OpAll %bool %213
%215 = OpCompositeExtract %v2float %209 1
%216 = OpCompositeExtract %v2float %210 1
%217 = OpFOrdEqual %v2bool %215 %216
%218 = OpAll %bool %217
%219 = OpLogicalAnd %bool %214 %218
%220 = OpLogicalAnd %bool %219 %208
OpBranch %182
%182 = OpLabel
%221 = OpPhi %bool %false %168 %220 %181
OpSelectionMerge %223 None
OpBranchConditional %221 %222 %223
%222 = OpLabel
%224 = OpLoad %_arr_mat2v2float_int_3 %m1
%225 = OpLoad %_arr_mat2v2float_int_3 %m3
%226 = OpCompositeExtract %mat2v2float %224 0
%227 = OpCompositeExtract %mat2v2float %225 0
%228 = OpCompositeExtract %v2float %226 0
%229 = OpCompositeExtract %v2float %227 0
%230 = OpFUnordNotEqual %v2bool %228 %229
%231 = OpAny %bool %230
%232 = OpCompositeExtract %v2float %226 1
%233 = OpCompositeExtract %v2float %227 1
%234 = OpFUnordNotEqual %v2bool %232 %233
%235 = OpAny %bool %234
%236 = OpLogicalOr %bool %231 %235
%237 = OpCompositeExtract %mat2v2float %224 1
%238 = OpCompositeExtract %mat2v2float %225 1
%239 = OpCompositeExtract %v2float %237 0
%240 = OpCompositeExtract %v2float %238 0
%241 = OpFUnordNotEqual %v2bool %239 %240
%242 = OpAny %bool %241
%243 = OpCompositeExtract %v2float %237 1
%244 = OpCompositeExtract %v2float %238 1
%245 = OpFUnordNotEqual %v2bool %243 %244
%246 = OpAny %bool %245
%247 = OpLogicalOr %bool %242 %246
%248 = OpLogicalOr %bool %247 %236
%249 = OpCompositeExtract %mat2v2float %224 2
%250 = OpCompositeExtract %mat2v2float %225 2
%251 = OpCompositeExtract %v2float %249 0
%252 = OpCompositeExtract %v2float %250 0
%253 = OpFUnordNotEqual %v2bool %251 %252
%254 = OpAny %bool %253
%255 = OpCompositeExtract %v2float %249 1
%256 = OpCompositeExtract %v2float %250 1
%257 = OpFUnordNotEqual %v2bool %255 %256
%258 = OpAny %bool %257
%259 = OpLogicalOr %bool %254 %258
%260 = OpLogicalOr %bool %259 %248
OpBranch %223
%223 = OpLabel
%261 = OpPhi %bool %false %182 %260 %222
OpSelectionMerge %263 None
OpBranchConditional %261 %262 %263
%262 = OpLabel
%264 = OpLoad %_arr_S_int_3 %s1
%265 = OpLoad %_arr_S_int_3 %s2
%266 = OpCompositeExtract %S %264 0
%267 = OpCompositeExtract %S %265 0
%268 = OpCompositeExtract %int %266 0
%269 = OpCompositeExtract %int %267 0
%270 = OpINotEqual %bool %268 %269
%271 = OpCompositeExtract %int %266 1
%272 = OpCompositeExtract %int %267 1
%273 = OpINotEqual %bool %271 %272
%274 = OpLogicalOr %bool %273 %270
%275 = OpCompositeExtract %S %264 1
%276 = OpCompositeExtract %S %265 1
%277 = OpCompositeExtract %int %275 0
%278 = OpCompositeExtract %int %276 0
%279 = OpINotEqual %bool %277 %278
%280 = OpCompositeExtract %int %275 1
%281 = OpCompositeExtract %int %276 1
%282 = OpINotEqual %bool %280 %281
%283 = OpLogicalOr %bool %282 %279
%284 = OpLogicalOr %bool %283 %274
%285 = OpCompositeExtract %S %264 2
%286 = OpCompositeExtract %S %265 2
%287 = OpCompositeExtract %int %285 0
%288 = OpCompositeExtract %int %286 0
%289 = OpINotEqual %bool %287 %288
%290 = OpCompositeExtract %int %285 1
%291 = OpCompositeExtract %int %286 1
%292 = OpINotEqual %bool %290 %291
%293 = OpLogicalOr %bool %292 %289
%294 = OpLogicalOr %bool %293 %284
OpBranch %263
%263 = OpLabel
%295 = OpPhi %bool %false %223 %294 %262
OpSelectionMerge %297 None
OpBranchConditional %295 %296 %297
%296 = OpLabel
%298 = OpLoad %_arr_S_int_3 %s3
%299 = OpLoad %_arr_S_int_3 %s1
%300 = OpCompositeExtract %S %298 0
%301 = OpCompositeExtract %S %299 0
%302 = OpCompositeExtract %int %300 0
%303 = OpCompositeExtract %int %301 0
%304 = OpIEqual %bool %302 %303
%305 = OpCompositeExtract %int %300 1
%306 = OpCompositeExtract %int %301 1
%307 = OpIEqual %bool %305 %306
%308 = OpLogicalAnd %bool %307 %304
%309 = OpCompositeExtract %S %298 1
%310 = OpCompositeExtract %S %299 1
%311 = OpCompositeExtract %int %309 0
%312 = OpCompositeExtract %int %310 0
%313 = OpIEqual %bool %311 %312
%314 = OpCompositeExtract %int %309 1
%315 = OpCompositeExtract %int %310 1
%316 = OpIEqual %bool %314 %315
%317 = OpLogicalAnd %bool %316 %313
%318 = OpLogicalAnd %bool %317 %308
%319 = OpCompositeExtract %S %298 2
%320 = OpCompositeExtract %S %299 2
%321 = OpCompositeExtract %int %319 0
%322 = OpCompositeExtract %int %320 0
%323 = OpIEqual %bool %321 %322
%324 = OpCompositeExtract %int %319 1
%325 = OpCompositeExtract %int %320 1
%326 = OpIEqual %bool %324 %325
%327 = OpLogicalAnd %bool %326 %323
%328 = OpLogicalAnd %bool %327 %318
OpBranch %297
%297 = OpLabel
%329 = OpPhi %bool %false %263 %328 %296
OpSelectionMerge %334 None
OpBranchConditional %329 %332 %333
%332 = OpLabel
%335 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%337 = OpLoad %v4float %335
OpStore %330 %337
OpBranch %334
%333 = OpLabel
%338 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%339 = OpLoad %v4float %338
OpStore %330 %339
OpBranch %334
%334 = OpLabel
%337 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%339 = OpLoad %v4float %337
OpStore %332 %339
OpBranch %336
%335 = OpLabel
%340 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%341 = OpLoad %v4float %340
OpStore %332 %341
OpBranch %336
%336 = OpLabel
%342 = OpLoad %v4float %332
OpReturnValue %342
%340 = OpLoad %v4float %330
OpReturnValue %340
OpFunctionEnd

View File

@ -51,26 +51,23 @@ OpDecorate %_arr_int_int_1 ArrayStride 16
OpDecorate %_arr_v4int_int_1 ArrayStride 16
OpDecorate %_arr_mat3v3float_int_1 ArrayStride 48
OpDecorate %80 RelaxedPrecision
OpDecorate %81 RelaxedPrecision
OpDecorate %82 RelaxedPrecision
OpDecorate %83 RelaxedPrecision
OpDecorate %_arr_v4float_int_1 ArrayStride 16
OpDecorate %95 RelaxedPrecision
OpDecorate %97 RelaxedPrecision
OpDecorate %98 RelaxedPrecision
OpDecorate %100 RelaxedPrecision
OpDecorate %99 RelaxedPrecision
OpDecorate %101 RelaxedPrecision
OpDecorate %102 RelaxedPrecision
OpDecorate %104 RelaxedPrecision
OpDecorate %105 RelaxedPrecision
OpDecorate %106 RelaxedPrecision
OpDecorate %103 RelaxedPrecision
OpDecorate %l RelaxedPrecision
OpDecorate %119 RelaxedPrecision
OpDecorate %125 RelaxedPrecision
OpDecorate %126 RelaxedPrecision
OpDecorate %133 RelaxedPrecision
OpDecorate %134 RelaxedPrecision
OpDecorate %116 RelaxedPrecision
OpDecorate %122 RelaxedPrecision
OpDecorate %123 RelaxedPrecision
OpDecorate %130 RelaxedPrecision
OpDecorate %131 RelaxedPrecision
OpDecorate %132 RelaxedPrecision
OpDecorate %135 RelaxedPrecision
OpDecorate %138 RelaxedPrecision
OpDecorate %142 RelaxedPrecision
OpDecorate %139 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -118,6 +115,9 @@ OpDecorate %142 RelaxedPrecision
%float_7 = OpConstant %float 7
%float_8 = OpConstant %float 8
%float_9 = OpConstant %float 9
%59 = OpConstantComposite %v3float %float_1 %float_2 %float_3
%60 = OpConstantComposite %v3float %float_4 %float_5 %float_6
%61 = OpConstantComposite %v3float %float_7 %float_8 %float_9
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_ptr_Function_float = OpTypePointer Function %float
%_arr_int_int_1 = OpTypeArray %int %int_1
@ -128,13 +128,13 @@ OpDecorate %142 RelaxedPrecision
%_ptr_Function__arr_mat3v3float_int_1 = OpTypePointer Function %_arr_mat3v3float_int_1
%_arr_v4float_int_1 = OpTypeArray %v4float %int_1
%_ptr_Function__arr_v4float_int_1 = OpTypePointer Function %_arr_v4float_int_1
%90 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
%87 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
%_ptr_Function_S = OpTypePointer Function %S
%98 = OpConstantComposite %v3float %float_9 %float_9 %float_9
%102 = OpConstantComposite %v2float %float_5 %float_5
%106 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%95 = OpConstantComposite %v3float %float_9 %float_9 %float_9
%99 = OpConstantComposite %v2float %float_5 %float_5
%103 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%_ptr_Private_float = OpTypePointer Private %float
%119 = OpConstantComposite %v4float %float_2 %float_2 %float_2 %float_2
%116 = OpConstantComposite %v4float %float_2 %float_2 %float_2 %float_2
%_ptr_Function_v3float = OpTypePointer Function %v3float
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%_entrypoint_v = OpFunction %void None %24
@ -160,9 +160,6 @@ OpFunctionEnd
%l = OpVariable %_ptr_Function_float Function
OpStore %i %int_0
OpStore %i4 %45
%59 = OpCompositeConstruct %v3float %float_1 %float_2 %float_3
%60 = OpCompositeConstruct %v3float %float_4 %float_5 %float_6
%61 = OpCompositeConstruct %v3float %float_7 %float_8 %float_9
%62 = OpCompositeConstruct %mat3v3float %59 %60 %61
OpStore %f3x3 %62
%65 = OpAccessChain %_ptr_Function_float %x %int_3
@ -174,73 +171,70 @@ OpStore %x %68
OpStore %72 %int_0
%76 = OpAccessChain %_ptr_Function_v4int %ai4 %int_0
OpStore %76 %45
%80 = OpCompositeConstruct %v3float %float_1 %float_2 %float_3
%81 = OpCompositeConstruct %v3float %float_4 %float_5 %float_6
%82 = OpCompositeConstruct %v3float %float_7 %float_8 %float_9
%83 = OpCompositeConstruct %mat3v3float %80 %81 %82
%84 = OpAccessChain %_ptr_Function_mat3v3float %ah2x4 %int_0
OpStore %84 %83
%80 = OpCompositeConstruct %mat3v3float %59 %60 %61
%81 = OpAccessChain %_ptr_Function_mat3v3float %ah2x4 %int_0
OpStore %81 %80
%85 = OpAccessChain %_ptr_Function_v4float %af4 %int_0
%86 = OpAccessChain %_ptr_Function_float %85 %int_0
OpStore %86 %float_0
%88 = OpAccessChain %_ptr_Function_v4float %af4 %int_0
%89 = OpAccessChain %_ptr_Function_float %88 %int_0
OpStore %89 %float_0
%91 = OpAccessChain %_ptr_Function_v4float %af4 %int_0
%92 = OpLoad %v4float %91
%93 = OpVectorShuffle %v4float %92 %90 6 4 7 5
OpStore %91 %93
%96 = OpAccessChain %_ptr_Function_float %s %int_0
OpStore %96 %float_0
%97 = OpAccessChain %_ptr_Function_float %s %int_1 %int_1
OpStore %97 %float_0
%99 = OpAccessChain %_ptr_Function_v4float %s %int_2
%100 = OpLoad %v4float %99
%101 = OpVectorShuffle %v4float %100 %98 5 6 4 3
OpStore %99 %101
%103 = OpAccessChain %_ptr_Function_v4float %s %int_3 %int_2
%104 = OpLoad %v4float %103
%105 = OpVectorShuffle %v4float %104 %102 0 4 2 5
OpStore %103 %105
OpStore %globalVar %106
%107 = OpAccessChain %_ptr_Private_float %globalStruct %int_0
OpStore %107 %float_0
%89 = OpLoad %v4float %88
%90 = OpVectorShuffle %v4float %89 %87 6 4 7 5
OpStore %88 %90
%93 = OpAccessChain %_ptr_Function_float %s %int_0
OpStore %93 %float_0
%94 = OpAccessChain %_ptr_Function_float %s %int_1 %int_1
OpStore %94 %float_0
%96 = OpAccessChain %_ptr_Function_v4float %s %int_2
%97 = OpLoad %v4float %96
%98 = OpVectorShuffle %v4float %97 %95 5 6 4 3
OpStore %96 %98
%100 = OpAccessChain %_ptr_Function_v4float %s %int_3 %int_2
%101 = OpLoad %v4float %100
%102 = OpVectorShuffle %v4float %101 %99 0 4 2 5
OpStore %100 %102
OpStore %globalVar %103
%104 = OpAccessChain %_ptr_Private_float %globalStruct %int_0
OpStore %104 %float_0
OpStore %l %float_0
%110 = OpAccessChain %_ptr_Function_int %ai %int_0
%111 = OpLoad %int %110
%112 = OpAccessChain %_ptr_Function_v4int %ai4 %int_0
%113 = OpLoad %v4int %112
%114 = OpCompositeExtract %int %113 0
%115 = OpIAdd %int %111 %114
OpStore %110 %115
%116 = OpAccessChain %_ptr_Function_float %s %int_0
OpStore %116 %float_1
%117 = OpAccessChain %_ptr_Function_float %s %int_1 %int_0
OpStore %117 %float_2
%118 = OpAccessChain %_ptr_Function_v4float %s %int_2
OpStore %118 %90
%120 = OpAccessChain %_ptr_Function_v4float %s %int_3 %int_0
OpStore %120 %119
%121 = OpAccessChain %_ptr_Function_v4float %af4 %int_0
%122 = OpLoad %v4float %121
%123 = OpAccessChain %_ptr_Function_v3float %ah2x4 %int_0 %int_0
%125 = OpLoad %v3float %123
%126 = OpCompositeExtract %float %125 0
%127 = OpVectorTimesScalar %v4float %122 %126
OpStore %121 %127
%128 = OpAccessChain %_ptr_Function_int %i4 %int_1
%129 = OpLoad %int %128
%130 = OpLoad %int %i
%131 = OpIMul %int %129 %130
OpStore %128 %131
%132 = OpAccessChain %_ptr_Function_float %x %int_1
%133 = OpLoad %float %132
%134 = OpLoad %float %l
%135 = OpFMul %float %133 %134
OpStore %132 %135
%136 = OpAccessChain %_ptr_Function_float %s %int_0
%137 = OpLoad %float %136
%138 = OpLoad %float %l
%139 = OpFMul %float %137 %138
OpStore %136 %139
%140 = OpAccessChain %_ptr_Uniform_v4float %19 %int_0
%142 = OpLoad %v4float %140
OpReturnValue %142
%107 = OpAccessChain %_ptr_Function_int %ai %int_0
%108 = OpLoad %int %107
%109 = OpAccessChain %_ptr_Function_v4int %ai4 %int_0
%110 = OpLoad %v4int %109
%111 = OpCompositeExtract %int %110 0
%112 = OpIAdd %int %108 %111
OpStore %107 %112
%113 = OpAccessChain %_ptr_Function_float %s %int_0
OpStore %113 %float_1
%114 = OpAccessChain %_ptr_Function_float %s %int_1 %int_0
OpStore %114 %float_2
%115 = OpAccessChain %_ptr_Function_v4float %s %int_2
OpStore %115 %87
%117 = OpAccessChain %_ptr_Function_v4float %s %int_3 %int_0
OpStore %117 %116
%118 = OpAccessChain %_ptr_Function_v4float %af4 %int_0
%119 = OpLoad %v4float %118
%120 = OpAccessChain %_ptr_Function_v3float %ah2x4 %int_0 %int_0
%122 = OpLoad %v3float %120
%123 = OpCompositeExtract %float %122 0
%124 = OpVectorTimesScalar %v4float %119 %123
OpStore %118 %124
%125 = OpAccessChain %_ptr_Function_int %i4 %int_1
%126 = OpLoad %int %125
%127 = OpLoad %int %i
%128 = OpIMul %int %126 %127
OpStore %125 %128
%129 = OpAccessChain %_ptr_Function_float %x %int_1
%130 = OpLoad %float %129
%131 = OpLoad %float %l
%132 = OpFMul %float %130 %131
OpStore %129 %132
%133 = OpAccessChain %_ptr_Function_float %s %int_0
%134 = OpLoad %float %133
%135 = OpLoad %float %l
%136 = OpFMul %float %134 %135
OpStore %133 %136
%137 = OpAccessChain %_ptr_Uniform_v4float %19 %int_0
%139 = OpLoad %v4float %137
OpReturnValue %139
OpFunctionEnd

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -29,10 +29,10 @@ OpDecorate %10 Binding 0
OpDecorate %10 DescriptorSet 0
OpDecorate %68 RelaxedPrecision
OpDecorate %111 RelaxedPrecision
OpDecorate %166 RelaxedPrecision
OpDecorate %163 RelaxedPrecision
OpDecorate %171 RelaxedPrecision
OpDecorate %174 RelaxedPrecision
OpDecorate %177 RelaxedPrecision
OpDecorate %178 RelaxedPrecision
OpDecorate %175 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -61,11 +61,17 @@ OpDecorate %178 RelaxedPrecision
%float_1 = OpConstant %float 1
%float_2 = OpConstant %float 2
%float_3 = OpConstant %float 3
%54 = OpConstantComposite %v2float %float_1 %float_2
%55 = OpConstantComposite %v2float %float_3 %float_4
%v2bool = OpTypeVector %bool 2
%false = OpConstantFalse %bool
%mat3v3float = OpTypeMatrix %v3float 3
%91 = OpConstantComposite %v3float %float_1 %float_2 %float_3
%92 = OpConstantComposite %v3float %float_4 %float_1 %float_2
%93 = OpConstantComposite %v3float %float_3 %float_4 %float_1
%v3bool = OpTypeVector %bool 3
%mat4v4float = OpTypeMatrix %v4float 4
%140 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
%v4bool = OpTypeVector %bool 4
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%int_0 = OpConstant %int 0
@ -83,7 +89,7 @@ OpFunctionEnd
%26 = OpLabel
%f4 = OpVariable %_ptr_Function_v4float Function
%ok = OpVariable %_ptr_Function_bool Function
%167 = OpVariable %_ptr_Function_v4float Function
%164 = OpVariable %_ptr_Function_v4float Function
%29 = OpAccessChain %_ptr_Uniform_mat2v2float %10 %int_2
%33 = OpLoad %mat2v2float %29
%34 = OpCompositeExtract %float %33 0 0
@ -100,8 +106,6 @@ OpStore %f4 %38
%48 = OpCompositeExtract %float %42 2
%49 = OpCompositeConstruct %v2float %48 %float_4
%50 = OpCompositeConstruct %mat2v2float %47 %49
%54 = OpCompositeConstruct %v2float %float_1 %float_2
%55 = OpCompositeConstruct %v2float %float_3 %float_4
%56 = OpCompositeConstruct %mat2v2float %54 %55
%58 = OpCompositeExtract %v2float %50 0
%59 = OpCompositeExtract %v2float %56 0
@ -136,9 +140,6 @@ OpBranchConditional %68 %69 %70
%87 = OpCompositeExtract %float %75 3
%88 = OpCompositeConstruct %v3float %86 %87 %77
%89 = OpCompositeConstruct %mat3v3float %81 %85 %88
%91 = OpCompositeConstruct %v3float %float_1 %float_2 %float_3
%92 = OpCompositeConstruct %v3float %float_4 %float_1 %float_2
%93 = OpCompositeConstruct %v3float %float_3 %float_4 %float_1
%94 = OpCompositeConstruct %mat3v3float %91 %92 %93
%96 = OpCompositeExtract %v3float %89 0
%97 = OpCompositeExtract %v3float %94 0
@ -187,48 +188,44 @@ OpBranchConditional %111 %112 %113
%136 = OpCompositeExtract %float %121 1
%137 = OpCompositeConstruct %v4float %133 %134 %135 %136
%138 = OpCompositeConstruct %mat4v4float %127 %132 %137 %122
%140 = OpCompositeConstruct %v4float %float_1 %float_2 %float_3 %float_4
%141 = OpCompositeConstruct %v4float %float_1 %float_2 %float_3 %float_4
%142 = OpCompositeConstruct %v4float %float_1 %float_2 %float_3 %float_4
%143 = OpCompositeConstruct %v4float %float_1 %float_2 %float_3 %float_4
%144 = OpCompositeConstruct %mat4v4float %140 %141 %142 %143
%146 = OpCompositeExtract %v4float %138 0
%147 = OpCompositeExtract %v4float %144 0
%148 = OpFOrdEqual %v4bool %146 %147
%149 = OpAll %bool %148
%150 = OpCompositeExtract %v4float %138 1
%151 = OpCompositeExtract %v4float %144 1
%152 = OpFOrdEqual %v4bool %150 %151
%153 = OpAll %bool %152
%154 = OpLogicalAnd %bool %149 %153
%155 = OpCompositeExtract %v4float %138 2
%156 = OpCompositeExtract %v4float %144 2
%157 = OpFOrdEqual %v4bool %155 %156
%158 = OpAll %bool %157
%159 = OpLogicalAnd %bool %154 %158
%160 = OpCompositeExtract %v4float %138 3
%161 = OpCompositeExtract %v4float %144 3
%162 = OpFOrdEqual %v4bool %160 %161
%163 = OpAll %bool %162
%164 = OpLogicalAnd %bool %159 %163
%141 = OpCompositeConstruct %mat4v4float %140 %140 %140 %140
%143 = OpCompositeExtract %v4float %138 0
%144 = OpCompositeExtract %v4float %141 0
%145 = OpFOrdEqual %v4bool %143 %144
%146 = OpAll %bool %145
%147 = OpCompositeExtract %v4float %138 1
%148 = OpCompositeExtract %v4float %141 1
%149 = OpFOrdEqual %v4bool %147 %148
%150 = OpAll %bool %149
%151 = OpLogicalAnd %bool %146 %150
%152 = OpCompositeExtract %v4float %138 2
%153 = OpCompositeExtract %v4float %141 2
%154 = OpFOrdEqual %v4bool %152 %153
%155 = OpAll %bool %154
%156 = OpLogicalAnd %bool %151 %155
%157 = OpCompositeExtract %v4float %138 3
%158 = OpCompositeExtract %v4float %141 3
%159 = OpFOrdEqual %v4bool %157 %158
%160 = OpAll %bool %159
%161 = OpLogicalAnd %bool %156 %160
OpBranch %113
%113 = OpLabel
%165 = OpPhi %bool %false %70 %164 %112
OpStore %ok %165
%166 = OpLoad %bool %ok
OpSelectionMerge %170 None
OpBranchConditional %166 %168 %169
%168 = OpLabel
%171 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%174 = OpLoad %v4float %171
OpStore %167 %174
OpBranch %170
%169 = OpLabel
%175 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%177 = OpLoad %v4float %175
OpStore %167 %177
OpBranch %170
%170 = OpLabel
%178 = OpLoad %v4float %167
OpReturnValue %178
%162 = OpPhi %bool %false %70 %161 %112
OpStore %ok %162
%163 = OpLoad %bool %ok
OpSelectionMerge %167 None
OpBranchConditional %163 %165 %166
%165 = OpLabel
%168 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%171 = OpLoad %v4float %168
OpStore %164 %171
OpBranch %167
%166 = OpLabel
%172 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%174 = OpLoad %v4float %172
OpStore %164 %174
OpBranch %167
%167 = OpLabel
%175 = OpLoad %v4float %164
OpReturnValue %175
OpFunctionEnd

View File

@ -28,13 +28,13 @@ OpDecorate %_UniformBuffer Block
OpDecorate %10 Binding 0
OpDecorate %10 DescriptorSet 0
OpDecorate %73 RelaxedPrecision
OpDecorate %107 RelaxedPrecision
OpDecorate %149 RelaxedPrecision
OpDecorate %197 RelaxedPrecision
OpDecorate %106 RelaxedPrecision
OpDecorate %146 RelaxedPrecision
OpDecorate %192 RelaxedPrecision
OpDecorate %238 RelaxedPrecision
OpDecorate %246 RelaxedPrecision
OpDecorate %254 RelaxedPrecision
OpDecorate %257 RelaxedPrecision
OpDecorate %258 RelaxedPrecision
OpDecorate %249 RelaxedPrecision
OpDecorate %250 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -64,14 +64,21 @@ OpDecorate %258 RelaxedPrecision
%float_2 = OpConstant %float 2
%float_3 = OpConstant %float 3
%float_4 = OpConstant %float 4
%59 = OpConstantComposite %v3float %float_1 %float_2 %float_3
%60 = OpConstantComposite %v3float %float_4 %float_1 %float_2
%v3bool = OpTypeVector %bool 3
%false = OpConstantFalse %bool
%mat2v4float = OpTypeMatrix %v4float 2
%93 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
%v4bool = OpTypeVector %bool 4
%mat3v3float = OpTypeMatrix %v3float 3
%129 = OpConstantComposite %v3float %float_3 %float_4 %float_1
%mat4v2float = OpTypeMatrix %v2float 4
%168 = OpConstantComposite %v2float %float_1 %float_2
%169 = OpConstantComposite %v2float %float_3 %float_4
%v2bool = OpTypeVector %bool 2
%mat4v3float = OpTypeMatrix %v3float 4
%216 = OpConstantComposite %v3float %float_2 %float_3 %float_4
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%int_0 = OpConstant %int 0
%int_1 = OpConstant %int 1
@ -88,7 +95,7 @@ OpFunctionEnd
%26 = OpLabel
%f4 = OpVariable %_ptr_Function_v4float Function
%ok = OpVariable %_ptr_Function_bool Function
%247 = OpVariable %_ptr_Function_v4float Function
%239 = OpVariable %_ptr_Function_v4float Function
%29 = OpAccessChain %_ptr_Uniform_mat2v2float %10 %int_2
%33 = OpLoad %mat2v2float %29
%34 = OpCompositeExtract %float %33 0 0
@ -109,8 +116,6 @@ OpStore %f4 %38
%51 = OpCompositeExtract %float %43 1
%52 = OpCompositeConstruct %v3float %49 %50 %51
%53 = OpCompositeConstruct %mat2v3float %47 %52
%59 = OpCompositeConstruct %v3float %float_1 %float_2 %float_3
%60 = OpCompositeConstruct %v3float %float_4 %float_1 %float_2
%61 = OpCompositeConstruct %mat2v3float %59 %60
%63 = OpCompositeExtract %v3float %53 0
%64 = OpCompositeExtract %v3float %61 0
@ -142,183 +147,170 @@ OpBranchConditional %73 %74 %75
%89 = OpCompositeExtract %float %79 3
%90 = OpCompositeConstruct %v4float %87 %88 %89 %81
%91 = OpCompositeConstruct %mat2v4float %86 %90
%93 = OpCompositeConstruct %v4float %float_1 %float_2 %float_3 %float_4
%94 = OpCompositeConstruct %v4float %float_1 %float_2 %float_3 %float_4
%95 = OpCompositeConstruct %mat2v4float %93 %94
%97 = OpCompositeExtract %v4float %91 0
%98 = OpCompositeExtract %v4float %95 0
%99 = OpFOrdEqual %v4bool %97 %98
%100 = OpAll %bool %99
%101 = OpCompositeExtract %v4float %91 1
%102 = OpCompositeExtract %v4float %95 1
%103 = OpFOrdEqual %v4bool %101 %102
%104 = OpAll %bool %103
%105 = OpLogicalAnd %bool %100 %104
%94 = OpCompositeConstruct %mat2v4float %93 %93
%96 = OpCompositeExtract %v4float %91 0
%97 = OpCompositeExtract %v4float %94 0
%98 = OpFOrdEqual %v4bool %96 %97
%99 = OpAll %bool %98
%100 = OpCompositeExtract %v4float %91 1
%101 = OpCompositeExtract %v4float %94 1
%102 = OpFOrdEqual %v4bool %100 %101
%103 = OpAll %bool %102
%104 = OpLogicalAnd %bool %99 %103
OpBranch %75
%75 = OpLabel
%106 = OpPhi %bool %false %26 %105 %74
OpStore %ok %106
%107 = OpLoad %bool %ok
OpSelectionMerge %109 None
OpBranchConditional %107 %108 %109
%108 = OpLabel
%110 = OpLoad %v4float %f4
%111 = OpVectorShuffle %v2float %110 %110 0 1
%112 = OpLoad %v4float %f4
%113 = OpVectorShuffle %v2float %112 %112 2 3
%105 = OpPhi %bool %false %26 %104 %74
OpStore %ok %105
%106 = OpLoad %bool %ok
OpSelectionMerge %108 None
OpBranchConditional %106 %107 %108
%107 = OpLabel
%109 = OpLoad %v4float %f4
%110 = OpVectorShuffle %v2float %109 %109 0 1
%111 = OpLoad %v4float %f4
%112 = OpVectorShuffle %v2float %111 %111 2 3
%113 = OpLoad %v4float %f4
%114 = OpLoad %v4float %f4
%115 = OpLoad %v4float %f4
%116 = OpCompositeExtract %float %115 0
%117 = OpCompositeExtract %float %111 0
%118 = OpCompositeExtract %float %111 1
%119 = OpCompositeExtract %float %113 0
%120 = OpCompositeConstruct %v3float %117 %118 %119
%121 = OpCompositeExtract %float %113 1
%122 = OpCompositeExtract %float %114 0
%123 = OpCompositeExtract %float %114 1
%124 = OpCompositeConstruct %v3float %121 %122 %123
%125 = OpCompositeExtract %float %114 2
%126 = OpCompositeExtract %float %114 3
%127 = OpCompositeConstruct %v3float %125 %126 %116
%128 = OpCompositeConstruct %mat3v3float %120 %124 %127
%130 = OpCompositeConstruct %v3float %float_1 %float_2 %float_3
%131 = OpCompositeConstruct %v3float %float_4 %float_1 %float_2
%132 = OpCompositeConstruct %v3float %float_3 %float_4 %float_1
%133 = OpCompositeConstruct %mat3v3float %130 %131 %132
%134 = OpCompositeExtract %v3float %128 0
%135 = OpCompositeExtract %v3float %133 0
%136 = OpFOrdEqual %v3bool %134 %135
%137 = OpAll %bool %136
%138 = OpCompositeExtract %v3float %128 1
%139 = OpCompositeExtract %v3float %133 1
%140 = OpFOrdEqual %v3bool %138 %139
%141 = OpAll %bool %140
%142 = OpLogicalAnd %bool %137 %141
%143 = OpCompositeExtract %v3float %128 2
%144 = OpCompositeExtract %v3float %133 2
%145 = OpFOrdEqual %v3bool %143 %144
%146 = OpAll %bool %145
%147 = OpLogicalAnd %bool %142 %146
OpBranch %109
%109 = OpLabel
%148 = OpPhi %bool %false %75 %147 %108
OpStore %ok %148
%149 = OpLoad %bool %ok
OpSelectionMerge %151 None
OpBranchConditional %149 %150 %151
%150 = OpLabel
%152 = OpLoad %v4float %f4
%153 = OpVectorShuffle %v3float %152 %152 0 1 2
%154 = OpLoad %v4float %f4
%155 = OpVectorShuffle %v4float %154 %154 3 0 1 2
%156 = OpLoad %v4float %f4
%157 = OpCompositeExtract %float %156 3
%158 = OpCompositeExtract %float %153 0
%159 = OpCompositeExtract %float %153 1
%115 = OpCompositeExtract %float %114 0
%116 = OpCompositeExtract %float %110 0
%117 = OpCompositeExtract %float %110 1
%118 = OpCompositeExtract %float %112 0
%119 = OpCompositeConstruct %v3float %116 %117 %118
%120 = OpCompositeExtract %float %112 1
%121 = OpCompositeExtract %float %113 0
%122 = OpCompositeExtract %float %113 1
%123 = OpCompositeConstruct %v3float %120 %121 %122
%124 = OpCompositeExtract %float %113 2
%125 = OpCompositeExtract %float %113 3
%126 = OpCompositeConstruct %v3float %124 %125 %115
%127 = OpCompositeConstruct %mat3v3float %119 %123 %126
%130 = OpCompositeConstruct %mat3v3float %59 %60 %129
%131 = OpCompositeExtract %v3float %127 0
%132 = OpCompositeExtract %v3float %130 0
%133 = OpFOrdEqual %v3bool %131 %132
%134 = OpAll %bool %133
%135 = OpCompositeExtract %v3float %127 1
%136 = OpCompositeExtract %v3float %130 1
%137 = OpFOrdEqual %v3bool %135 %136
%138 = OpAll %bool %137
%139 = OpLogicalAnd %bool %134 %138
%140 = OpCompositeExtract %v3float %127 2
%141 = OpCompositeExtract %v3float %130 2
%142 = OpFOrdEqual %v3bool %140 %141
%143 = OpAll %bool %142
%144 = OpLogicalAnd %bool %139 %143
OpBranch %108
%108 = OpLabel
%145 = OpPhi %bool %false %75 %144 %107
OpStore %ok %145
%146 = OpLoad %bool %ok
OpSelectionMerge %148 None
OpBranchConditional %146 %147 %148
%147 = OpLabel
%149 = OpLoad %v4float %f4
%150 = OpVectorShuffle %v3float %149 %149 0 1 2
%151 = OpLoad %v4float %f4
%152 = OpVectorShuffle %v4float %151 %151 3 0 1 2
%153 = OpLoad %v4float %f4
%154 = OpCompositeExtract %float %153 3
%155 = OpCompositeExtract %float %150 0
%156 = OpCompositeExtract %float %150 1
%157 = OpCompositeConstruct %v2float %155 %156
%158 = OpCompositeExtract %float %150 2
%159 = OpCompositeExtract %float %152 0
%160 = OpCompositeConstruct %v2float %158 %159
%161 = OpCompositeExtract %float %153 2
%162 = OpCompositeExtract %float %155 0
%161 = OpCompositeExtract %float %152 1
%162 = OpCompositeExtract %float %152 2
%163 = OpCompositeConstruct %v2float %161 %162
%164 = OpCompositeExtract %float %155 1
%165 = OpCompositeExtract %float %155 2
%166 = OpCompositeConstruct %v2float %164 %165
%167 = OpCompositeExtract %float %155 3
%168 = OpCompositeConstruct %v2float %167 %157
%169 = OpCompositeConstruct %mat4v2float %160 %163 %166 %168
%171 = OpCompositeConstruct %v2float %float_1 %float_2
%172 = OpCompositeConstruct %v2float %float_3 %float_4
%173 = OpCompositeConstruct %v2float %float_1 %float_2
%174 = OpCompositeConstruct %v2float %float_3 %float_4
%175 = OpCompositeConstruct %mat4v2float %171 %172 %173 %174
%177 = OpCompositeExtract %v2float %169 0
%178 = OpCompositeExtract %v2float %175 0
%179 = OpFOrdEqual %v2bool %177 %178
%180 = OpAll %bool %179
%181 = OpCompositeExtract %v2float %169 1
%182 = OpCompositeExtract %v2float %175 1
%164 = OpCompositeExtract %float %152 3
%165 = OpCompositeConstruct %v2float %164 %154
%166 = OpCompositeConstruct %mat4v2float %157 %160 %163 %165
%170 = OpCompositeConstruct %mat4v2float %168 %169 %168 %169
%172 = OpCompositeExtract %v2float %166 0
%173 = OpCompositeExtract %v2float %170 0
%174 = OpFOrdEqual %v2bool %172 %173
%175 = OpAll %bool %174
%176 = OpCompositeExtract %v2float %166 1
%177 = OpCompositeExtract %v2float %170 1
%178 = OpFOrdEqual %v2bool %176 %177
%179 = OpAll %bool %178
%180 = OpLogicalAnd %bool %175 %179
%181 = OpCompositeExtract %v2float %166 2
%182 = OpCompositeExtract %v2float %170 2
%183 = OpFOrdEqual %v2bool %181 %182
%184 = OpAll %bool %183
%185 = OpLogicalAnd %bool %180 %184
%186 = OpCompositeExtract %v2float %169 2
%187 = OpCompositeExtract %v2float %175 2
%186 = OpCompositeExtract %v2float %166 3
%187 = OpCompositeExtract %v2float %170 3
%188 = OpFOrdEqual %v2bool %186 %187
%189 = OpAll %bool %188
%190 = OpLogicalAnd %bool %185 %189
%191 = OpCompositeExtract %v2float %169 3
%192 = OpCompositeExtract %v2float %175 3
%193 = OpFOrdEqual %v2bool %191 %192
%194 = OpAll %bool %193
%195 = OpLogicalAnd %bool %190 %194
OpBranch %151
%151 = OpLabel
%196 = OpPhi %bool %false %109 %195 %150
OpStore %ok %196
%197 = OpLoad %bool %ok
OpSelectionMerge %199 None
OpBranchConditional %197 %198 %199
%198 = OpLabel
%200 = OpLoad %v4float %f4
%201 = OpCompositeExtract %float %200 0
%202 = OpLoad %v4float %f4
%203 = OpVectorShuffle %v4float %202 %202 1 2 3 0
%204 = OpLoad %v4float %f4
%205 = OpVectorShuffle %v4float %204 %204 1 2 3 0
%206 = OpLoad %v4float %f4
%207 = OpVectorShuffle %v3float %206 %206 1 2 3
%208 = OpCompositeExtract %float %203 0
%209 = OpCompositeExtract %float %203 1
%210 = OpCompositeConstruct %v3float %201 %208 %209
%211 = OpCompositeExtract %float %203 2
%212 = OpCompositeExtract %float %203 3
%213 = OpCompositeExtract %float %205 0
%214 = OpCompositeConstruct %v3float %211 %212 %213
%215 = OpCompositeExtract %float %205 1
%216 = OpCompositeExtract %float %205 2
%217 = OpCompositeExtract %float %205 3
%218 = OpCompositeConstruct %v3float %215 %216 %217
%219 = OpCompositeConstruct %mat4v3float %210 %214 %218 %207
%221 = OpCompositeConstruct %v3float %float_1 %float_2 %float_3
%222 = OpCompositeConstruct %v3float %float_4 %float_1 %float_2
%223 = OpCompositeConstruct %v3float %float_3 %float_4 %float_1
%224 = OpCompositeConstruct %v3float %float_2 %float_3 %float_4
%225 = OpCompositeConstruct %mat4v3float %221 %222 %223 %224
%226 = OpCompositeExtract %v3float %219 0
%227 = OpCompositeExtract %v3float %225 0
%228 = OpFOrdEqual %v3bool %226 %227
%229 = OpAll %bool %228
%230 = OpCompositeExtract %v3float %219 1
%231 = OpCompositeExtract %v3float %225 1
%232 = OpFOrdEqual %v3bool %230 %231
%233 = OpAll %bool %232
%234 = OpLogicalAnd %bool %229 %233
%235 = OpCompositeExtract %v3float %219 2
%236 = OpCompositeExtract %v3float %225 2
%237 = OpFOrdEqual %v3bool %235 %236
%238 = OpAll %bool %237
%239 = OpLogicalAnd %bool %234 %238
%240 = OpCompositeExtract %v3float %219 3
%241 = OpCompositeExtract %v3float %225 3
%242 = OpFOrdEqual %v3bool %240 %241
%243 = OpAll %bool %242
%244 = OpLogicalAnd %bool %239 %243
OpBranch %199
%199 = OpLabel
%245 = OpPhi %bool %false %151 %244 %198
OpStore %ok %245
%246 = OpLoad %bool %ok
OpSelectionMerge %250 None
OpBranchConditional %246 %248 %249
%248 = OpLabel
%251 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%254 = OpLoad %v4float %251
OpStore %247 %254
OpBranch %250
%249 = OpLabel
%255 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%257 = OpLoad %v4float %255
OpStore %247 %257
OpBranch %250
%250 = OpLabel
%258 = OpLoad %v4float %247
OpReturnValue %258
OpBranch %148
%148 = OpLabel
%191 = OpPhi %bool %false %108 %190 %147
OpStore %ok %191
%192 = OpLoad %bool %ok
OpSelectionMerge %194 None
OpBranchConditional %192 %193 %194
%193 = OpLabel
%195 = OpLoad %v4float %f4
%196 = OpCompositeExtract %float %195 0
%197 = OpLoad %v4float %f4
%198 = OpVectorShuffle %v4float %197 %197 1 2 3 0
%199 = OpLoad %v4float %f4
%200 = OpVectorShuffle %v4float %199 %199 1 2 3 0
%201 = OpLoad %v4float %f4
%202 = OpVectorShuffle %v3float %201 %201 1 2 3
%203 = OpCompositeExtract %float %198 0
%204 = OpCompositeExtract %float %198 1
%205 = OpCompositeConstruct %v3float %196 %203 %204
%206 = OpCompositeExtract %float %198 2
%207 = OpCompositeExtract %float %198 3
%208 = OpCompositeExtract %float %200 0
%209 = OpCompositeConstruct %v3float %206 %207 %208
%210 = OpCompositeExtract %float %200 1
%211 = OpCompositeExtract %float %200 2
%212 = OpCompositeExtract %float %200 3
%213 = OpCompositeConstruct %v3float %210 %211 %212
%214 = OpCompositeConstruct %mat4v3float %205 %209 %213 %202
%217 = OpCompositeConstruct %mat4v3float %59 %60 %129 %216
%218 = OpCompositeExtract %v3float %214 0
%219 = OpCompositeExtract %v3float %217 0
%220 = OpFOrdEqual %v3bool %218 %219
%221 = OpAll %bool %220
%222 = OpCompositeExtract %v3float %214 1
%223 = OpCompositeExtract %v3float %217 1
%224 = OpFOrdEqual %v3bool %222 %223
%225 = OpAll %bool %224
%226 = OpLogicalAnd %bool %221 %225
%227 = OpCompositeExtract %v3float %214 2
%228 = OpCompositeExtract %v3float %217 2
%229 = OpFOrdEqual %v3bool %227 %228
%230 = OpAll %bool %229
%231 = OpLogicalAnd %bool %226 %230
%232 = OpCompositeExtract %v3float %214 3
%233 = OpCompositeExtract %v3float %217 3
%234 = OpFOrdEqual %v3bool %232 %233
%235 = OpAll %bool %234
%236 = OpLogicalAnd %bool %231 %235
OpBranch %194
%194 = OpLabel
%237 = OpPhi %bool %false %148 %236 %193
OpStore %ok %237
%238 = OpLoad %bool %ok
OpSelectionMerge %242 None
OpBranchConditional %238 %240 %241
%240 = OpLabel
%243 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%246 = OpLoad %v4float %243
OpStore %239 %246
OpBranch %242
%241 = OpLabel
%247 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%249 = OpLoad %v4float %247
OpStore %239 %249
OpBranch %242
%242 = OpLabel
%250 = OpLoad %v4float %239
OpReturnValue %250
OpFunctionEnd

View File

@ -88,6 +88,8 @@ OpDecorate %147 RelaxedPrecision
%float_2 = OpConstant %float 2
%float_3 = OpConstant %float 3
%float_4 = OpConstant %float 4
%45 = OpConstantComposite %v2float %float_1 %float_2
%46 = OpConstantComposite %v2float %float_3 %float_4
%v2bool = OpTypeVector %bool 2
%_ptr_Uniform_mat3v3float = OpTypePointer Uniform %mat3v3float
%int_3 = OpConstant %int 3
@ -96,8 +98,14 @@ OpDecorate %147 RelaxedPrecision
%float_7 = OpConstant %float 7
%float_8 = OpConstant %float 8
%float_9 = OpConstant %float 9
%71 = OpConstantComposite %v3float %float_1 %float_2 %float_3
%72 = OpConstantComposite %v3float %float_4 %float_5 %float_6
%73 = OpConstantComposite %v3float %float_7 %float_8 %float_9
%v3bool = OpTypeVector %bool 3
%float_100 = OpConstant %float 100
%115 = OpConstantComposite %v3float %float_9 %float_8 %float_7
%116 = OpConstantComposite %v3float %float_6 %float_5 %float_4
%117 = OpConstantComposite %v3float %float_3 %float_2 %float_1
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%int_0 = OpConstant %int 0
@ -122,8 +130,6 @@ OpBranchConditional %33 %34 %35
%34 = OpLabel
%36 = OpAccessChain %_ptr_Uniform_mat2v2float %10 %int_2
%40 = OpLoad %mat2v2float %36
%45 = OpCompositeConstruct %v2float %float_1 %float_2
%46 = OpCompositeConstruct %v2float %float_3 %float_4
%47 = OpCompositeConstruct %mat2v2float %45 %46
%49 = OpCompositeExtract %v2float %40 0
%50 = OpCompositeExtract %v2float %47 0
@ -144,9 +150,6 @@ OpBranchConditional %59 %60 %61
%60 = OpLabel
%62 = OpAccessChain %_ptr_Uniform_mat3v3float %10 %int_3
%65 = OpLoad %mat3v3float %62
%71 = OpCompositeConstruct %v3float %float_1 %float_2 %float_3
%72 = OpCompositeConstruct %v3float %float_4 %float_5 %float_6
%73 = OpCompositeConstruct %v3float %float_7 %float_8 %float_9
%74 = OpCompositeConstruct %mat3v3float %71 %72 %73
%76 = OpCompositeExtract %v3float %65 0
%77 = OpCompositeExtract %v3float %74 0
@ -194,9 +197,6 @@ OpBranchConditional %110 %111 %112
%111 = OpLabel
%113 = OpAccessChain %_ptr_Uniform_mat3v3float %10 %int_3
%114 = OpLoad %mat3v3float %113
%115 = OpCompositeConstruct %v3float %float_9 %float_8 %float_7
%116 = OpCompositeConstruct %v3float %float_6 %float_5 %float_4
%117 = OpCompositeConstruct %v3float %float_3 %float_2 %float_1
%118 = OpCompositeConstruct %mat3v3float %115 %116 %117
%119 = OpCompositeExtract %v3float %114 0
%120 = OpCompositeExtract %v3float %118 0

View File

@ -36,22 +36,22 @@ OpDecorate %19 Binding 0
OpDecorate %19 DescriptorSet 0
OpDecorate %48 RelaxedPrecision
OpDecorate %49 RelaxedPrecision
OpDecorate %149 RelaxedPrecision
OpDecorate %150 RelaxedPrecision
OpDecorate %151 RelaxedPrecision
OpDecorate %153 RelaxedPrecision
OpDecorate %154 RelaxedPrecision
OpDecorate %155 RelaxedPrecision
OpDecorate %156 RelaxedPrecision
OpDecorate %159 RelaxedPrecision
OpDecorate %160 RelaxedPrecision
OpDecorate %161 RelaxedPrecision
OpDecorate %162 RelaxedPrecision
OpDecorate %165 RelaxedPrecision
OpDecorate %166 RelaxedPrecision
OpDecorate %167 RelaxedPrecision
OpDecorate %168 RelaxedPrecision
OpDecorate %182 RelaxedPrecision
OpDecorate %183 RelaxedPrecision
OpDecorate %184 RelaxedPrecision
OpDecorate %331 RelaxedPrecision
OpDecorate %333 RelaxedPrecision
OpDecorate %335 RelaxedPrecision
OpDecorate %336 RelaxedPrecision
OpDecorate %334 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -84,10 +84,12 @@ OpDecorate %336 RelaxedPrecision
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%int_1 = OpConstant %int 1
%float_1 = OpConstant %float 1
%74 = OpConstantComposite %v2float %float_1 %float_1
%float_2 = OpConstant %float 2
%96 = OpConstantComposite %v2float %float_2 %float_2
%false = OpConstantFalse %bool
%int_0 = OpConstant %int 0
%145 = OpTypeFunction %v4float %_ptr_Function_v2float
%144 = OpTypeFunction %v4float %_ptr_Function_v2float
%float_3 = OpConstant %float 3
%float_4 = OpConstant %float 4
%float_0_5 = OpConstant %float 0.5
@ -135,7 +137,6 @@ OpSelectionMerge %67 None
OpSwitch %66 %67 1 %68 2 %69 3 %70 4 %71
%68 = OpLabel
%72 = OpLoad %mat2v2float %m2
%74 = OpCompositeConstruct %v2float %float_1 %float_1
%75 = OpCompositeConstruct %mat2v2float %74 %74
%76 = OpCompositeExtract %v2float %72 0
%77 = OpCompositeExtract %v2float %75 0
@ -148,87 +149,85 @@ OpStore %m2 %82
OpBranch %67
%69 = OpLabel
%83 = OpLoad %mat2v2float %m2
%84 = OpCompositeConstruct %v2float %float_1 %float_1
%85 = OpCompositeConstruct %mat2v2float %84 %84
%86 = OpCompositeExtract %v2float %83 0
%87 = OpCompositeExtract %v2float %85 0
%88 = OpFSub %v2float %86 %87
%89 = OpCompositeExtract %v2float %83 1
%90 = OpCompositeExtract %v2float %85 1
%91 = OpFSub %v2float %89 %90
%92 = OpCompositeConstruct %mat2v2float %88 %91
OpStore %m2 %92
%84 = OpCompositeConstruct %mat2v2float %74 %74
%85 = OpCompositeExtract %v2float %83 0
%86 = OpCompositeExtract %v2float %84 0
%87 = OpFSub %v2float %85 %86
%88 = OpCompositeExtract %v2float %83 1
%89 = OpCompositeExtract %v2float %84 1
%90 = OpFSub %v2float %88 %89
%91 = OpCompositeConstruct %mat2v2float %87 %90
OpStore %m2 %91
OpBranch %67
%70 = OpLabel
%93 = OpLoad %mat2v2float %m2
%95 = OpMatrixTimesScalar %mat2v2float %93 %float_2
OpStore %m2 %95
%92 = OpLoad %mat2v2float %m2
%94 = OpMatrixTimesScalar %mat2v2float %92 %float_2
OpStore %m2 %94
OpBranch %67
%71 = OpLabel
%96 = OpLoad %mat2v2float %m2
%97 = OpCompositeConstruct %v2float %float_2 %float_2
%98 = OpCompositeConstruct %mat2v2float %97 %97
%99 = OpCompositeExtract %v2float %96 0
%100 = OpCompositeExtract %v2float %98 0
%101 = OpFDiv %v2float %99 %100
%102 = OpCompositeExtract %v2float %96 1
%103 = OpCompositeExtract %v2float %98 1
%104 = OpFDiv %v2float %102 %103
%105 = OpCompositeConstruct %mat2v2float %101 %104
OpStore %m2 %105
%95 = OpLoad %mat2v2float %m2
%97 = OpCompositeConstruct %mat2v2float %96 %96
%98 = OpCompositeExtract %v2float %95 0
%99 = OpCompositeExtract %v2float %97 0
%100 = OpFDiv %v2float %98 %99
%101 = OpCompositeExtract %v2float %95 1
%102 = OpCompositeExtract %v2float %97 1
%103 = OpFDiv %v2float %101 %102
%104 = OpCompositeConstruct %mat2v2float %100 %103
OpStore %m2 %104
OpBranch %67
%67 = OpLabel
%108 = OpAccessChain %_ptr_Function_v2float %m2 %int_0
%109 = OpLoad %v2float %108
%110 = OpCompositeExtract %float %109 0
%111 = OpAccessChain %_ptr_Function_v2float %42 %int_0
%112 = OpLoad %v2float %111
%113 = OpCompositeExtract %float %112 0
%114 = OpFOrdEqual %bool %110 %113
OpSelectionMerge %116 None
OpBranchConditional %114 %115 %116
%107 = OpAccessChain %_ptr_Function_v2float %m2 %int_0
%108 = OpLoad %v2float %107
%109 = OpCompositeExtract %float %108 0
%110 = OpAccessChain %_ptr_Function_v2float %42 %int_0
%111 = OpLoad %v2float %110
%112 = OpCompositeExtract %float %111 0
%113 = OpFOrdEqual %bool %109 %112
OpSelectionMerge %115 None
OpBranchConditional %113 %114 %115
%114 = OpLabel
%116 = OpAccessChain %_ptr_Function_v2float %m2 %int_0
%117 = OpLoad %v2float %116
%118 = OpCompositeExtract %float %117 1
%119 = OpAccessChain %_ptr_Function_v2float %42 %int_0
%120 = OpLoad %v2float %119
%121 = OpCompositeExtract %float %120 1
%122 = OpFOrdEqual %bool %118 %121
OpBranch %115
%115 = OpLabel
%117 = OpAccessChain %_ptr_Function_v2float %m2 %int_0
%118 = OpLoad %v2float %117
%119 = OpCompositeExtract %float %118 1
%120 = OpAccessChain %_ptr_Function_v2float %42 %int_0
%121 = OpLoad %v2float %120
%122 = OpCompositeExtract %float %121 1
%123 = OpFOrdEqual %bool %119 %122
OpBranch %116
%116 = OpLabel
%124 = OpPhi %bool %false %67 %123 %115
OpSelectionMerge %126 None
OpBranchConditional %124 %125 %126
%123 = OpPhi %bool %false %67 %122 %114
OpSelectionMerge %125 None
OpBranchConditional %123 %124 %125
%124 = OpLabel
%126 = OpAccessChain %_ptr_Function_v2float %m2 %int_1
%127 = OpLoad %v2float %126
%128 = OpCompositeExtract %float %127 0
%129 = OpAccessChain %_ptr_Function_v2float %42 %int_1
%130 = OpLoad %v2float %129
%131 = OpCompositeExtract %float %130 0
%132 = OpFOrdEqual %bool %128 %131
OpBranch %125
%125 = OpLabel
%127 = OpAccessChain %_ptr_Function_v2float %m2 %int_1
%128 = OpLoad %v2float %127
%129 = OpCompositeExtract %float %128 0
%130 = OpAccessChain %_ptr_Function_v2float %42 %int_1
%131 = OpLoad %v2float %130
%132 = OpCompositeExtract %float %131 0
%133 = OpFOrdEqual %bool %129 %132
OpBranch %126
%126 = OpLabel
%134 = OpPhi %bool %false %116 %133 %125
OpSelectionMerge %136 None
OpBranchConditional %134 %135 %136
%133 = OpPhi %bool %false %115 %132 %124
OpSelectionMerge %135 None
OpBranchConditional %133 %134 %135
%134 = OpLabel
%136 = OpAccessChain %_ptr_Function_v2float %m2 %int_1
%137 = OpLoad %v2float %136
%138 = OpCompositeExtract %float %137 1
%139 = OpAccessChain %_ptr_Function_v2float %42 %int_1
%140 = OpLoad %v2float %139
%141 = OpCompositeExtract %float %140 1
%142 = OpFOrdEqual %bool %138 %141
OpBranch %135
%135 = OpLabel
%137 = OpAccessChain %_ptr_Function_v2float %m2 %int_1
%138 = OpLoad %v2float %137
%139 = OpCompositeExtract %float %138 1
%140 = OpAccessChain %_ptr_Function_v2float %42 %int_1
%141 = OpLoad %v2float %140
%142 = OpCompositeExtract %float %141 1
%143 = OpFOrdEqual %bool %139 %142
OpBranch %136
%136 = OpLabel
%144 = OpPhi %bool %false %126 %143 %135
OpReturnValue %144
%143 = OpPhi %bool %false %125 %142 %134
OpReturnValue %143
OpFunctionEnd
%main = OpFunction %v4float None %145
%146 = OpFunctionParameter %_ptr_Function_v2float
%147 = OpLabel
%main = OpFunction %v4float None %144
%145 = OpFunctionParameter %_ptr_Function_v2float
%146 = OpLabel
%f1 = OpVariable %_ptr_Function_float Function
%f2 = OpVariable %_ptr_Function_float Function
%f3 = OpVariable %_ptr_Function_float Function
@ -236,236 +235,235 @@ OpFunctionEnd
%_0_expected = OpVariable %_ptr_Function_mat2v2float Function
%_1_one = OpVariable %_ptr_Function_float Function
%_2_m2 = OpVariable %_ptr_Function_mat2v2float Function
%251 = OpVariable %_ptr_Function_int Function
%249 = OpVariable %_ptr_Function_int Function
%251 = OpVariable %_ptr_Function_float Function
%253 = OpVariable %_ptr_Function_float Function
%255 = OpVariable %_ptr_Function_float Function
%257 = OpVariable %_ptr_Function_float Function
%259 = OpVariable %_ptr_Function_float Function
%271 = OpVariable %_ptr_Function_mat2v2float Function
%277 = OpVariable %_ptr_Function_int Function
%269 = OpVariable %_ptr_Function_mat2v2float Function
%275 = OpVariable %_ptr_Function_int Function
%277 = OpVariable %_ptr_Function_float Function
%279 = OpVariable %_ptr_Function_float Function
%281 = OpVariable %_ptr_Function_float Function
%283 = OpVariable %_ptr_Function_float Function
%285 = OpVariable %_ptr_Function_float Function
%297 = OpVariable %_ptr_Function_mat2v2float Function
%303 = OpVariable %_ptr_Function_int Function
%295 = OpVariable %_ptr_Function_mat2v2float Function
%301 = OpVariable %_ptr_Function_int Function
%303 = OpVariable %_ptr_Function_float Function
%305 = OpVariable %_ptr_Function_float Function
%307 = OpVariable %_ptr_Function_float Function
%309 = OpVariable %_ptr_Function_float Function
%311 = OpVariable %_ptr_Function_float Function
%324 = OpVariable %_ptr_Function_mat2v2float Function
%327 = OpVariable %_ptr_Function_v4float Function
%322 = OpVariable %_ptr_Function_mat2v2float Function
%325 = OpVariable %_ptr_Function_v4float Function
OpStore %minus %int_2
OpStore %star %int_3
OpStore %slash %int_4
%149 = OpAccessChain %_ptr_Uniform_v4float %19 %int_0
%150 = OpLoad %v4float %149
%151 = OpCompositeExtract %float %150 1
OpStore %f1 %151
%153 = OpAccessChain %_ptr_Uniform_v4float %19 %int_0
%154 = OpLoad %v4float %153
%155 = OpCompositeExtract %float %154 1
%156 = OpFMul %float %float_2 %155
OpStore %f2 %156
%159 = OpAccessChain %_ptr_Uniform_v4float %19 %int_0
%160 = OpLoad %v4float %159
%161 = OpCompositeExtract %float %160 1
%162 = OpFMul %float %float_3 %161
OpStore %f3 %162
%165 = OpAccessChain %_ptr_Uniform_v4float %19 %int_0
%166 = OpLoad %v4float %165
%167 = OpCompositeExtract %float %166 1
%168 = OpFMul %float %float_4 %167
OpStore %f4 %168
%170 = OpLoad %float %f1
%171 = OpFAdd %float %170 %float_1
%172 = OpLoad %float %f2
%173 = OpFAdd %float %172 %float_1
%174 = OpLoad %float %f3
%175 = OpFAdd %float %174 %float_1
%176 = OpLoad %float %f4
%177 = OpFAdd %float %176 %float_1
%178 = OpCompositeConstruct %v2float %171 %173
%179 = OpCompositeConstruct %v2float %175 %177
%180 = OpCompositeConstruct %mat2v2float %178 %179
OpStore %_0_expected %180
%182 = OpAccessChain %_ptr_Uniform_v4float %19 %int_1
%183 = OpLoad %v4float %182
%184 = OpCompositeExtract %float %183 0
OpStore %_1_one %184
%186 = OpLoad %float %f1
%187 = OpLoad %float %_1_one
%188 = OpFMul %float %186 %187
%189 = OpLoad %float %f2
%190 = OpLoad %float %_1_one
%191 = OpFMul %float %189 %190
%192 = OpLoad %float %f3
%193 = OpLoad %float %_1_one
%194 = OpFMul %float %192 %193
%195 = OpLoad %float %f4
%196 = OpLoad %float %_1_one
%197 = OpFMul %float %195 %196
%198 = OpCompositeConstruct %v2float %188 %191
%199 = OpCompositeConstruct %v2float %194 %197
%200 = OpCompositeConstruct %mat2v2float %198 %199
OpStore %_2_m2 %200
%201 = OpLoad %mat2v2float %_2_m2
%202 = OpCompositeConstruct %v2float %float_1 %float_1
%203 = OpCompositeConstruct %mat2v2float %202 %202
%204 = OpCompositeExtract %v2float %201 0
%205 = OpCompositeExtract %v2float %203 0
%206 = OpFAdd %v2float %204 %205
%207 = OpCompositeExtract %v2float %201 1
%208 = OpCompositeExtract %v2float %203 1
%209 = OpFAdd %v2float %207 %208
%210 = OpCompositeConstruct %mat2v2float %206 %209
OpStore %_2_m2 %210
%211 = OpAccessChain %_ptr_Function_v2float %_2_m2 %int_0
%212 = OpLoad %v2float %211
%213 = OpCompositeExtract %float %212 0
%214 = OpAccessChain %_ptr_Function_v2float %_0_expected %int_0
%215 = OpLoad %v2float %214
%216 = OpCompositeExtract %float %215 0
%217 = OpFOrdEqual %bool %213 %216
OpSelectionMerge %219 None
OpBranchConditional %217 %218 %219
%218 = OpLabel
%220 = OpAccessChain %_ptr_Function_v2float %_2_m2 %int_0
%221 = OpLoad %v2float %220
%222 = OpCompositeExtract %float %221 1
%223 = OpAccessChain %_ptr_Function_v2float %_0_expected %int_0
%224 = OpLoad %v2float %223
%225 = OpCompositeExtract %float %224 1
%226 = OpFOrdEqual %bool %222 %225
OpBranch %219
%219 = OpLabel
%227 = OpPhi %bool %false %147 %226 %218
OpSelectionMerge %229 None
OpBranchConditional %227 %228 %229
%228 = OpLabel
%230 = OpAccessChain %_ptr_Function_v2float %_2_m2 %int_1
%231 = OpLoad %v2float %230
%232 = OpCompositeExtract %float %231 0
%233 = OpAccessChain %_ptr_Function_v2float %_0_expected %int_1
%234 = OpLoad %v2float %233
%235 = OpCompositeExtract %float %234 0
%236 = OpFOrdEqual %bool %232 %235
OpBranch %229
%229 = OpLabel
%237 = OpPhi %bool %false %219 %236 %228
OpSelectionMerge %239 None
OpBranchConditional %237 %238 %239
%238 = OpLabel
%240 = OpAccessChain %_ptr_Function_v2float %_2_m2 %int_1
%241 = OpLoad %v2float %240
%242 = OpCompositeExtract %float %241 1
%243 = OpAccessChain %_ptr_Function_v2float %_0_expected %int_1
%244 = OpLoad %v2float %243
%245 = OpCompositeExtract %float %244 1
%246 = OpFOrdEqual %bool %242 %245
OpBranch %239
%239 = OpLabel
%247 = OpPhi %bool %false %229 %246 %238
OpSelectionMerge %249 None
OpBranchConditional %247 %248 %249
%248 = OpLabel
%250 = OpLoad %int %minus
%148 = OpAccessChain %_ptr_Uniform_v4float %19 %int_0
%149 = OpLoad %v4float %148
%150 = OpCompositeExtract %float %149 1
OpStore %f1 %150
%152 = OpAccessChain %_ptr_Uniform_v4float %19 %int_0
%153 = OpLoad %v4float %152
%154 = OpCompositeExtract %float %153 1
%155 = OpFMul %float %float_2 %154
OpStore %f2 %155
%158 = OpAccessChain %_ptr_Uniform_v4float %19 %int_0
%159 = OpLoad %v4float %158
%160 = OpCompositeExtract %float %159 1
%161 = OpFMul %float %float_3 %160
OpStore %f3 %161
%164 = OpAccessChain %_ptr_Uniform_v4float %19 %int_0
%165 = OpLoad %v4float %164
%166 = OpCompositeExtract %float %165 1
%167 = OpFMul %float %float_4 %166
OpStore %f4 %167
%169 = OpLoad %float %f1
%170 = OpFAdd %float %169 %float_1
%171 = OpLoad %float %f2
%172 = OpFAdd %float %171 %float_1
%173 = OpLoad %float %f3
%174 = OpFAdd %float %173 %float_1
%175 = OpLoad %float %f4
%176 = OpFAdd %float %175 %float_1
%177 = OpCompositeConstruct %v2float %170 %172
%178 = OpCompositeConstruct %v2float %174 %176
%179 = OpCompositeConstruct %mat2v2float %177 %178
OpStore %_0_expected %179
%181 = OpAccessChain %_ptr_Uniform_v4float %19 %int_1
%182 = OpLoad %v4float %181
%183 = OpCompositeExtract %float %182 0
OpStore %_1_one %183
%185 = OpLoad %float %f1
%186 = OpLoad %float %_1_one
%187 = OpFMul %float %185 %186
%188 = OpLoad %float %f2
%189 = OpLoad %float %_1_one
%190 = OpFMul %float %188 %189
%191 = OpLoad %float %f3
%192 = OpLoad %float %_1_one
%193 = OpFMul %float %191 %192
%194 = OpLoad %float %f4
%195 = OpLoad %float %_1_one
%196 = OpFMul %float %194 %195
%197 = OpCompositeConstruct %v2float %187 %190
%198 = OpCompositeConstruct %v2float %193 %196
%199 = OpCompositeConstruct %mat2v2float %197 %198
OpStore %_2_m2 %199
%200 = OpLoad %mat2v2float %_2_m2
%201 = OpCompositeConstruct %mat2v2float %74 %74
%202 = OpCompositeExtract %v2float %200 0
%203 = OpCompositeExtract %v2float %201 0
%204 = OpFAdd %v2float %202 %203
%205 = OpCompositeExtract %v2float %200 1
%206 = OpCompositeExtract %v2float %201 1
%207 = OpFAdd %v2float %205 %206
%208 = OpCompositeConstruct %mat2v2float %204 %207
OpStore %_2_m2 %208
%209 = OpAccessChain %_ptr_Function_v2float %_2_m2 %int_0
%210 = OpLoad %v2float %209
%211 = OpCompositeExtract %float %210 0
%212 = OpAccessChain %_ptr_Function_v2float %_0_expected %int_0
%213 = OpLoad %v2float %212
%214 = OpCompositeExtract %float %213 0
%215 = OpFOrdEqual %bool %211 %214
OpSelectionMerge %217 None
OpBranchConditional %215 %216 %217
%216 = OpLabel
%218 = OpAccessChain %_ptr_Function_v2float %_2_m2 %int_0
%219 = OpLoad %v2float %218
%220 = OpCompositeExtract %float %219 1
%221 = OpAccessChain %_ptr_Function_v2float %_0_expected %int_0
%222 = OpLoad %v2float %221
%223 = OpCompositeExtract %float %222 1
%224 = OpFOrdEqual %bool %220 %223
OpBranch %217
%217 = OpLabel
%225 = OpPhi %bool %false %146 %224 %216
OpSelectionMerge %227 None
OpBranchConditional %225 %226 %227
%226 = OpLabel
%228 = OpAccessChain %_ptr_Function_v2float %_2_m2 %int_1
%229 = OpLoad %v2float %228
%230 = OpCompositeExtract %float %229 0
%231 = OpAccessChain %_ptr_Function_v2float %_0_expected %int_1
%232 = OpLoad %v2float %231
%233 = OpCompositeExtract %float %232 0
%234 = OpFOrdEqual %bool %230 %233
OpBranch %227
%227 = OpLabel
%235 = OpPhi %bool %false %217 %234 %226
OpSelectionMerge %237 None
OpBranchConditional %235 %236 %237
%236 = OpLabel
%238 = OpAccessChain %_ptr_Function_v2float %_2_m2 %int_1
%239 = OpLoad %v2float %238
%240 = OpCompositeExtract %float %239 1
%241 = OpAccessChain %_ptr_Function_v2float %_0_expected %int_1
%242 = OpLoad %v2float %241
%243 = OpCompositeExtract %float %242 1
%244 = OpFOrdEqual %bool %240 %243
OpBranch %237
%237 = OpLabel
%245 = OpPhi %bool %false %227 %244 %236
OpSelectionMerge %247 None
OpBranchConditional %245 %246 %247
%246 = OpLabel
%248 = OpLoad %int %minus
OpStore %249 %248
%250 = OpLoad %float %f1
OpStore %251 %250
%252 = OpLoad %float %f1
%252 = OpLoad %float %f2
OpStore %253 %252
%254 = OpLoad %float %f2
%254 = OpLoad %float %f3
OpStore %255 %254
%256 = OpLoad %float %f3
%256 = OpLoad %float %f4
OpStore %257 %256
%258 = OpLoad %float %f4
OpStore %259 %258
%260 = OpLoad %float %f1
%258 = OpLoad %float %f1
%259 = OpFSub %float %258 %float_1
%260 = OpLoad %float %f2
%261 = OpFSub %float %260 %float_1
%262 = OpLoad %float %f2
%262 = OpLoad %float %f3
%263 = OpFSub %float %262 %float_1
%264 = OpLoad %float %f3
%264 = OpLoad %float %f4
%265 = OpFSub %float %264 %float_1
%266 = OpLoad %float %f4
%267 = OpFSub %float %266 %float_1
%268 = OpCompositeConstruct %v2float %261 %263
%269 = OpCompositeConstruct %v2float %265 %267
%270 = OpCompositeConstruct %mat2v2float %268 %269
OpStore %271 %270
%272 = OpFunctionCall %bool %test_bifffff22 %251 %253 %255 %257 %259 %271
OpBranch %249
%249 = OpLabel
%273 = OpPhi %bool %false %239 %272 %248
OpSelectionMerge %275 None
OpBranchConditional %273 %274 %275
%274 = OpLabel
%276 = OpLoad %int %star
%266 = OpCompositeConstruct %v2float %259 %261
%267 = OpCompositeConstruct %v2float %263 %265
%268 = OpCompositeConstruct %mat2v2float %266 %267
OpStore %269 %268
%270 = OpFunctionCall %bool %test_bifffff22 %249 %251 %253 %255 %257 %269
OpBranch %247
%247 = OpLabel
%271 = OpPhi %bool %false %237 %270 %246
OpSelectionMerge %273 None
OpBranchConditional %271 %272 %273
%272 = OpLabel
%274 = OpLoad %int %star
OpStore %275 %274
%276 = OpLoad %float %f1
OpStore %277 %276
%278 = OpLoad %float %f1
%278 = OpLoad %float %f2
OpStore %279 %278
%280 = OpLoad %float %f2
%280 = OpLoad %float %f3
OpStore %281 %280
%282 = OpLoad %float %f3
%282 = OpLoad %float %f4
OpStore %283 %282
%284 = OpLoad %float %f4
OpStore %285 %284
%286 = OpLoad %float %f1
%284 = OpLoad %float %f1
%285 = OpFMul %float %284 %float_2
%286 = OpLoad %float %f2
%287 = OpFMul %float %286 %float_2
%288 = OpLoad %float %f2
%288 = OpLoad %float %f3
%289 = OpFMul %float %288 %float_2
%290 = OpLoad %float %f3
%290 = OpLoad %float %f4
%291 = OpFMul %float %290 %float_2
%292 = OpLoad %float %f4
%293 = OpFMul %float %292 %float_2
%294 = OpCompositeConstruct %v2float %287 %289
%295 = OpCompositeConstruct %v2float %291 %293
%296 = OpCompositeConstruct %mat2v2float %294 %295
OpStore %297 %296
%298 = OpFunctionCall %bool %test_bifffff22 %277 %279 %281 %283 %285 %297
OpBranch %275
%275 = OpLabel
%299 = OpPhi %bool %false %249 %298 %274
OpSelectionMerge %301 None
OpBranchConditional %299 %300 %301
%300 = OpLabel
%302 = OpLoad %int %slash
%292 = OpCompositeConstruct %v2float %285 %287
%293 = OpCompositeConstruct %v2float %289 %291
%294 = OpCompositeConstruct %mat2v2float %292 %293
OpStore %295 %294
%296 = OpFunctionCall %bool %test_bifffff22 %275 %277 %279 %281 %283 %295
OpBranch %273
%273 = OpLabel
%297 = OpPhi %bool %false %247 %296 %272
OpSelectionMerge %299 None
OpBranchConditional %297 %298 %299
%298 = OpLabel
%300 = OpLoad %int %slash
OpStore %301 %300
%302 = OpLoad %float %f1
OpStore %303 %302
%304 = OpLoad %float %f1
%304 = OpLoad %float %f2
OpStore %305 %304
%306 = OpLoad %float %f2
%306 = OpLoad %float %f3
OpStore %307 %306
%308 = OpLoad %float %f3
%308 = OpLoad %float %f4
OpStore %309 %308
%310 = OpLoad %float %f4
OpStore %311 %310
%312 = OpLoad %float %f1
%314 = OpFMul %float %312 %float_0_5
%315 = OpLoad %float %f2
%310 = OpLoad %float %f1
%312 = OpFMul %float %310 %float_0_5
%313 = OpLoad %float %f2
%314 = OpFMul %float %313 %float_0_5
%315 = OpLoad %float %f3
%316 = OpFMul %float %315 %float_0_5
%317 = OpLoad %float %f3
%317 = OpLoad %float %f4
%318 = OpFMul %float %317 %float_0_5
%319 = OpLoad %float %f4
%320 = OpFMul %float %319 %float_0_5
%321 = OpCompositeConstruct %v2float %314 %316
%322 = OpCompositeConstruct %v2float %318 %320
%323 = OpCompositeConstruct %mat2v2float %321 %322
OpStore %324 %323
%325 = OpFunctionCall %bool %test_bifffff22 %303 %305 %307 %309 %311 %324
OpBranch %301
%301 = OpLabel
%326 = OpPhi %bool %false %275 %325 %300
OpSelectionMerge %331 None
OpBranchConditional %326 %329 %330
%329 = OpLabel
%332 = OpAccessChain %_ptr_Uniform_v4float %19 %int_0
%319 = OpCompositeConstruct %v2float %312 %314
%320 = OpCompositeConstruct %v2float %316 %318
%321 = OpCompositeConstruct %mat2v2float %319 %320
OpStore %322 %321
%323 = OpFunctionCall %bool %test_bifffff22 %301 %303 %305 %307 %309 %322
OpBranch %299
%299 = OpLabel
%324 = OpPhi %bool %false %273 %323 %298
OpSelectionMerge %329 None
OpBranchConditional %324 %327 %328
%327 = OpLabel
%330 = OpAccessChain %_ptr_Uniform_v4float %19 %int_0
%331 = OpLoad %v4float %330
OpStore %325 %331
OpBranch %329
%328 = OpLabel
%332 = OpAccessChain %_ptr_Uniform_v4float %19 %int_1
%333 = OpLoad %v4float %332
OpStore %327 %333
OpBranch %331
%330 = OpLabel
%334 = OpAccessChain %_ptr_Uniform_v4float %19 %int_1
%335 = OpLoad %v4float %334
OpStore %327 %335
OpBranch %331
%331 = OpLabel
%336 = OpLoad %v4float %327
OpReturnValue %336
OpStore %325 %333
OpBranch %329
%329 = OpLabel
%334 = OpLoad %v4float %325
OpReturnValue %334
OpFunctionEnd

View File

@ -43,6 +43,8 @@ OpDecorate %39 RelaxedPrecision
%float_1 = OpConstant %float 1
%float_2 = OpConstant %float 2
%float_3 = OpConstant %float 3
%29 = OpConstantComposite %v2float %float_0 %float_1
%30 = OpConstantComposite %v2float %float_2 %float_3
%_entrypoint_v = OpFunction %void None %12
%13 = OpLabel
%17 = OpVariable %_ptr_Function_v2float Function
@ -56,8 +58,6 @@ OpFunctionEnd
%22 = OpLabel
%x = OpVariable %_ptr_Function_mat2v2float Function
%y = OpVariable %_ptr_Function_v2float Function
%29 = OpCompositeConstruct %v2float %float_0 %float_1
%30 = OpCompositeConstruct %v2float %float_2 %float_3
%31 = OpCompositeConstruct %mat2v2float %29 %30
OpStore %x %31
%33 = OpLoad %mat2v2float %x

View File

@ -104,6 +104,8 @@ OpDecorate %250 RelaxedPrecision
%float_n2 = OpConstant %float -2
%float_n3 = OpConstant %float -3
%float_n4 = OpConstant %float -4
%83 = OpConstantComposite %v2float %float_n1 %float_n2
%84 = OpConstantComposite %v2float %float_n3 %float_n4
%_ptr_Uniform_mat2v2float = OpTypePointer Uniform %mat2v2float
%int_3 = OpConstant %int 3
%_ptr_Function_mat3v3float = OpTypePointer Function %mat3v3float
@ -112,6 +114,9 @@ OpDecorate %250 RelaxedPrecision
%float_n7 = OpConstant %float -7
%float_n8 = OpConstant %float -8
%float_n9 = OpConstant %float -9
%116 = OpConstantComposite %v3float %float_n1 %float_n2 %float_n3
%117 = OpConstantComposite %v3float %float_n4 %float_n5 %float_n6
%118 = OpConstantComposite %v3float %float_n7 %float_n8 %float_n9
%_ptr_Uniform_mat3v3float = OpTypePointer Uniform %mat3v3float
%int_4 = OpConstant %int 4
%v3bool = OpTypeVector %bool 3
@ -123,6 +128,10 @@ OpDecorate %250 RelaxedPrecision
%float_n14 = OpConstant %float -14
%float_n15 = OpConstant %float -15
%float_n16 = OpConstant %float -16
%160 = OpConstantComposite %v4float %float_n1 %float_n2 %float_n3 %float_n4
%161 = OpConstantComposite %v4float %float_n5 %float_n6 %float_n7 %float_n8
%162 = OpConstantComposite %v4float %float_n9 %float_n10 %float_n11 %float_n12
%163 = OpConstantComposite %v4float %float_n13 %float_n14 %float_n15 %float_n16
%_ptr_Uniform_mat4v4float = OpTypePointer Uniform %mat4v4float
%int_5 = OpConstant %int 5
%v4bool = OpTypeVector %bool 4
@ -191,8 +200,6 @@ OpFunctionEnd
%77 = OpLabel
%negated = OpVariable %_ptr_Function_mat2v2float Function
%x_2 = OpVariable %_ptr_Function_mat2v2float Function
%83 = OpCompositeConstruct %v2float %float_n1 %float_n2
%84 = OpCompositeConstruct %v2float %float_n3 %float_n4
%85 = OpCompositeConstruct %mat2v2float %83 %84
OpStore %negated %85
%87 = OpAccessChain %_ptr_Uniform_mat2v2float %16 %int_3
@ -222,9 +229,6 @@ OpFunctionEnd
%108 = OpLabel
%negated_0 = OpVariable %_ptr_Function_mat3v3float Function
%x_3 = OpVariable %_ptr_Function_mat3v3float Function
%116 = OpCompositeConstruct %v3float %float_n1 %float_n2 %float_n3
%117 = OpCompositeConstruct %v3float %float_n4 %float_n5 %float_n6
%118 = OpCompositeConstruct %v3float %float_n7 %float_n8 %float_n9
%119 = OpCompositeConstruct %mat3v3float %116 %117 %118
OpStore %negated_0 %119
%121 = OpAccessChain %_ptr_Uniform_mat3v3float %16 %int_4
@ -261,10 +265,6 @@ OpFunctionEnd
%150 = OpLabel
%negated_1 = OpVariable %_ptr_Function_mat4v4float Function
%x_4 = OpVariable %_ptr_Function_mat4v4float Function
%160 = OpCompositeConstruct %v4float %float_n1 %float_n2 %float_n3 %float_n4
%161 = OpCompositeConstruct %v4float %float_n5 %float_n6 %float_n7 %float_n8
%162 = OpCompositeConstruct %v4float %float_n9 %float_n10 %float_n11 %float_n12
%163 = OpCompositeConstruct %v4float %float_n13 %float_n14 %float_n15 %float_n16
%164 = OpCompositeConstruct %mat4v4float %160 %161 %162 %163
OpStore %negated_1 %164
%166 = OpAccessChain %_ptr_Uniform_mat4v4float %16 %int_5

View File

@ -39,100 +39,89 @@ OpDecorate %50 RelaxedPrecision
OpDecorate %51 RelaxedPrecision
OpDecorate %63 RelaxedPrecision
OpDecorate %67 RelaxedPrecision
OpDecorate %88 RelaxedPrecision
OpDecorate %86 RelaxedPrecision
OpDecorate %91 RelaxedPrecision
OpDecorate %92 RelaxedPrecision
OpDecorate %93 RelaxedPrecision
OpDecorate %94 RelaxedPrecision
OpDecorate %95 RelaxedPrecision
OpDecorate %96 RelaxedPrecision
OpDecorate %97 RelaxedPrecision
OpDecorate %98 RelaxedPrecision
OpDecorate %99 RelaxedPrecision
OpDecorate %100 RelaxedPrecision
OpDecorate %102 RelaxedPrecision
OpDecorate %103 RelaxedPrecision
OpDecorate %104 RelaxedPrecision
OpDecorate %115 RelaxedPrecision
OpDecorate %101 RelaxedPrecision
OpDecorate %112 RelaxedPrecision
OpDecorate %116 RelaxedPrecision
OpDecorate %117 RelaxedPrecision
OpDecorate %118 RelaxedPrecision
OpDecorate %119 RelaxedPrecision
OpDecorate %120 RelaxedPrecision
OpDecorate %121 RelaxedPrecision
OpDecorate %122 RelaxedPrecision
OpDecorate %123 RelaxedPrecision
OpDecorate %124 RelaxedPrecision
OpDecorate %125 RelaxedPrecision
OpDecorate %126 RelaxedPrecision
OpDecorate %127 RelaxedPrecision
OpDecorate %128 RelaxedPrecision
OpDecorate %129 RelaxedPrecision
OpDecorate %135 RelaxedPrecision
OpDecorate %139 RelaxedPrecision
OpDecorate %140 RelaxedPrecision
OpDecorate %142 RelaxedPrecision
OpDecorate %144 RelaxedPrecision
OpDecorate %145 RelaxedPrecision
OpDecorate %147 RelaxedPrecision
OpDecorate %149 RelaxedPrecision
OpDecorate %146 RelaxedPrecision
OpDecorate %151 RelaxedPrecision
OpDecorate %156 RelaxedPrecision
OpDecorate %153 RelaxedPrecision
OpDecorate %155 RelaxedPrecision
OpDecorate %157 RelaxedPrecision
OpDecorate %158 RelaxedPrecision
OpDecorate %159 RelaxedPrecision
OpDecorate %160 RelaxedPrecision
OpDecorate %161 RelaxedPrecision
OpDecorate %162 RelaxedPrecision
OpDecorate %163 RelaxedPrecision
OpDecorate %164 RelaxedPrecision
OpDecorate %165 RelaxedPrecision
OpDecorate %166 RelaxedPrecision
OpDecorate %167 RelaxedPrecision
OpDecorate %168 RelaxedPrecision
OpDecorate %169 RelaxedPrecision
OpDecorate %170 RelaxedPrecision
OpDecorate %171 RelaxedPrecision
OpDecorate %172 RelaxedPrecision
OpDecorate %173 RelaxedPrecision
OpDecorate %177 RelaxedPrecision
OpDecorate %181 RelaxedPrecision
OpDecorate %182 RelaxedPrecision
OpDecorate %183 RelaxedPrecision
OpDecorate %184 RelaxedPrecision
OpDecorate %185 RelaxedPrecision
OpDecorate %186 RelaxedPrecision
OpDecorate %187 RelaxedPrecision
OpDecorate %188 RelaxedPrecision
OpDecorate %189 RelaxedPrecision
OpDecorate %190 RelaxedPrecision
OpDecorate %191 RelaxedPrecision
OpDecorate %192 RelaxedPrecision
OpDecorate %193 RelaxedPrecision
OpDecorate %194 RelaxedPrecision
OpDecorate %195 RelaxedPrecision
OpDecorate %196 RelaxedPrecision
OpDecorate %197 RelaxedPrecision
OpDecorate %198 RelaxedPrecision
OpDecorate %200 RelaxedPrecision
OpDecorate %204 RelaxedPrecision
OpDecorate %205 RelaxedPrecision
OpDecorate %206 RelaxedPrecision
OpDecorate %207 RelaxedPrecision
OpDecorate %208 RelaxedPrecision
OpDecorate %209 RelaxedPrecision
OpDecorate %213 RelaxedPrecision
OpDecorate %214 RelaxedPrecision
OpDecorate %215 RelaxedPrecision
OpDecorate %216 RelaxedPrecision
OpDecorate %217 RelaxedPrecision
OpDecorate %218 RelaxedPrecision
OpDecorate %219 RelaxedPrecision
OpDecorate %220 RelaxedPrecision
OpDecorate %221 RelaxedPrecision
OpDecorate %222 RelaxedPrecision
OpDecorate %210 RelaxedPrecision
OpDecorate %211 RelaxedPrecision
OpDecorate %212 RelaxedPrecision
OpDecorate %223 RelaxedPrecision
OpDecorate %227 RelaxedPrecision
OpDecorate %228 RelaxedPrecision
OpDecorate %230 RelaxedPrecision
OpDecorate %232 RelaxedPrecision
OpDecorate %234 RelaxedPrecision
OpDecorate %238 RelaxedPrecision
OpDecorate %239 RelaxedPrecision
OpDecorate %241 RelaxedPrecision
OpDecorate %243 RelaxedPrecision
OpDecorate %245 RelaxedPrecision
OpDecorate %246 RelaxedPrecision
OpDecorate %247 RelaxedPrecision
OpDecorate %248 RelaxedPrecision
OpDecorate %249 RelaxedPrecision
OpDecorate %250 RelaxedPrecision
OpDecorate %251 RelaxedPrecision
OpDecorate %252 RelaxedPrecision
OpDecorate %253 RelaxedPrecision
OpDecorate %254 RelaxedPrecision
OpDecorate %256 RelaxedPrecision
OpDecorate %257 RelaxedPrecision
OpDecorate %258 RelaxedPrecision
OpDecorate %259 RelaxedPrecision
OpDecorate %260 RelaxedPrecision
OpDecorate %261 RelaxedPrecision
OpDecorate %262 RelaxedPrecision
OpDecorate %263 RelaxedPrecision
OpDecorate %264 RelaxedPrecision
OpDecorate %265 RelaxedPrecision
OpDecorate %266 RelaxedPrecision
OpDecorate %267 RelaxedPrecision
OpDecorate %278 RelaxedPrecision
OpDecorate %285 RelaxedPrecision
OpDecorate %288 RelaxedPrecision
OpDecorate %289 RelaxedPrecision
OpDecorate %272 RelaxedPrecision
OpDecorate %275 RelaxedPrecision
OpDecorate %276 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -160,9 +149,12 @@ OpDecorate %289 RelaxedPrecision
%float_n1_25 = OpConstant %float -1.25
%float_0_75 = OpConstant %float 0.75
%float_2_25 = OpConstant %float 2.25
%49 = OpConstantComposite %v2float %float_n1_25 %float_0
%50 = OpConstantComposite %v2float %float_0_75 %float_2_25
%v2bool = OpTypeVector %bool 2
%int_0 = OpConstant %int 0
%float_1 = OpConstant %float 1
%100 = OpConstantComposite %v2float %float_0 %float_1
%v4int = OpTypeVector %int 4
%v4bool = OpTypeVector %bool 4
%_ptr_Function_v4float = OpTypePointer Function %v4float
@ -179,7 +171,7 @@ OpFunctionEnd
%24 = OpFunctionParameter %_ptr_Function_v2float
%25 = OpLabel
%ok = OpVariable %_ptr_Function_bool Function
%279 = OpVariable %_ptr_Function_v4float Function
%266 = OpVariable %_ptr_Function_v4float Function
OpStore %ok %true
%30 = OpLoad %bool %ok
OpSelectionMerge %32 None
@ -194,8 +186,6 @@ OpBranchConditional %30 %31 %32
%42 = OpCompositeConstruct %v2float %38 %39
%43 = OpCompositeConstruct %v2float %40 %41
%44 = OpCompositeConstruct %mat2v2float %42 %43
%49 = OpCompositeConstruct %v2float %float_n1_25 %float_0
%50 = OpCompositeConstruct %v2float %float_0_75 %float_2_25
%51 = OpCompositeConstruct %mat2v2float %49 %50
%53 = OpCompositeExtract %v2float %44 0
%54 = OpCompositeExtract %v2float %51 0
@ -223,246 +213,232 @@ OpBranchConditional %63 %64 %65
%72 = OpCompositeConstruct %v2float %68 %69
%73 = OpCompositeConstruct %v2float %70 %71
%74 = OpCompositeConstruct %mat2v2float %72 %73
%75 = OpCompositeConstruct %v2float %float_n1_25 %float_0
%76 = OpCompositeConstruct %v2float %float_0_75 %float_2_25
%77 = OpCompositeConstruct %mat2v2float %75 %76
%78 = OpCompositeExtract %v2float %74 0
%79 = OpCompositeExtract %v2float %77 0
%80 = OpFOrdEqual %v2bool %78 %79
%81 = OpAll %bool %80
%82 = OpCompositeExtract %v2float %74 1
%83 = OpCompositeExtract %v2float %77 1
%84 = OpFOrdEqual %v2bool %82 %83
%85 = OpAll %bool %84
%86 = OpLogicalAnd %bool %81 %85
%75 = OpCompositeConstruct %mat2v2float %49 %50
%76 = OpCompositeExtract %v2float %74 0
%77 = OpCompositeExtract %v2float %75 0
%78 = OpFOrdEqual %v2bool %76 %77
%79 = OpAll %bool %78
%80 = OpCompositeExtract %v2float %74 1
%81 = OpCompositeExtract %v2float %75 1
%82 = OpFOrdEqual %v2bool %80 %81
%83 = OpAll %bool %82
%84 = OpLogicalAnd %bool %79 %83
OpBranch %65
%65 = OpLabel
%87 = OpPhi %bool %false %32 %86 %64
OpStore %ok %87
%88 = OpLoad %bool %ok
OpSelectionMerge %90 None
OpBranchConditional %88 %89 %90
%89 = OpLabel
%91 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%93 = OpLoad %v4float %91
%94 = OpCompositeExtract %float %93 0
%95 = OpCompositeExtract %float %93 1
%96 = OpCompositeExtract %float %93 2
%97 = OpCompositeExtract %float %93 3
%98 = OpCompositeConstruct %v2float %94 %95
%99 = OpCompositeConstruct %v2float %96 %97
%100 = OpCompositeConstruct %mat2v2float %98 %99
%102 = OpCompositeConstruct %v2float %float_0 %float_1
%103 = OpCompositeConstruct %v2float %float_0 %float_1
%104 = OpCompositeConstruct %mat2v2float %102 %103
%105 = OpCompositeExtract %v2float %100 0
%106 = OpCompositeExtract %v2float %104 0
%107 = OpFOrdEqual %v2bool %105 %106
%108 = OpAll %bool %107
%109 = OpCompositeExtract %v2float %100 1
%110 = OpCompositeExtract %v2float %104 1
%111 = OpFOrdEqual %v2bool %109 %110
%112 = OpAll %bool %111
%113 = OpLogicalAnd %bool %108 %112
OpBranch %90
%90 = OpLabel
%114 = OpPhi %bool %false %65 %113 %89
OpStore %ok %114
%115 = OpLoad %bool %ok
OpSelectionMerge %117 None
OpBranchConditional %115 %116 %117
%116 = OpLabel
%118 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%119 = OpLoad %v4float %118
%120 = OpCompositeExtract %float %119 0
%121 = OpCompositeExtract %float %119 1
%122 = OpCompositeExtract %float %119 2
%123 = OpCompositeExtract %float %119 3
%124 = OpCompositeConstruct %v2float %120 %121
%125 = OpCompositeConstruct %v2float %122 %123
%126 = OpCompositeConstruct %mat2v2float %124 %125
%127 = OpCompositeConstruct %v2float %float_0 %float_1
%128 = OpCompositeConstruct %v2float %float_0 %float_1
%129 = OpCompositeConstruct %mat2v2float %127 %128
%130 = OpCompositeExtract %v2float %126 0
%131 = OpCompositeExtract %v2float %129 0
%132 = OpFOrdEqual %v2bool %130 %131
%133 = OpAll %bool %132
%134 = OpCompositeExtract %v2float %126 1
%135 = OpCompositeExtract %v2float %129 1
%136 = OpFOrdEqual %v2bool %134 %135
%137 = OpAll %bool %136
%138 = OpLogicalAnd %bool %133 %137
OpBranch %117
%117 = OpLabel
%139 = OpPhi %bool %false %90 %138 %116
OpStore %ok %139
%140 = OpLoad %bool %ok
OpSelectionMerge %142 None
OpBranchConditional %140 %141 %142
%141 = OpLabel
%143 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%144 = OpLoad %v4float %143
%145 = OpCompositeExtract %float %144 0
%146 = OpConvertFToS %int %145
%147 = OpCompositeExtract %float %144 1
%148 = OpConvertFToS %int %147
%149 = OpCompositeExtract %float %144 2
%150 = OpConvertFToS %int %149
%151 = OpCompositeExtract %float %144 3
%152 = OpConvertFToS %int %151
%153 = OpCompositeConstruct %v4int %146 %148 %150 %152
%155 = OpCompositeExtract %int %153 0
%156 = OpConvertSToF %float %155
%157 = OpCompositeExtract %int %153 1
%158 = OpConvertSToF %float %157
%159 = OpCompositeExtract %int %153 2
%160 = OpConvertSToF %float %159
%161 = OpCompositeExtract %int %153 3
%162 = OpConvertSToF %float %161
%163 = OpCompositeConstruct %v4float %156 %158 %160 %162
%164 = OpCompositeExtract %float %163 0
%165 = OpCompositeExtract %float %163 1
%166 = OpCompositeExtract %float %163 2
%167 = OpCompositeExtract %float %163 3
%168 = OpCompositeConstruct %v2float %164 %165
%169 = OpCompositeConstruct %v2float %166 %167
%170 = OpCompositeConstruct %mat2v2float %168 %169
%171 = OpCompositeConstruct %v2float %float_0 %float_1
%172 = OpCompositeConstruct %v2float %float_0 %float_1
%173 = OpCompositeConstruct %mat2v2float %171 %172
%174 = OpCompositeExtract %v2float %170 0
%175 = OpCompositeExtract %v2float %173 0
%176 = OpFOrdEqual %v2bool %174 %175
%177 = OpAll %bool %176
%178 = OpCompositeExtract %v2float %170 1
%179 = OpCompositeExtract %v2float %173 1
%180 = OpFOrdEqual %v2bool %178 %179
%181 = OpAll %bool %180
%182 = OpLogicalAnd %bool %177 %181
OpBranch %142
%142 = OpLabel
%183 = OpPhi %bool %false %117 %182 %141
OpStore %ok %183
%184 = OpLoad %bool %ok
OpSelectionMerge %186 None
OpBranchConditional %184 %185 %186
%185 = OpLabel
%187 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%188 = OpLoad %v4float %187
%189 = OpCompositeExtract %float %188 0
%190 = OpCompositeExtract %float %188 1
%191 = OpCompositeExtract %float %188 2
%192 = OpCompositeExtract %float %188 3
%193 = OpCompositeConstruct %v2float %189 %190
%194 = OpCompositeConstruct %v2float %191 %192
%195 = OpCompositeConstruct %mat2v2float %193 %194
%196 = OpCompositeConstruct %v2float %float_0 %float_1
%197 = OpCompositeConstruct %v2float %float_0 %float_1
%198 = OpCompositeConstruct %mat2v2float %196 %197
%199 = OpCompositeExtract %v2float %195 0
%200 = OpCompositeExtract %v2float %198 0
%201 = OpFOrdEqual %v2bool %199 %200
%202 = OpAll %bool %201
%203 = OpCompositeExtract %v2float %195 1
%204 = OpCompositeExtract %v2float %198 1
%205 = OpFOrdEqual %v2bool %203 %204
%206 = OpAll %bool %205
%207 = OpLogicalAnd %bool %202 %206
OpBranch %186
%186 = OpLabel
%208 = OpPhi %bool %false %142 %207 %185
OpStore %ok %208
%209 = OpLoad %bool %ok
OpSelectionMerge %211 None
OpBranchConditional %209 %210 %211
%210 = OpLabel
%212 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%213 = OpLoad %v4float %212
%214 = OpCompositeExtract %float %213 0
%215 = OpCompositeExtract %float %213 1
%216 = OpCompositeExtract %float %213 2
%217 = OpCompositeExtract %float %213 3
%218 = OpCompositeConstruct %v2float %214 %215
%219 = OpCompositeConstruct %v2float %216 %217
%220 = OpCompositeConstruct %mat2v2float %218 %219
%221 = OpCompositeConstruct %v2float %float_0 %float_1
%222 = OpCompositeConstruct %v2float %float_0 %float_1
%223 = OpCompositeConstruct %mat2v2float %221 %222
%224 = OpCompositeExtract %v2float %220 0
%225 = OpCompositeExtract %v2float %223 0
%226 = OpFOrdEqual %v2bool %224 %225
%227 = OpAll %bool %226
%228 = OpCompositeExtract %v2float %220 1
%229 = OpCompositeExtract %v2float %223 1
%230 = OpFOrdEqual %v2bool %228 %229
%231 = OpAll %bool %230
%232 = OpLogicalAnd %bool %227 %231
OpBranch %211
%211 = OpLabel
%233 = OpPhi %bool %false %186 %232 %210
OpStore %ok %233
%234 = OpLoad %bool %ok
OpSelectionMerge %236 None
OpBranchConditional %234 %235 %236
%235 = OpLabel
%237 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%238 = OpLoad %v4float %237
%239 = OpCompositeExtract %float %238 0
%240 = OpFUnordNotEqual %bool %239 %float_0
%241 = OpCompositeExtract %float %238 1
%242 = OpFUnordNotEqual %bool %241 %float_0
%243 = OpCompositeExtract %float %238 2
%244 = OpFUnordNotEqual %bool %243 %float_0
%245 = OpCompositeExtract %float %238 3
%246 = OpFUnordNotEqual %bool %245 %float_0
%247 = OpCompositeConstruct %v4bool %240 %242 %244 %246
%249 = OpCompositeExtract %bool %247 0
%250 = OpSelect %float %249 %float_1 %float_0
%251 = OpCompositeExtract %bool %247 1
%252 = OpSelect %float %251 %float_1 %float_0
%253 = OpCompositeExtract %bool %247 2
%254 = OpSelect %float %253 %float_1 %float_0
%255 = OpCompositeExtract %bool %247 3
%256 = OpSelect %float %255 %float_1 %float_0
%257 = OpCompositeConstruct %v4float %250 %252 %254 %256
%258 = OpCompositeExtract %float %257 0
%259 = OpCompositeExtract %float %257 1
%260 = OpCompositeExtract %float %257 2
%261 = OpCompositeExtract %float %257 3
%262 = OpCompositeConstruct %v2float %258 %259
%263 = OpCompositeConstruct %v2float %260 %261
%264 = OpCompositeConstruct %mat2v2float %262 %263
%265 = OpCompositeConstruct %v2float %float_0 %float_1
%266 = OpCompositeConstruct %v2float %float_0 %float_1
%267 = OpCompositeConstruct %mat2v2float %265 %266
%268 = OpCompositeExtract %v2float %264 0
%269 = OpCompositeExtract %v2float %267 0
%270 = OpFOrdEqual %v2bool %268 %269
%271 = OpAll %bool %270
%272 = OpCompositeExtract %v2float %264 1
%273 = OpCompositeExtract %v2float %267 1
%274 = OpFOrdEqual %v2bool %272 %273
%275 = OpAll %bool %274
%276 = OpLogicalAnd %bool %271 %275
OpBranch %236
%236 = OpLabel
%277 = OpPhi %bool %false %211 %276 %235
OpStore %ok %277
%278 = OpLoad %bool %ok
OpSelectionMerge %283 None
OpBranchConditional %278 %281 %282
%281 = OpLabel
%284 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%285 = OpLoad %v4float %284
OpStore %279 %285
OpBranch %283
%282 = OpLabel
%286 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%288 = OpLoad %v4float %286
OpStore %279 %288
OpBranch %283
%283 = OpLabel
%289 = OpLoad %v4float %279
OpReturnValue %289
%85 = OpPhi %bool %false %32 %84 %64
OpStore %ok %85
%86 = OpLoad %bool %ok
OpSelectionMerge %88 None
OpBranchConditional %86 %87 %88
%87 = OpLabel
%89 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%91 = OpLoad %v4float %89
%92 = OpCompositeExtract %float %91 0
%93 = OpCompositeExtract %float %91 1
%94 = OpCompositeExtract %float %91 2
%95 = OpCompositeExtract %float %91 3
%96 = OpCompositeConstruct %v2float %92 %93
%97 = OpCompositeConstruct %v2float %94 %95
%98 = OpCompositeConstruct %mat2v2float %96 %97
%101 = OpCompositeConstruct %mat2v2float %100 %100
%102 = OpCompositeExtract %v2float %98 0
%103 = OpCompositeExtract %v2float %101 0
%104 = OpFOrdEqual %v2bool %102 %103
%105 = OpAll %bool %104
%106 = OpCompositeExtract %v2float %98 1
%107 = OpCompositeExtract %v2float %101 1
%108 = OpFOrdEqual %v2bool %106 %107
%109 = OpAll %bool %108
%110 = OpLogicalAnd %bool %105 %109
OpBranch %88
%88 = OpLabel
%111 = OpPhi %bool %false %65 %110 %87
OpStore %ok %111
%112 = OpLoad %bool %ok
OpSelectionMerge %114 None
OpBranchConditional %112 %113 %114
%113 = OpLabel
%115 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%116 = OpLoad %v4float %115
%117 = OpCompositeExtract %float %116 0
%118 = OpCompositeExtract %float %116 1
%119 = OpCompositeExtract %float %116 2
%120 = OpCompositeExtract %float %116 3
%121 = OpCompositeConstruct %v2float %117 %118
%122 = OpCompositeConstruct %v2float %119 %120
%123 = OpCompositeConstruct %mat2v2float %121 %122
%124 = OpCompositeConstruct %mat2v2float %100 %100
%125 = OpCompositeExtract %v2float %123 0
%126 = OpCompositeExtract %v2float %124 0
%127 = OpFOrdEqual %v2bool %125 %126
%128 = OpAll %bool %127
%129 = OpCompositeExtract %v2float %123 1
%130 = OpCompositeExtract %v2float %124 1
%131 = OpFOrdEqual %v2bool %129 %130
%132 = OpAll %bool %131
%133 = OpLogicalAnd %bool %128 %132
OpBranch %114
%114 = OpLabel
%134 = OpPhi %bool %false %88 %133 %113
OpStore %ok %134
%135 = OpLoad %bool %ok
OpSelectionMerge %137 None
OpBranchConditional %135 %136 %137
%136 = OpLabel
%138 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%139 = OpLoad %v4float %138
%140 = OpCompositeExtract %float %139 0
%141 = OpConvertFToS %int %140
%142 = OpCompositeExtract %float %139 1
%143 = OpConvertFToS %int %142
%144 = OpCompositeExtract %float %139 2
%145 = OpConvertFToS %int %144
%146 = OpCompositeExtract %float %139 3
%147 = OpConvertFToS %int %146
%148 = OpCompositeConstruct %v4int %141 %143 %145 %147
%150 = OpCompositeExtract %int %148 0
%151 = OpConvertSToF %float %150
%152 = OpCompositeExtract %int %148 1
%153 = OpConvertSToF %float %152
%154 = OpCompositeExtract %int %148 2
%155 = OpConvertSToF %float %154
%156 = OpCompositeExtract %int %148 3
%157 = OpConvertSToF %float %156
%158 = OpCompositeConstruct %v4float %151 %153 %155 %157
%159 = OpCompositeExtract %float %158 0
%160 = OpCompositeExtract %float %158 1
%161 = OpCompositeExtract %float %158 2
%162 = OpCompositeExtract %float %158 3
%163 = OpCompositeConstruct %v2float %159 %160
%164 = OpCompositeConstruct %v2float %161 %162
%165 = OpCompositeConstruct %mat2v2float %163 %164
%166 = OpCompositeConstruct %mat2v2float %100 %100
%167 = OpCompositeExtract %v2float %165 0
%168 = OpCompositeExtract %v2float %166 0
%169 = OpFOrdEqual %v2bool %167 %168
%170 = OpAll %bool %169
%171 = OpCompositeExtract %v2float %165 1
%172 = OpCompositeExtract %v2float %166 1
%173 = OpFOrdEqual %v2bool %171 %172
%174 = OpAll %bool %173
%175 = OpLogicalAnd %bool %170 %174
OpBranch %137
%137 = OpLabel
%176 = OpPhi %bool %false %114 %175 %136
OpStore %ok %176
%177 = OpLoad %bool %ok
OpSelectionMerge %179 None
OpBranchConditional %177 %178 %179
%178 = OpLabel
%180 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%181 = OpLoad %v4float %180
%182 = OpCompositeExtract %float %181 0
%183 = OpCompositeExtract %float %181 1
%184 = OpCompositeExtract %float %181 2
%185 = OpCompositeExtract %float %181 3
%186 = OpCompositeConstruct %v2float %182 %183
%187 = OpCompositeConstruct %v2float %184 %185
%188 = OpCompositeConstruct %mat2v2float %186 %187
%189 = OpCompositeConstruct %mat2v2float %100 %100
%190 = OpCompositeExtract %v2float %188 0
%191 = OpCompositeExtract %v2float %189 0
%192 = OpFOrdEqual %v2bool %190 %191
%193 = OpAll %bool %192
%194 = OpCompositeExtract %v2float %188 1
%195 = OpCompositeExtract %v2float %189 1
%196 = OpFOrdEqual %v2bool %194 %195
%197 = OpAll %bool %196
%198 = OpLogicalAnd %bool %193 %197
OpBranch %179
%179 = OpLabel
%199 = OpPhi %bool %false %137 %198 %178
OpStore %ok %199
%200 = OpLoad %bool %ok
OpSelectionMerge %202 None
OpBranchConditional %200 %201 %202
%201 = OpLabel
%203 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%204 = OpLoad %v4float %203
%205 = OpCompositeExtract %float %204 0
%206 = OpCompositeExtract %float %204 1
%207 = OpCompositeExtract %float %204 2
%208 = OpCompositeExtract %float %204 3
%209 = OpCompositeConstruct %v2float %205 %206
%210 = OpCompositeConstruct %v2float %207 %208
%211 = OpCompositeConstruct %mat2v2float %209 %210
%212 = OpCompositeConstruct %mat2v2float %100 %100
%213 = OpCompositeExtract %v2float %211 0
%214 = OpCompositeExtract %v2float %212 0
%215 = OpFOrdEqual %v2bool %213 %214
%216 = OpAll %bool %215
%217 = OpCompositeExtract %v2float %211 1
%218 = OpCompositeExtract %v2float %212 1
%219 = OpFOrdEqual %v2bool %217 %218
%220 = OpAll %bool %219
%221 = OpLogicalAnd %bool %216 %220
OpBranch %202
%202 = OpLabel
%222 = OpPhi %bool %false %179 %221 %201
OpStore %ok %222
%223 = OpLoad %bool %ok
OpSelectionMerge %225 None
OpBranchConditional %223 %224 %225
%224 = OpLabel
%226 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%227 = OpLoad %v4float %226
%228 = OpCompositeExtract %float %227 0
%229 = OpFUnordNotEqual %bool %228 %float_0
%230 = OpCompositeExtract %float %227 1
%231 = OpFUnordNotEqual %bool %230 %float_0
%232 = OpCompositeExtract %float %227 2
%233 = OpFUnordNotEqual %bool %232 %float_0
%234 = OpCompositeExtract %float %227 3
%235 = OpFUnordNotEqual %bool %234 %float_0
%236 = OpCompositeConstruct %v4bool %229 %231 %233 %235
%238 = OpCompositeExtract %bool %236 0
%239 = OpSelect %float %238 %float_1 %float_0
%240 = OpCompositeExtract %bool %236 1
%241 = OpSelect %float %240 %float_1 %float_0
%242 = OpCompositeExtract %bool %236 2
%243 = OpSelect %float %242 %float_1 %float_0
%244 = OpCompositeExtract %bool %236 3
%245 = OpSelect %float %244 %float_1 %float_0
%246 = OpCompositeConstruct %v4float %239 %241 %243 %245
%247 = OpCompositeExtract %float %246 0
%248 = OpCompositeExtract %float %246 1
%249 = OpCompositeExtract %float %246 2
%250 = OpCompositeExtract %float %246 3
%251 = OpCompositeConstruct %v2float %247 %248
%252 = OpCompositeConstruct %v2float %249 %250
%253 = OpCompositeConstruct %mat2v2float %251 %252
%254 = OpCompositeConstruct %mat2v2float %100 %100
%255 = OpCompositeExtract %v2float %253 0
%256 = OpCompositeExtract %v2float %254 0
%257 = OpFOrdEqual %v2bool %255 %256
%258 = OpAll %bool %257
%259 = OpCompositeExtract %v2float %253 1
%260 = OpCompositeExtract %v2float %254 1
%261 = OpFOrdEqual %v2bool %259 %260
%262 = OpAll %bool %261
%263 = OpLogicalAnd %bool %258 %262
OpBranch %225
%225 = OpLabel
%264 = OpPhi %bool %false %202 %263 %224
OpStore %ok %264
%265 = OpLoad %bool %ok
OpSelectionMerge %270 None
OpBranchConditional %265 %268 %269
%268 = OpLabel
%271 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%272 = OpLoad %v4float %271
OpStore %266 %272
OpBranch %270
%269 = OpLabel
%273 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%275 = OpLoad %v4float %273
OpStore %266 %275
OpBranch %270
%270 = OpLabel
%276 = OpLoad %v4float %266
OpReturnValue %276
OpFunctionEnd