Avoid emitting duplicate constant values in SPIR-V.

Previously, we had constant-value deduplication, based on the SkSL type
of the constant. However, we were still generating redundant constants,
because we would emit a separate constant for Float(n) and Half(n), or
Int(n) and Short(n), even though we generate the exact same instruction
for these constants. We now deduplicate based on the type's number-kind,
separating constant literals into three categories: floats, signed ints,
and unsigned ints. This better matches our type-handling in
getActualType.

Change-Id: I5777d4b3d567839b7aa72dc8de76908c18fc387e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/350031
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
This commit is contained in:
John Stiles 2021-01-06 11:57:58 -05:00 committed by Skia Commit-Bot
parent 83a60d9ac4
commit acb091f71d
16 changed files with 1309 additions and 1379 deletions

View File

@ -2592,53 +2592,31 @@ SpvId SPIRVCodeGenerator::writeBoolLiteral(const BoolLiteral& b) {
}
SpvId SPIRVCodeGenerator::writeIntLiteral(const IntLiteral& i) {
const Type& type = i.type();
ConstantType constantType;
if (type == *fContext.fInt_Type || type.typeKind() == Type::TypeKind::kEnum) {
constantType = ConstantType::kInt;
} else if (type == *fContext.fUInt_Type) {
constantType = ConstantType::kUInt;
} else if (type == *fContext.fShort_Type || type == *fContext.fByte_Type) {
constantType = ConstantType::kShort;
} else if (type == *fContext.fUShort_Type || type == *fContext.fUByte_Type) {
constantType = ConstantType::kUShort;
} else {
SkASSERT(false);
}
std::pair<ConstantValue, ConstantType> key(i.value(), constantType);
auto entry = fNumberConstants.find(key);
if (entry == fNumberConstants.end()) {
ConstantValuePair key(i.value(), i.type().numberKind());
auto [iter, newlyCreated] = fNumberConstants.insert({key, (SpvId)-1});
if (newlyCreated) {
SpvId result = this->nextId();
this->writeInstruction(SpvOpConstant, this->getType(type), result, (SpvId) i.value(),
this->writeInstruction(SpvOpConstant, this->getType(i.type()), result, (SpvId) i.value(),
fConstantBuffer);
fNumberConstants[key] = result;
return result;
iter->second = result;
}
return entry->second;
return iter->second;
}
SpvId SPIRVCodeGenerator::writeFloatLiteral(const FloatLiteral& f) {
const Type& type = f.type();
ConstantType constantType;
if (type == *fContext.fHalf_Type) {
constantType = ConstantType::kHalf;
} else {
constantType = ConstantType::kFloat;
}
float value = (float) f.value();
std::pair<ConstantValue, ConstantType> key(f.value(), constantType);
auto entry = fNumberConstants.find(key);
if (entry == fNumberConstants.end()) {
ConstantValuePair key(f.value(), f.type().numberKind());
auto [iter, newlyCreated] = fNumberConstants.insert({key, (SpvId)-1});
if (newlyCreated) {
SpvId result = this->nextId();
uint32_t bits;
SkASSERT(sizeof(bits) == sizeof(value));
memcpy(&bits, &value, sizeof(bits));
this->writeInstruction(SpvOpConstant, this->getType(type), result, bits,
float value = f.value();
uint32_t valueBits;
static_assert(sizeof(valueBits) == sizeof(value));
memcpy(&valueBits, &value, sizeof(valueBits));
this->writeInstruction(SpvOpConstant, this->getType(f.type()), result, valueBits,
fConstantBuffer);
fNumberConstants[key] = result;
return result;
iter->second = result;
}
return entry->second;
return iter->second;
}
SpvId SPIRVCodeGenerator::writeFunctionStart(const FunctionDeclaration& f, OutputStream& out) {

View File

@ -42,9 +42,9 @@
#include "src/sksl/spirv.h"
union ConstantValue {
ConstantValue(int64_t i)
ConstantValue(SKSL_INT i)
: fInt(i) {
SkASSERT(sizeof(*this) == sizeof(int64_t));
static_assert(sizeof(*this) == sizeof(SKSL_INT));
}
ConstantValue(SKSL_FLOAT f) {
@ -56,25 +56,17 @@ union ConstantValue {
return fInt == other.fInt;
}
int64_t fInt;
SKSL_INT fInt;
SKSL_FLOAT fFloat;
};
enum class ConstantType {
kInt,
kUInt,
kShort,
kUShort,
kFloat,
kDouble,
kHalf,
};
using ConstantValuePair = std::pair<ConstantValue, SkSL::Type::NumberKind>;
namespace std {
template <>
struct hash<std::pair<ConstantValue, ConstantType>> {
size_t operator()(const std::pair<ConstantValue, ConstantType>& key) const {
struct hash<ConstantValuePair> {
size_t operator()(const ConstantValuePair& key) const {
return key.first.fInt ^ (int) key.second;
}
};
@ -390,7 +382,7 @@ private:
SpvId fBoolTrue;
SpvId fBoolFalse;
std::unordered_map<std::pair<ConstantValue, ConstantType>, SpvId> fNumberConstants;
std::unordered_map<ConstantValuePair, SpvId> fNumberConstants;
bool fSetupFragPosition;
// label of the current block, or 0 if we are not in a block
SpvId fCurrentBlock;

View File

@ -38,12 +38,12 @@ OpMemberDecorate %S 2 Offset 96
OpMemberDecorate %S 2 RelaxedPrecision
OpMemberDecorate %S 3 Offset 112
OpMemberDecorate %S 3 RelaxedPrecision
OpDecorate %85 RelaxedPrecision
OpDecorate %89 RelaxedPrecision
OpDecorate %126 RelaxedPrecision
OpDecorate %143 RelaxedPrecision
OpDecorate %154 RelaxedPrecision
OpDecorate %156 RelaxedPrecision
OpDecorate %83 RelaxedPrecision
OpDecorate %87 RelaxedPrecision
OpDecorate %116 RelaxedPrecision
OpDecorate %133 RelaxedPrecision
OpDecorate %144 RelaxedPrecision
OpDecorate %146 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -86,9 +86,7 @@ OpDecorate %156 RelaxedPrecision
%_ptr_Function_mat2v4float = OpTypePointer Function %mat2v4float
%_arr_v4float_int_1 = OpTypeArray %v4float %int_1
%_ptr_Function__arr_v4float_int_1 = OpTypePointer Function %_arr_v4float_int_1
%float_0_0 = OpConstant %float 0
%float_1_0 = OpConstant %float 1
%67 = OpConstantComposite %v4float %float_1_0 %float_1_0 %float_1_0 %float_1_0
%66 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
%int_5 = OpConstant %int 5
%_arr_float_int_5 = OpTypeArray %float %int_5
%_arr_v4float_int_5 = OpTypeArray %v4float %int_5
@ -96,24 +94,16 @@ OpDecorate %156 RelaxedPrecision
%_ptr_Function_S = OpTypePointer Function %S
%float_9 = OpConstant %float 9
%v3float = OpTypeVector %float 3
%80 = OpConstantComposite %v3float %float_9 %float_9 %float_9
%86 = OpConstantComposite %v2float %float_5 %float_5
%float_2_0 = OpConstant %float 2
%93 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
%95 = OpConstantComposite %v4float %float_2 %float_2 %float_2 %float_2
%97 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%98 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
%78 = OpConstantComposite %v3float %float_9 %float_9 %float_9
%84 = OpConstantComposite %v2float %float_5 %float_5
%90 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
%92 = OpConstantComposite %v4float %float_2 %float_2 %float_2 %float_2
%94 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%95 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
%mat3v3float = OpTypeMatrix %v3float 3
%_ptr_Function_mat3v3float = OpTypePointer Function %mat3v3float
%float_3_0 = OpConstant %float 3
%float_4_0 = OpConstant %float 4
%float_5_0 = OpConstant %float 5
%float_6_0 = OpConstant %float 6
%float_7_0 = OpConstant %float 7
%float_8_0 = OpConstant %float 8
%float_9_0 = OpConstant %float 9
%_ptr_Function_v3float = OpTypePointer Function %v3float
%146 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%136 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%main = OpFunction %void None %11
%12 = OpLabel
%x = OpVariable %_ptr_Function_v4float Function
@ -122,7 +112,7 @@ OpDecorate %156 RelaxedPrecision
%ah2x4 = OpVariable %_ptr_Function__arr_mat2v4float_int_1 Function
%af4 = OpVariable %_ptr_Function__arr_v4float_int_1 Function
%s = OpVariable %_ptr_Function_S Function
%108 = OpVariable %_ptr_Function_mat3v3float Function
%105 = OpVariable %_ptr_Function_mat3v3float Function
%16 = OpAccessChain %_ptr_Function_float %x %int_3
OpStore %16 %float_0
%22 = OpLoad %v4float %x
@ -143,92 +133,92 @@ OpStore %57 %int_0
%59 = OpLoad %int %58
%60 = OpAccessChain %_ptr_Function_int %ai %59
OpStore %60 %int_0
%65 = OpAccessChain %_ptr_Function_v4float %af4 %int_0
%66 = OpAccessChain %_ptr_Function_float %65 %int_0
OpStore %66 %float_0_0
%69 = OpAccessChain %_ptr_Function_v4float %af4 %int_0
%70 = OpLoad %v4float %69
%71 = OpVectorShuffle %v4float %70 %67 6 4 7 5
OpStore %69 %71
%78 = OpAccessChain %_ptr_Function_float %s %int_0
OpStore %78 %float_0_0
%79 = OpAccessChain %_ptr_Function_float %s %int_1 %int_1
OpStore %79 %float_0_0
%83 = OpAccessChain %_ptr_Function_v4float %s %int_2
%84 = OpLoad %v4float %83
%85 = OpVectorShuffle %v4float %84 %80 5 6 4 3
OpStore %83 %85
%87 = OpAccessChain %_ptr_Function_v4float %s %int_3 %int_2
%88 = OpLoad %v4float %87
%89 = OpVectorShuffle %v4float %88 %86 0 4 2 5
OpStore %87 %89
%90 = OpAccessChain %_ptr_Function_float %s %int_0
OpStore %90 %float_1_0
%92 = OpAccessChain %_ptr_Function_float %s %int_1 %int_0
OpStore %92 %float_2_0
%94 = OpAccessChain %_ptr_Function_v4float %s %int_2
OpStore %94 %93
%96 = OpAccessChain %_ptr_Function_v4float %s %int_3 %int_0
OpStore %96 %95
OpStore %sk_FragColor %97
%99 = OpCompositeExtract %int %98 0
%100 = OpConvertSToF %float %99
%101 = OpCompositeExtract %int %98 1
%102 = OpConvertSToF %float %101
%103 = OpCompositeExtract %int %98 2
%104 = OpConvertSToF %float %103
%105 = OpCompositeExtract %int %98 3
%106 = OpConvertSToF %float %105
%107 = OpCompositeConstruct %v4float %100 %102 %104 %106
OpStore %sk_FragColor %107
%119 = OpCompositeConstruct %v3float %float_1_0 %float_2_0 %float_3_0
%120 = OpCompositeConstruct %v3float %float_4_0 %float_5_0 %float_6_0
%121 = OpCompositeConstruct %v3float %float_7_0 %float_8_0 %float_9_0
%118 = OpCompositeConstruct %mat3v3float %119 %120 %121
OpStore %108 %118
%122 = OpAccessChain %_ptr_Function_v3float %108 %int_0
%124 = OpLoad %v3float %122
%125 = OpVectorShuffle %v4float %124 %124 0 0 1 2
OpStore %sk_FragColor %125
%126 = OpLoad %v4float %x
OpStore %sk_FragColor %126
%128 = OpAccessChain %_ptr_Function_int %ai %int_0
%129 = OpLoad %int %128
%127 = OpConvertSToF %float %129
%130 = OpCompositeConstruct %v4float %127 %127 %127 %127
OpStore %sk_FragColor %130
%131 = OpAccessChain %_ptr_Function_v4int %ai4 %int_0
%132 = OpLoad %v4int %131
%133 = OpCompositeExtract %int %132 0
%134 = OpConvertSToF %float %133
%135 = OpCompositeExtract %int %132 1
%136 = OpConvertSToF %float %135
%137 = OpCompositeExtract %int %132 2
%138 = OpConvertSToF %float %137
%139 = OpCompositeExtract %int %132 3
%140 = OpConvertSToF %float %139
%141 = OpCompositeConstruct %v4float %134 %136 %138 %140
OpStore %sk_FragColor %141
%142 = OpAccessChain %_ptr_Function_v4float %ah2x4 %int_0 %int_0
%143 = OpLoad %v4float %142
OpStore %sk_FragColor %143
%144 = OpAccessChain %_ptr_Function_v4float %af4 %int_0
%145 = OpLoad %v4float %144
OpStore %sk_FragColor %145
%64 = OpAccessChain %_ptr_Function_v4float %af4 %int_0
%65 = OpAccessChain %_ptr_Function_float %64 %int_0
OpStore %65 %float_0
%67 = OpAccessChain %_ptr_Function_v4float %af4 %int_0
%68 = OpLoad %v4float %67
%69 = OpVectorShuffle %v4float %68 %66 6 4 7 5
OpStore %67 %69
%76 = OpAccessChain %_ptr_Function_float %s %int_0
OpStore %76 %float_0
%77 = OpAccessChain %_ptr_Function_float %s %int_1 %int_1
OpStore %77 %float_0
%81 = OpAccessChain %_ptr_Function_v4float %s %int_2
%82 = OpLoad %v4float %81
%83 = OpVectorShuffle %v4float %82 %78 5 6 4 3
OpStore %81 %83
%85 = OpAccessChain %_ptr_Function_v4float %s %int_3 %int_2
%86 = OpLoad %v4float %85
%87 = OpVectorShuffle %v4float %86 %84 0 4 2 5
OpStore %85 %87
%88 = OpAccessChain %_ptr_Function_float %s %int_0
OpStore %88 %float_1
%89 = OpAccessChain %_ptr_Function_float %s %int_1 %int_0
OpStore %89 %float_2
%91 = OpAccessChain %_ptr_Function_v4float %s %int_2
OpStore %91 %90
%93 = OpAccessChain %_ptr_Function_v4float %s %int_3 %int_0
OpStore %93 %92
OpStore %sk_FragColor %94
%96 = OpCompositeExtract %int %95 0
%97 = OpConvertSToF %float %96
%98 = OpCompositeExtract %int %95 1
%99 = OpConvertSToF %float %98
%100 = OpCompositeExtract %int %95 2
%101 = OpConvertSToF %float %100
%102 = OpCompositeExtract %int %95 3
%103 = OpConvertSToF %float %102
%104 = OpCompositeConstruct %v4float %97 %99 %101 %103
OpStore %sk_FragColor %104
%109 = OpCompositeConstruct %v3float %float_1 %float_2 %float_3
%110 = OpCompositeConstruct %v3float %float_4 %float_5 %float_6
%111 = OpCompositeConstruct %v3float %float_7 %float_8 %float_9
%108 = OpCompositeConstruct %mat3v3float %109 %110 %111
OpStore %105 %108
%112 = OpAccessChain %_ptr_Function_v3float %105 %int_0
%114 = OpLoad %v3float %112
%115 = OpVectorShuffle %v4float %114 %114 0 0 1 2
OpStore %sk_FragColor %115
%116 = OpLoad %v4float %x
OpStore %sk_FragColor %116
%118 = OpAccessChain %_ptr_Function_int %ai %int_0
%119 = OpLoad %int %118
%117 = OpConvertSToF %float %119
%120 = OpCompositeConstruct %v4float %117 %117 %117 %117
OpStore %sk_FragColor %120
%121 = OpAccessChain %_ptr_Function_v4int %ai4 %int_0
%122 = OpLoad %v4int %121
%123 = OpCompositeExtract %int %122 0
%124 = OpConvertSToF %float %123
%125 = OpCompositeExtract %int %122 1
%126 = OpConvertSToF %float %125
%127 = OpCompositeExtract %int %122 2
%128 = OpConvertSToF %float %127
%129 = OpCompositeExtract %int %122 3
%130 = OpConvertSToF %float %129
%131 = OpCompositeConstruct %v4float %124 %126 %128 %130
OpStore %sk_FragColor %131
%132 = OpAccessChain %_ptr_Function_v4float %ah2x4 %int_0 %int_0
%133 = OpLoad %v4float %132
OpStore %sk_FragColor %133
%134 = OpAccessChain %_ptr_Function_v4float %af4 %int_0
%135 = OpLoad %v4float %134
OpStore %sk_FragColor %135
OpStore %sk_FragColor %136
%137 = OpAccessChain %_ptr_Function_float %s %int_0
%138 = OpLoad %float %137
%139 = OpCompositeConstruct %v4float %138 %138 %138 %138
OpStore %sk_FragColor %139
%140 = OpAccessChain %_ptr_Function_float %s %int_1 %int_1
%141 = OpLoad %float %140
%142 = OpCompositeConstruct %v4float %141 %141 %141 %141
OpStore %sk_FragColor %142
%143 = OpAccessChain %_ptr_Function_v4float %s %int_2
%144 = OpLoad %v4float %143
OpStore %sk_FragColor %144
%145 = OpAccessChain %_ptr_Function_v4float %s %int_3 %int_0
%146 = OpLoad %v4float %145
OpStore %sk_FragColor %146
%147 = OpAccessChain %_ptr_Function_float %s %int_0
%148 = OpLoad %float %147
%149 = OpCompositeConstruct %v4float %148 %148 %148 %148
OpStore %sk_FragColor %149
%150 = OpAccessChain %_ptr_Function_float %s %int_1 %int_1
%151 = OpLoad %float %150
%152 = OpCompositeConstruct %v4float %151 %151 %151 %151
OpStore %sk_FragColor %152
%153 = OpAccessChain %_ptr_Function_v4float %s %int_2
%154 = OpLoad %v4float %153
OpStore %sk_FragColor %154
%155 = OpAccessChain %_ptr_Function_v4float %s %int_3 %int_0
%156 = OpLoad %v4float %155
OpStore %sk_FragColor %156
OpReturn
OpFunctionEnd

View File

@ -11,14 +11,14 @@ OpDecorate %sk_FragColor Location 0
OpDecorate %sk_FragColor Index 0
OpDecorate %sk_Clockwise RelaxedPrecision
OpDecorate %sk_Clockwise BuiltIn FrontFacing
OpDecorate %70 RelaxedPrecision
OpDecorate %71 RelaxedPrecision
OpDecorate %73 RelaxedPrecision
OpDecorate %74 RelaxedPrecision
OpDecorate %76 RelaxedPrecision
OpDecorate %77 RelaxedPrecision
OpDecorate %79 RelaxedPrecision
OpDecorate %81 RelaxedPrecision
OpDecorate %83 RelaxedPrecision
OpDecorate %84 RelaxedPrecision
OpDecorate %80 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -48,14 +48,10 @@ OpDecorate %84 RelaxedPrecision
%float_n10 = OpConstant %float -10
%float_11 = OpConstant %float 11
%float_n12 = OpConstant %float -12
%float_1_0 = OpConstant %float 1
%float_2 = OpConstant %float 2
%float_3_0 = OpConstant %float 3
%float_0 = OpConstant %float 0
%float_5_0 = OpConstant %float 5
%float_6 = OpConstant %float 6
%float_8 = OpConstant %float 8
%float_2_0 = OpConstant %float 2
%main = OpFunction %void None %11
%12 = OpLabel
%14 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
@ -92,45 +88,45 @@ OpStore %45 %float_n10
OpStore %47 %float_11
%49 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %49 %float_n12
%50 = OpExtInst %float %1 Sqrt %float_1_0
%52 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %52 %50
%53 = OpExtInst %float %1 Sqrt %float_2
%55 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %55 %53
%56 = OpExtInst %float %1 Sqrt %float_3_0
%50 = OpExtInst %float %1 Sqrt %float_1
%51 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %51 %50
%52 = OpExtInst %float %1 Sqrt %float_2
%54 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %54 %52
%55 = OpExtInst %float %1 Sqrt %float_3
%56 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %56 %55
%58 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %58 %56
OpStore %58 %float_0
%59 = OpExtInst %float %1 Sqrt %float_5
%60 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %60 %float_0
%61 = OpExtInst %float %1 Sqrt %float_5_0
OpStore %60 %59
%61 = OpExtInst %float %1 Sqrt %float_6
%63 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %63 %61
%64 = OpExtInst %float %1 Sqrt %float_6
%66 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %66 %64
%64 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %64 %float_0
%65 = OpExtInst %float %1 Sqrt %float_8
%67 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %67 %float_0
%68 = OpExtInst %float %1 Sqrt %float_8
%70 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %70 %68
%71 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %71 %float_0
OpStore %67 %65
%68 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %68 %float_0
%69 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
%70 = OpLoad %float %69
%71 = OpFAdd %float %70 %float_1
OpStore %69 %71
%72 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
%73 = OpLoad %float %72
%74 = OpFAdd %float %73 %float_1
%74 = OpFSub %float %73 %float_1
OpStore %72 %74
%75 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
%76 = OpLoad %float %75
%77 = OpFSub %float %76 %float_1
%77 = OpFMul %float %76 %float_2
OpStore %75 %77
%78 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
%79 = OpLoad %float %78
%81 = OpFMul %float %79 %float_2_0
OpStore %78 %81
%82 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
%83 = OpLoad %float %82
%84 = OpFDiv %float %83 %float_2_0
OpStore %82 %84
%80 = OpFDiv %float %79 %float_2
OpStore %78 %80
OpReturn
OpFunctionEnd

File diff suppressed because it is too large Load Diff

View File

@ -35,7 +35,6 @@ OpDecorate %sk_Clockwise BuiltIn FrontFacing
%float_4 = OpConstant %float 4
%35 = OpConstantComposite %v2float %float_3 %float_4
%41 = OpConstantComposite %v2float %float_3 %float_4
%float_1_0 = OpConstant %float 1
%main = OpFunction %void None %11
%12 = OpLabel
%_1_x = OpVariable %_ptr_Function_float Function
@ -77,7 +76,7 @@ OpStore %y %46
%48 = OpLoad %v2float %y
%49 = OpCompositeExtract %float %48 0
%50 = OpCompositeExtract %float %48 1
%52 = OpCompositeConstruct %v4float %47 %49 %50 %float_1_0
OpStore %sk_FragColor %52
%51 = OpCompositeConstruct %v4float %47 %49 %50 %float_1
OpStore %sk_FragColor %51
OpReturn
OpFunctionEnd

View File

@ -39,7 +39,6 @@ OpDecorate %53 RelaxedPrecision
%uint_2147483647 = OpConstant %uint 2147483647
%uint_4294967295 = OpConstant %uint 4294967295
%uint_65535 = OpConstant %uint 65535
%uint_1_0 = OpConstant %uint 1
%main = OpFunction %void None %7
%8 = OpLabel
%i1 = OpVariable %_ptr_Function_int Function
@ -90,7 +89,7 @@ OpStore %u4 %uint_4294967295
OpStore %u4 %50
OpStore %u5 %uint_65535
%53 = OpLoad %uint %u5
%55 = OpIAdd %uint %53 %uint_1_0
OpStore %u5 %55
%54 = OpIAdd %uint %53 %uint_1
OpStore %u5 %54
OpReturn
OpFunctionEnd

View File

@ -44,12 +44,8 @@ OpDecorate %sk_Clockwise BuiltIn FrontFacing
%float_n10 = OpConstant %float -10
%float_11 = OpConstant %float 11
%float_n12 = OpConstant %float -12
%float_1_0 = OpConstant %float 1
%float_2 = OpConstant %float 2
%float_3_0 = OpConstant %float 3
%float_0 = OpConstant %float 0
%float_5_0 = OpConstant %float 5
%float_6_0 = OpConstant %float 6
%float_8 = OpConstant %float 8
%_ptr_Function_int = OpTypePointer Function %int
%int_1 = OpConstant %int 1
@ -101,60 +97,60 @@ OpStore %53 %float_n10
OpStore %55 %float_11
%57 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %57 %float_n12
%60 = OpExtInst %float %1 Sqrt %float_1_0
%60 = OpExtInst %float %1 Sqrt %float_1
%59 = OpConvertFToS %int %60
%58 = OpConvertSToF %float %59
%62 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %62 %58
%65 = OpExtInst %float %1 Sqrt %float_2
%64 = OpConvertFToS %int %65
%63 = OpConvertSToF %float %64
%67 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %67 %63
%70 = OpExtInst %float %1 Sqrt %float_3_0
%69 = OpConvertFToS %int %70
%68 = OpConvertSToF %float %69
%61 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %61 %58
%64 = OpExtInst %float %1 Sqrt %float_2
%63 = OpConvertFToS %int %64
%62 = OpConvertSToF %float %63
%66 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %66 %62
%69 = OpExtInst %float %1 Sqrt %float_3
%68 = OpConvertFToS %int %69
%67 = OpConvertSToF %float %68
%70 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %70 %67
%72 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %72 %68
%74 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %74 %float_0
%77 = OpExtInst %float %1 Sqrt %float_5_0
%76 = OpConvertFToS %int %77
%75 = OpConvertSToF %float %76
%79 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %79 %75
%82 = OpExtInst %float %1 Sqrt %float_6_0
%81 = OpConvertFToS %int %82
%80 = OpConvertSToF %float %81
%84 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %84 %80
%85 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %85 %float_0
%88 = OpExtInst %float %1 Sqrt %float_8
%87 = OpConvertFToS %int %88
%86 = OpConvertSToF %float %87
%90 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %90 %86
%91 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %91 %float_0
%95 = OpExtInst %float %1 Sqrt %float_2
%94 = OpConvertFToS %int %95
OpStore %72 %float_0
%75 = OpExtInst %float %1 Sqrt %float_5
%74 = OpConvertFToS %int %75
%73 = OpConvertSToF %float %74
%76 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %76 %73
%79 = OpExtInst %float %1 Sqrt %float_6
%78 = OpConvertFToS %int %79
%77 = OpConvertSToF %float %78
%80 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %80 %77
%81 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %81 %float_0
%84 = OpExtInst %float %1 Sqrt %float_8
%83 = OpConvertFToS %int %84
%82 = OpConvertSToF %float %83
%86 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %86 %82
%87 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %87 %float_0
%91 = OpExtInst %float %1 Sqrt %float_2
%90 = OpConvertFToS %int %91
OpStore %x %90
%92 = OpLoad %int %x
%94 = OpIAdd %int %92 %int_1
OpStore %x %94
%96 = OpLoad %int %x
%98 = OpIAdd %int %96 %int_1
OpStore %x %98
%99 = OpLoad %int %x
%100 = OpISub %int %99 %int_1
OpStore %x %100
%101 = OpLoad %int %x
%103 = OpIMul %int %101 %int_2
OpStore %x %103
%104 = OpLoad %int %x
%105 = OpSDiv %int %104 %int_2
OpStore %x %105
%107 = OpLoad %int %x
%106 = OpConvertSToF %float %107
%108 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %108 %106
%95 = OpLoad %int %x
%96 = OpISub %int %95 %int_1
OpStore %x %96
%97 = OpLoad %int %x
%99 = OpIMul %int %97 %int_2
OpStore %x %99
%100 = OpLoad %int %x
%101 = OpSDiv %int %100 %int_2
OpStore %x %101
%103 = OpLoad %int %x
%102 = OpConvertSToF %float %103
%104 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %104 %102
OpReturn
OpFunctionEnd

View File

@ -27,9 +27,8 @@ OpDecorate %sk_Clockwise BuiltIn FrontFacing
%int_0 = OpConstant %int 0
%v2float = OpTypeVector %float 2
%21 = OpConstantComposite %v2float %float_1 %float_1
%float_1_0 = OpConstant %float 1
%v3float = OpTypeVector %float 3
%25 = OpConstantComposite %v3float %float_1_0 %float_1_0 %float_1_0
%25 = OpConstantComposite %v3float %float_1 %float_1 %float_1
%int_2 = OpConstant %int 2
%float_0 = OpConstant %float 0
%mat2v2float = OpTypeMatrix %v2float 2
@ -43,13 +42,13 @@ OpStore %17 %13
%23 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_1
OpStore %23 %20
%24 = OpConvertSToF %float %int_1
%28 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_2
OpStore %28 %24
%33 = OpCompositeConstruct %v2float %float_1 %float_0
%34 = OpCompositeConstruct %v2float %float_0 %float_1
%31 = OpCompositeConstruct %mat2v2float %33 %34
%30 = OpConvertSToF %float %int_1
%36 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_3
OpStore %36 %30
%27 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_2
OpStore %27 %24
%32 = OpCompositeConstruct %v2float %float_1 %float_0
%33 = OpCompositeConstruct %v2float %float_0 %float_1
%30 = OpCompositeConstruct %mat2v2float %32 %33
%29 = OpConvertSToF %float %int_1
%35 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_3
OpStore %35 %29
OpReturn
OpFunctionEnd

View File

@ -45,9 +45,9 @@ OpDecorate %57 RelaxedPrecision
OpDecorate %72 RelaxedPrecision
OpDecorate %75 RelaxedPrecision
OpDecorate %78 RelaxedPrecision
OpDecorate %157 RelaxedPrecision
OpDecorate %161 RelaxedPrecision
OpDecorate %166 RelaxedPrecision
OpDecorate %169 RelaxedPrecision
OpDecorate %164 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -94,25 +94,20 @@ OpDecorate %169 RelaxedPrecision
%v3int = OpTypeVector %int 3
%91 = OpConstantComposite %v3int %int_3 %int_3 %int_3
%_ptr_Function_int = OpTypePointer Function %int
%float_2_0 = OpConstant %float 2
%105 = OpConstantComposite %v2float %float_2_0 %float_2_0
%float_3_0 = OpConstant %float 3
%108 = OpConstantComposite %v3float %float_3_0 %float_3_0 %float_3_0
%110 = OpConstantComposite %v2float %float_2_0 %float_2_0
%float_1_0 = OpConstant %float 1
%float_4_0 = OpConstant %float 4
%105 = OpConstantComposite %v2float %float_2 %float_2
%107 = OpConstantComposite %v3float %float_3 %float_3 %float_3
%108 = OpConstantComposite %v2float %float_2 %float_2
%v3bool = OpTypeVector %bool 3
%_ptr_Function_v3bool = OpTypePointer Function %v3bool
%true = OpConstantTrue %bool
%151 = OpConstantComposite %v3bool %true %true %true
%147 = OpConstantComposite %v3bool %true %true %true
%v4bool = OpTypeVector %bool 4
%_ptr_Function_v4bool = OpTypePointer Function %v4bool
%false = OpConstantFalse %bool
%156 = OpConstantComposite %v4bool %false %false %false %false
%152 = OpConstantComposite %v4bool %false %false %false %false
%v2bool = OpTypeVector %bool 2
%158 = OpConstantComposite %v2bool %false %false
%154 = OpConstantComposite %v2bool %false %false
%_ptr_Function_bool = OpTypePointer Function %bool
%float_0_0 = OpConstant %float 0
%main = OpFunction %void None %11
%12 = OpLabel
%h3 = OpVariable %_ptr_Function_v3float Function
@ -125,8 +120,8 @@ OpDecorate %169 RelaxedPrecision
%f2 = OpVariable %_ptr_Function_v2float Function
%f3 = OpVariable %_ptr_Function_v3float Function
%f2x2 = OpVariable %_ptr_Function_mat2v2float Function
%129 = OpVariable %_ptr_Function_mat3v3float Function
%137 = OpVariable %_ptr_Function_mat4v4float Function
%126 = OpVariable %_ptr_Function_mat3v3float Function
%134 = OpVariable %_ptr_Function_mat4v4float Function
%b3 = OpVariable %_ptr_Function_v3bool Function
%b4 = OpVariable %_ptr_Function_v4bool Function
OpStore %h3 %16
@ -195,61 +190,61 @@ OpStore %95 %int_1
%103 = OpCompositeConstruct %v4float %float_1 %97 %float_3 %100
OpStore %sk_FragColor %103
OpStore %f2 %105
OpStore %f3 %108
%111 = OpLoad %v3float %f3
%112 = OpVectorShuffle %v3float %111 %110 3 4 2
OpStore %f3 %112
%114 = OpAccessChain %_ptr_Function_float %f2 %int_0
OpStore %114 %float_1_0
%115 = OpLoad %v2float %f2
%116 = OpCompositeExtract %float %115 0
%117 = OpLoad %v3float %f3
%118 = OpCompositeExtract %float %117 0
%119 = OpCompositeConstruct %v4float %float_1 %116 %118 %float_4
OpStore %sk_FragColor %119
%122 = OpCompositeConstruct %v2float %float_2_0 %float_0
%123 = OpCompositeConstruct %v2float %float_0 %float_2_0
%121 = OpCompositeConstruct %mat2v2float %122 %123
OpStore %f2x2 %121
%124 = OpAccessChain %_ptr_Function_v2float %f2x2 %int_0
%125 = OpAccessChain %_ptr_Function_float %124 %int_0
OpStore %125 %float_1_0
%126 = OpAccessChain %_ptr_Function_v2float %f2x2 %int_0
%127 = OpLoad %v2float %126
%128 = OpCompositeExtract %float %127 0
%131 = OpCompositeConstruct %v3float %float_3_0 %float_0 %float_0
%132 = OpCompositeConstruct %v3float %float_0 %float_3_0 %float_0
%133 = OpCompositeConstruct %v3float %float_0 %float_0 %float_3_0
%130 = OpCompositeConstruct %mat3v3float %131 %132 %133
OpStore %129 %130
%134 = OpAccessChain %_ptr_Function_v3float %129 %int_0
%135 = OpLoad %v3float %134
%136 = OpCompositeExtract %float %135 0
%140 = OpCompositeConstruct %v4float %float_4_0 %float_0 %float_0 %float_0
%141 = OpCompositeConstruct %v4float %float_0 %float_4_0 %float_0 %float_0
%142 = OpCompositeConstruct %v4float %float_0 %float_0 %float_4_0 %float_0
%143 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %float_4_0
%139 = OpCompositeConstruct %mat4v4float %140 %141 %142 %143
OpStore %137 %139
%144 = OpAccessChain %_ptr_Function_v4float %137 %int_0
%145 = OpLoad %v4float %144
%146 = OpCompositeExtract %float %145 0
%147 = OpCompositeConstruct %v4float %128 %136 %146 %float_1
OpStore %sk_FragColor %147
OpStore %b3 %151
OpStore %b4 %156
%160 = OpLoad %v4bool %b4
%161 = OpVectorShuffle %v4bool %160 %158 4 1 2 5
OpStore %b4 %161
%162 = OpAccessChain %_ptr_Function_bool %b3 %int_2
OpStore %162 %true
%166 = OpLoad %v3bool %b3
%167 = OpCompositeExtract %bool %166 0
%165 = OpSelect %float %167 %float_1_0 %float_0
%169 = OpLoad %v4bool %b4
%170 = OpCompositeExtract %bool %169 0
%168 = OpSelect %float %170 %float_1_0 %float_0
%171 = OpCompositeConstruct %v4float %float_1 %float_0_0 %165 %168
OpStore %sk_FragColor %171
OpStore %f3 %107
%109 = OpLoad %v3float %f3
%110 = OpVectorShuffle %v3float %109 %108 3 4 2
OpStore %f3 %110
%111 = OpAccessChain %_ptr_Function_float %f2 %int_0
OpStore %111 %float_1
%112 = OpLoad %v2float %f2
%113 = OpCompositeExtract %float %112 0
%114 = OpLoad %v3float %f3
%115 = OpCompositeExtract %float %114 0
%116 = OpCompositeConstruct %v4float %float_1 %113 %115 %float_4
OpStore %sk_FragColor %116
%119 = OpCompositeConstruct %v2float %float_2 %float_0
%120 = OpCompositeConstruct %v2float %float_0 %float_2
%118 = OpCompositeConstruct %mat2v2float %119 %120
OpStore %f2x2 %118
%121 = OpAccessChain %_ptr_Function_v2float %f2x2 %int_0
%122 = OpAccessChain %_ptr_Function_float %121 %int_0
OpStore %122 %float_1
%123 = OpAccessChain %_ptr_Function_v2float %f2x2 %int_0
%124 = OpLoad %v2float %123
%125 = OpCompositeExtract %float %124 0
%128 = OpCompositeConstruct %v3float %float_3 %float_0 %float_0
%129 = OpCompositeConstruct %v3float %float_0 %float_3 %float_0
%130 = OpCompositeConstruct %v3float %float_0 %float_0 %float_3
%127 = OpCompositeConstruct %mat3v3float %128 %129 %130
OpStore %126 %127
%131 = OpAccessChain %_ptr_Function_v3float %126 %int_0
%132 = OpLoad %v3float %131
%133 = OpCompositeExtract %float %132 0
%136 = OpCompositeConstruct %v4float %float_4 %float_0 %float_0 %float_0
%137 = OpCompositeConstruct %v4float %float_0 %float_4 %float_0 %float_0
%138 = OpCompositeConstruct %v4float %float_0 %float_0 %float_4 %float_0
%139 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %float_4
%135 = OpCompositeConstruct %mat4v4float %136 %137 %138 %139
OpStore %134 %135
%140 = OpAccessChain %_ptr_Function_v4float %134 %int_0
%141 = OpLoad %v4float %140
%142 = OpCompositeExtract %float %141 0
%143 = OpCompositeConstruct %v4float %125 %133 %142 %float_1
OpStore %sk_FragColor %143
OpStore %b3 %147
OpStore %b4 %152
%156 = OpLoad %v4bool %b4
%157 = OpVectorShuffle %v4bool %156 %154 4 1 2 5
OpStore %b4 %157
%158 = OpAccessChain %_ptr_Function_bool %b3 %int_2
OpStore %158 %true
%161 = OpLoad %v3bool %b3
%162 = OpCompositeExtract %bool %161 0
%160 = OpSelect %float %162 %float_1 %float_0
%164 = OpLoad %v4bool %b4
%165 = OpCompositeExtract %bool %164 0
%163 = OpSelect %float %165 %float_1 %float_0
%166 = OpCompositeConstruct %v4float %float_1 %float_0 %160 %163
OpStore %sk_FragColor %166
OpReturn
OpFunctionEnd

View File

@ -24,8 +24,7 @@ OpDecorate %sk_Clockwise BuiltIn FrontFacing
%int_0 = OpConstant %int 0
%float_0 = OpConstant %float 0
%float_1 = OpConstant %float 1
%float_0_0 = OpConstant %float 0
%24 = OpConstantComposite %v4float %float_0_0 %float_0_0 %float_0_0 %float_0_0
%24 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%main = OpFunction %void None %11
%12 = OpLabel
OpSelectionMerge %15 None

View File

@ -22,8 +22,7 @@ OpDecorate %sk_Clockwise BuiltIn FrontFacing
%11 = OpTypeFunction %void
%float_2 = OpConstant %float 2
%int = OpTypeInt 32 1
%float_2_0 = OpConstant %float 2
%21 = OpConstantComposite %v4float %float_2_0 %float_2_0 %float_2_0 %float_2_0
%21 = OpConstantComposite %v4float %float_2 %float_2 %float_2 %float_2
%main = OpFunction %void None %11
%12 = OpLabel
%14 = OpExtInst %float %1 Sqrt %float_2

View File

@ -46,7 +46,7 @@ OpDecorate %127 RelaxedPrecision
OpDecorate %132 RelaxedPrecision
OpDecorate %135 RelaxedPrecision
OpDecorate %139 RelaxedPrecision
OpDecorate %149 RelaxedPrecision
OpDecorate %148 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -64,10 +64,9 @@ OpDecorate %149 RelaxedPrecision
%false = OpConstantFalse %bool
%v3bool = OpTypeVector %bool 3
%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_1_0 = OpConstant %float 1
%145 = OpConstantComposite %v4float %float_1_0 %float_1_0 %float_1_0 %float_1_0
%145 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
%float_0 = OpConstant %float 0
%147 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%146 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%main = OpFunction %void None %11
%12 = OpLabel
%v = OpVariable %_ptr_Function_v4bool Function
@ -224,10 +223,10 @@ OpBranchConditional %138 %142 %143
OpStore %140 %145
OpBranch %144
%143 = OpLabel
OpStore %140 %147
OpStore %140 %146
OpBranch %144
%144 = OpLabel
%149 = OpLoad %v4float %140
OpStore %sk_FragColor %149
%148 = OpLoad %v4float %140
OpStore %sk_FragColor %148
OpReturn
OpFunctionEnd

View File

@ -13,37 +13,37 @@ OpDecorate %sk_FragColor Index 0
OpDecorate %sk_Clockwise RelaxedPrecision
OpDecorate %sk_Clockwise BuiltIn FrontFacing
OpDecorate %18 RelaxedPrecision
OpDecorate %22 RelaxedPrecision
OpDecorate %28 RelaxedPrecision
OpDecorate %32 RelaxedPrecision
OpDecorate %35 RelaxedPrecision
OpDecorate %42 RelaxedPrecision
OpDecorate %47 RelaxedPrecision
OpDecorate %49 RelaxedPrecision
OpDecorate %52 RelaxedPrecision
OpDecorate %55 RelaxedPrecision
OpDecorate %60 RelaxedPrecision
OpDecorate %63 RelaxedPrecision
OpDecorate %21 RelaxedPrecision
OpDecorate %27 RelaxedPrecision
OpDecorate %31 RelaxedPrecision
OpDecorate %34 RelaxedPrecision
OpDecorate %41 RelaxedPrecision
OpDecorate %46 RelaxedPrecision
OpDecorate %48 RelaxedPrecision
OpDecorate %51 RelaxedPrecision
OpDecorate %54 RelaxedPrecision
OpDecorate %59 RelaxedPrecision
OpDecorate %62 RelaxedPrecision
OpDecorate %65 RelaxedPrecision
OpDecorate %66 RelaxedPrecision
OpDecorate %67 RelaxedPrecision
OpDecorate %73 RelaxedPrecision
OpDecorate %77 RelaxedPrecision
OpDecorate %80 RelaxedPrecision
OpDecorate %85 RelaxedPrecision
OpDecorate %87 RelaxedPrecision
OpDecorate %92 RelaxedPrecision
OpDecorate %94 RelaxedPrecision
OpDecorate %97 RelaxedPrecision
OpDecorate %99 RelaxedPrecision
OpDecorate %102 RelaxedPrecision
OpDecorate %105 RelaxedPrecision
OpDecorate %111 RelaxedPrecision
OpDecorate %116 RelaxedPrecision
OpDecorate %118 RelaxedPrecision
OpDecorate %121 RelaxedPrecision
OpDecorate %124 RelaxedPrecision
OpDecorate %129 RelaxedPrecision
OpDecorate %132 RelaxedPrecision
OpDecorate %72 RelaxedPrecision
OpDecorate %76 RelaxedPrecision
OpDecorate %79 RelaxedPrecision
OpDecorate %84 RelaxedPrecision
OpDecorate %86 RelaxedPrecision
OpDecorate %91 RelaxedPrecision
OpDecorate %93 RelaxedPrecision
OpDecorate %96 RelaxedPrecision
OpDecorate %98 RelaxedPrecision
OpDecorate %101 RelaxedPrecision
OpDecorate %104 RelaxedPrecision
OpDecorate %110 RelaxedPrecision
OpDecorate %115 RelaxedPrecision
OpDecorate %117 RelaxedPrecision
OpDecorate %120 RelaxedPrecision
OpDecorate %123 RelaxedPrecision
OpDecorate %128 RelaxedPrecision
OpDecorate %131 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -55,7 +55,6 @@ OpDecorate %132 RelaxedPrecision
%11 = OpTypeFunction %void
%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_1 = OpConstant %float 1
%float_1_0 = OpConstant %float 1
%v2float = OpTypeVector %float 2
%float_0 = OpConstant %float 0
%v3float = OpTypeVector %float 3
@ -67,142 +66,142 @@ OpDecorate %132 RelaxedPrecision
OpStore %v %17
%18 = OpLoad %v4float %v
%19 = OpCompositeExtract %float %18 0
%21 = OpCompositeConstruct %v4float %19 %float_1_0 %float_1_0 %float_1_0
OpStore %sk_FragColor %21
%22 = OpLoad %v4float %v
%23 = OpVectorShuffle %v2float %22 %22 0 1
%25 = OpCompositeExtract %float %23 0
%26 = OpCompositeExtract %float %23 1
%27 = OpCompositeConstruct %v4float %25 %26 %float_1_0 %float_1_0
OpStore %sk_FragColor %27
%28 = OpLoad %v4float %v
%29 = OpCompositeExtract %float %28 0
%30 = OpCompositeConstruct %v4float %29 %float_1_0 %float_1_0 %float_1_0
OpStore %sk_FragColor %30
%32 = OpLoad %v4float %v
%33 = OpCompositeExtract %float %32 1
%34 = OpCompositeConstruct %v4float %float_0 %33 %float_1_0 %float_1_0
OpStore %sk_FragColor %34
%35 = OpLoad %v4float %v
%36 = OpVectorShuffle %v3float %35 %35 0 1 2
%38 = OpCompositeExtract %float %36 0
%39 = OpCompositeExtract %float %36 1
%40 = OpCompositeExtract %float %36 2
%41 = OpCompositeConstruct %v4float %38 %39 %40 %float_1_0
OpStore %sk_FragColor %41
%42 = OpLoad %v4float %v
%43 = OpVectorShuffle %v2float %42 %42 0 1
%44 = OpCompositeExtract %float %43 0
%45 = OpCompositeExtract %float %43 1
%46 = OpCompositeConstruct %v4float %44 %45 %float_1_0 %float_1_0
OpStore %sk_FragColor %46
%47 = OpLoad %v4float %v
%48 = OpCompositeExtract %float %47 0
%49 = OpLoad %v4float %v
%50 = OpCompositeExtract %float %49 2
%51 = OpCompositeConstruct %v4float %48 %float_0 %50 %float_1_0
OpStore %sk_FragColor %51
%52 = OpLoad %v4float %v
%53 = OpCompositeExtract %float %52 0
%54 = OpCompositeConstruct %v4float %53 %float_1_0 %float_0 %float_1_0
OpStore %sk_FragColor %54
%55 = OpLoad %v4float %v
%56 = OpVectorShuffle %v2float %55 %55 1 2
%57 = OpCompositeExtract %float %56 0
%58 = OpCompositeExtract %float %56 1
%59 = OpCompositeConstruct %v4float %float_1_0 %57 %58 %float_1_0
OpStore %sk_FragColor %59
%60 = OpLoad %v4float %v
%61 = OpCompositeExtract %float %60 1
%62 = OpCompositeConstruct %v4float %float_0 %61 %float_1_0 %float_1_0
OpStore %sk_FragColor %62
%63 = OpLoad %v4float %v
%64 = OpCompositeExtract %float %63 2
%65 = OpCompositeConstruct %v4float %float_1_0 %float_1_0 %64 %float_1_0
%20 = OpCompositeConstruct %v4float %19 %float_1 %float_1 %float_1
OpStore %sk_FragColor %20
%21 = OpLoad %v4float %v
%22 = OpVectorShuffle %v2float %21 %21 0 1
%24 = OpCompositeExtract %float %22 0
%25 = OpCompositeExtract %float %22 1
%26 = OpCompositeConstruct %v4float %24 %25 %float_1 %float_1
OpStore %sk_FragColor %26
%27 = OpLoad %v4float %v
%28 = OpCompositeExtract %float %27 0
%29 = OpCompositeConstruct %v4float %28 %float_1 %float_1 %float_1
OpStore %sk_FragColor %29
%31 = OpLoad %v4float %v
%32 = OpCompositeExtract %float %31 1
%33 = OpCompositeConstruct %v4float %float_0 %32 %float_1 %float_1
OpStore %sk_FragColor %33
%34 = OpLoad %v4float %v
%35 = OpVectorShuffle %v3float %34 %34 0 1 2
%37 = OpCompositeExtract %float %35 0
%38 = OpCompositeExtract %float %35 1
%39 = OpCompositeExtract %float %35 2
%40 = OpCompositeConstruct %v4float %37 %38 %39 %float_1
OpStore %sk_FragColor %40
%41 = OpLoad %v4float %v
%42 = OpVectorShuffle %v2float %41 %41 0 1
%43 = OpCompositeExtract %float %42 0
%44 = OpCompositeExtract %float %42 1
%45 = OpCompositeConstruct %v4float %43 %44 %float_1 %float_1
OpStore %sk_FragColor %45
%46 = OpLoad %v4float %v
%47 = OpCompositeExtract %float %46 0
%48 = OpLoad %v4float %v
%49 = OpCompositeExtract %float %48 2
%50 = OpCompositeConstruct %v4float %47 %float_0 %49 %float_1
OpStore %sk_FragColor %50
%51 = OpLoad %v4float %v
%52 = OpCompositeExtract %float %51 0
%53 = OpCompositeConstruct %v4float %52 %float_1 %float_0 %float_1
OpStore %sk_FragColor %53
%54 = OpLoad %v4float %v
%55 = OpVectorShuffle %v2float %54 %54 1 2
%56 = OpCompositeExtract %float %55 0
%57 = OpCompositeExtract %float %55 1
%58 = OpCompositeConstruct %v4float %float_1 %56 %57 %float_1
OpStore %sk_FragColor %58
%59 = OpLoad %v4float %v
%60 = OpCompositeExtract %float %59 1
%61 = OpCompositeConstruct %v4float %float_0 %60 %float_1 %float_1
OpStore %sk_FragColor %61
%62 = OpLoad %v4float %v
%63 = OpCompositeExtract %float %62 2
%64 = OpCompositeConstruct %v4float %float_1 %float_1 %63 %float_1
OpStore %sk_FragColor %64
%65 = OpLoad %v4float %v
OpStore %sk_FragColor %65
%66 = OpLoad %v4float %v
OpStore %sk_FragColor %66
%67 = OpLoad %v4float %v
%68 = OpVectorShuffle %v3float %67 %67 0 1 2
%69 = OpCompositeExtract %float %68 0
%70 = OpCompositeExtract %float %68 1
%71 = OpCompositeExtract %float %68 2
%72 = OpCompositeConstruct %v4float %69 %70 %71 %float_1_0
OpStore %sk_FragColor %72
%73 = OpLoad %v4float %v
%74 = OpVectorShuffle %v2float %73 %73 0 1
%75 = OpCompositeExtract %float %74 0
%76 = OpCompositeExtract %float %74 1
%77 = OpLoad %v4float %v
%78 = OpCompositeExtract %float %77 3
%79 = OpCompositeConstruct %v4float %75 %76 %float_0 %78
OpStore %sk_FragColor %79
%80 = OpLoad %v4float %v
%81 = OpVectorShuffle %v2float %80 %80 0 1
%82 = OpCompositeExtract %float %81 0
%83 = OpCompositeExtract %float %81 1
%84 = OpCompositeConstruct %v4float %82 %83 %float_1_0 %float_0
OpStore %sk_FragColor %84
%85 = OpLoad %v4float %v
%86 = OpCompositeExtract %float %85 0
%87 = OpLoad %v4float %v
%88 = OpVectorShuffle %v2float %87 %87 2 3
%89 = OpCompositeExtract %float %88 0
%90 = OpCompositeExtract %float %88 1
%91 = OpCompositeConstruct %v4float %86 %float_1_0 %89 %90
OpStore %sk_FragColor %91
%92 = OpLoad %v4float %v
%93 = OpCompositeExtract %float %92 0
%94 = OpLoad %v4float %v
%95 = OpCompositeExtract %float %94 2
%96 = OpCompositeConstruct %v4float %93 %float_0 %95 %float_1_0
OpStore %sk_FragColor %96
%97 = OpLoad %v4float %v
%98 = OpCompositeExtract %float %97 0
%99 = OpLoad %v4float %v
%100 = OpCompositeExtract %float %99 3
%101 = OpCompositeConstruct %v4float %98 %float_1_0 %float_1_0 %100
OpStore %sk_FragColor %101
%102 = OpLoad %v4float %v
%103 = OpCompositeExtract %float %102 0
%104 = OpCompositeConstruct %v4float %103 %float_1_0 %float_0 %float_1_0
OpStore %sk_FragColor %104
%105 = OpLoad %v4float %v
%106 = OpVectorShuffle %v3float %105 %105 1 2 3
%107 = OpCompositeExtract %float %106 0
%108 = OpCompositeExtract %float %106 1
%109 = OpCompositeExtract %float %106 2
%110 = OpCompositeConstruct %v4float %float_1_0 %107 %108 %109
OpStore %sk_FragColor %110
%111 = OpLoad %v4float %v
%112 = OpVectorShuffle %v2float %111 %111 1 2
%113 = OpCompositeExtract %float %112 0
%114 = OpCompositeExtract %float %112 1
%115 = OpCompositeConstruct %v4float %float_0 %113 %114 %float_1_0
OpStore %sk_FragColor %115
%116 = OpLoad %v4float %v
%117 = OpCompositeExtract %float %116 1
%118 = OpLoad %v4float %v
%119 = OpCompositeExtract %float %118 3
%120 = OpCompositeConstruct %v4float %float_0 %117 %float_1_0 %119
OpStore %sk_FragColor %120
%121 = OpLoad %v4float %v
%122 = OpCompositeExtract %float %121 1
%123 = OpCompositeConstruct %v4float %float_1_0 %122 %float_1_0 %float_1_0
OpStore %sk_FragColor %123
%124 = OpLoad %v4float %v
%125 = OpVectorShuffle %v2float %124 %124 2 3
%126 = OpCompositeExtract %float %125 0
%127 = OpCompositeExtract %float %125 1
%128 = OpCompositeConstruct %v4float %float_0 %float_0 %126 %127
OpStore %sk_FragColor %128
%129 = OpLoad %v4float %v
%130 = OpCompositeExtract %float %129 2
%131 = OpCompositeConstruct %v4float %float_0 %float_0 %130 %float_1_0
OpStore %sk_FragColor %131
%132 = OpLoad %v4float %v
%133 = OpCompositeExtract %float %132 3
%134 = OpCompositeConstruct %v4float %float_0 %float_1_0 %float_1_0 %133
OpStore %sk_FragColor %134
%67 = OpVectorShuffle %v3float %66 %66 0 1 2
%68 = OpCompositeExtract %float %67 0
%69 = OpCompositeExtract %float %67 1
%70 = OpCompositeExtract %float %67 2
%71 = OpCompositeConstruct %v4float %68 %69 %70 %float_1
OpStore %sk_FragColor %71
%72 = OpLoad %v4float %v
%73 = OpVectorShuffle %v2float %72 %72 0 1
%74 = OpCompositeExtract %float %73 0
%75 = OpCompositeExtract %float %73 1
%76 = OpLoad %v4float %v
%77 = OpCompositeExtract %float %76 3
%78 = OpCompositeConstruct %v4float %74 %75 %float_0 %77
OpStore %sk_FragColor %78
%79 = OpLoad %v4float %v
%80 = OpVectorShuffle %v2float %79 %79 0 1
%81 = OpCompositeExtract %float %80 0
%82 = OpCompositeExtract %float %80 1
%83 = OpCompositeConstruct %v4float %81 %82 %float_1 %float_0
OpStore %sk_FragColor %83
%84 = OpLoad %v4float %v
%85 = OpCompositeExtract %float %84 0
%86 = OpLoad %v4float %v
%87 = OpVectorShuffle %v2float %86 %86 2 3
%88 = OpCompositeExtract %float %87 0
%89 = OpCompositeExtract %float %87 1
%90 = OpCompositeConstruct %v4float %85 %float_1 %88 %89
OpStore %sk_FragColor %90
%91 = OpLoad %v4float %v
%92 = OpCompositeExtract %float %91 0
%93 = OpLoad %v4float %v
%94 = OpCompositeExtract %float %93 2
%95 = OpCompositeConstruct %v4float %92 %float_0 %94 %float_1
OpStore %sk_FragColor %95
%96 = OpLoad %v4float %v
%97 = OpCompositeExtract %float %96 0
%98 = OpLoad %v4float %v
%99 = OpCompositeExtract %float %98 3
%100 = OpCompositeConstruct %v4float %97 %float_1 %float_1 %99
OpStore %sk_FragColor %100
%101 = OpLoad %v4float %v
%102 = OpCompositeExtract %float %101 0
%103 = OpCompositeConstruct %v4float %102 %float_1 %float_0 %float_1
OpStore %sk_FragColor %103
%104 = OpLoad %v4float %v
%105 = OpVectorShuffle %v3float %104 %104 1 2 3
%106 = OpCompositeExtract %float %105 0
%107 = OpCompositeExtract %float %105 1
%108 = OpCompositeExtract %float %105 2
%109 = OpCompositeConstruct %v4float %float_1 %106 %107 %108
OpStore %sk_FragColor %109
%110 = OpLoad %v4float %v
%111 = OpVectorShuffle %v2float %110 %110 1 2
%112 = OpCompositeExtract %float %111 0
%113 = OpCompositeExtract %float %111 1
%114 = OpCompositeConstruct %v4float %float_0 %112 %113 %float_1
OpStore %sk_FragColor %114
%115 = OpLoad %v4float %v
%116 = OpCompositeExtract %float %115 1
%117 = OpLoad %v4float %v
%118 = OpCompositeExtract %float %117 3
%119 = OpCompositeConstruct %v4float %float_0 %116 %float_1 %118
OpStore %sk_FragColor %119
%120 = OpLoad %v4float %v
%121 = OpCompositeExtract %float %120 1
%122 = OpCompositeConstruct %v4float %float_1 %121 %float_1 %float_1
OpStore %sk_FragColor %122
%123 = OpLoad %v4float %v
%124 = OpVectorShuffle %v2float %123 %123 2 3
%125 = OpCompositeExtract %float %124 0
%126 = OpCompositeExtract %float %124 1
%127 = OpCompositeConstruct %v4float %float_0 %float_0 %125 %126
OpStore %sk_FragColor %127
%128 = OpLoad %v4float %v
%129 = OpCompositeExtract %float %128 2
%130 = OpCompositeConstruct %v4float %float_0 %float_0 %129 %float_1
OpStore %sk_FragColor %130
%131 = OpLoad %v4float %v
%132 = OpCompositeExtract %float %131 3
%133 = OpCompositeConstruct %v4float %float_0 %float_1 %float_1 %132
OpStore %sk_FragColor %133
OpReturn
OpFunctionEnd

View File

@ -27,7 +27,6 @@ OpDecorate %21 RelaxedPrecision
%_ptr_Function_float = OpTypePointer Function %float
%float_1 = OpConstant %float 1
%float_0 = OpConstant %float 0
%float_1_0 = OpConstant %float 1
%main = OpFunction %void None %11
%12 = OpLabel
%r = OpVariable %_ptr_Function_float Function
@ -38,7 +37,7 @@ OpStore %r %16
OpStore %g %18
%20 = OpLoad %float %r
%21 = OpLoad %float %g
%23 = OpCompositeConstruct %v4float %20 %21 %float_1_0 %float_1_0
OpStore %sk_FragColor %23
%22 = OpCompositeConstruct %v4float %20 %21 %float_1 %float_1
OpStore %sk_FragColor %22
OpReturn
OpFunctionEnd

View File

@ -12,14 +12,14 @@ OpDecorate %sk_FragColor Location 0
OpDecorate %sk_FragColor Index 0
OpDecorate %sk_Clockwise RelaxedPrecision
OpDecorate %sk_Clockwise BuiltIn FrontFacing
OpDecorate %122 RelaxedPrecision
OpDecorate %115 RelaxedPrecision
OpDecorate %117 RelaxedPrecision
OpDecorate %118 RelaxedPrecision
OpDecorate %120 RelaxedPrecision
OpDecorate %121 RelaxedPrecision
OpDecorate %123 RelaxedPrecision
OpDecorate %124 RelaxedPrecision
OpDecorate %125 RelaxedPrecision
OpDecorate %127 RelaxedPrecision
OpDecorate %128 RelaxedPrecision
OpDecorate %131 RelaxedPrecision
OpDecorate %132 RelaxedPrecision
OpDecorate %134 RelaxedPrecision
OpDecorate %126 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -46,33 +46,26 @@ OpDecorate %134 RelaxedPrecision
%float_12 = OpConstant %float 12
%float_3 = OpConstant %float 3
%28 = OpConstantComposite %v4float %float_12 %float_6 %float_4 %float_3
%float_6_0 = OpConstant %float 6
%float_1 = OpConstant %float 1
%float_n2 = OpConstant %float -2
%float_3_0 = OpConstant %float 3
%float_4_0 = OpConstant %float 4
%float_n5 = OpConstant %float -5
%float_7_0 = OpConstant %float 7
%float_n8 = OpConstant %float -8
%float_9_0 = OpConstant %float 9
%float_n10 = OpConstant %float -10
%float_n11 = OpConstant %float -11
%float_n12 = OpConstant %float -12
%float_13 = OpConstant %float 13
%float_n13 = OpConstant %float -13
%float_1_0 = OpConstant %float 1
%float_0 = OpConstant %float 0
%73 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%75 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%76 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%67 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%69 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%70 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%79 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%80 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%85 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%86 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%float_13_0 = OpConstant %float 13
%92 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%93 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%float_16 = OpConstant %float 16
%float_17 = OpConstant %float 17
%100 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%93 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%float_19 = OpConstant %float 19
%float_19_5 = OpConstant %float 19.5
%float_20 = OpConstant %float 20
@ -80,11 +73,10 @@ OpDecorate %134 RelaxedPrecision
%float_22 = OpConstant %float 22
%float_23 = OpConstant %float 23
%float_24 = OpConstant %float 24
%123 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
%126 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
%float_2_0 = OpConstant %float 2
%129 = OpConstantComposite %v4float %float_2_0 %float_2_0 %float_2_0 %float_2_0
%133 = OpConstantComposite %v4float %float_2_0 %float_2_0 %float_2_0 %float_2_0
%116 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
%119 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
%122 = OpConstantComposite %v4float %float_2 %float_2 %float_2 %float_2
%125 = OpConstantComposite %v4float %float_2 %float_2 %float_2 %float_2
%v4int = OpTypeVector %int 4
%_ptr_Function_v4int = OpTypePointer Function %v4int
%int_2 = OpConstant %int 2
@ -93,27 +85,27 @@ OpDecorate %134 RelaxedPrecision
%int_7 = OpConstant %int 7
%int_9 = OpConstant %int 9
%int_11 = OpConstant %int 11
%141 = OpConstantComposite %v4int %int_6 %int_7 %int_9 %int_11
%146 = OpConstantComposite %v4int %int_7 %int_9 %int_9 %int_9
%133 = OpConstantComposite %v4int %int_6 %int_7 %int_9 %int_11
%138 = OpConstantComposite %v4int %int_7 %int_9 %int_9 %int_9
%int_4 = OpConstant %int 4
%int_8 = OpConstant %int 8
%147 = OpConstantComposite %v4int %int_2 %int_4 %int_6 %int_8
%139 = OpConstantComposite %v4int %int_2 %int_4 %int_6 %int_8
%int_12 = OpConstant %int 12
%int_3 = OpConstant %int 3
%150 = OpConstantComposite %v4int %int_12 %int_6 %int_4 %int_3
%170 = OpConstantComposite %v4int %int_0 %int_0 %int_0 %int_0
%171 = OpConstantComposite %v4int %int_0 %int_0 %int_0 %int_0
%172 = OpConstantComposite %v4int %int_0 %int_0 %int_0 %int_0
%142 = OpConstantComposite %v4int %int_12 %int_6 %int_4 %int_3
%162 = OpConstantComposite %v4int %int_0 %int_0 %int_0 %int_0
%163 = OpConstantComposite %v4int %int_0 %int_0 %int_0 %int_0
%164 = OpConstantComposite %v4int %int_0 %int_0 %int_0 %int_0
%177 = OpConstantComposite %v4int %int_0 %int_0 %int_0 %int_0
%178 = OpConstantComposite %v4int %int_0 %int_0 %int_0 %int_0
%185 = OpConstantComposite %v4int %int_0 %int_0 %int_0 %int_0
%186 = OpConstantComposite %v4int %int_0 %int_0 %int_0 %int_0
%193 = OpConstantComposite %v4int %int_0 %int_0 %int_0 %int_0
%194 = OpConstantComposite %v4int %int_0 %int_0 %int_0 %int_0
%201 = OpConstantComposite %v4int %int_0 %int_0 %int_0 %int_0
%int_1 = OpConstant %int 1
%224 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
%228 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
%231 = OpConstantComposite %v4int %int_2 %int_2 %int_2 %int_2
%234 = OpConstantComposite %v4int %int_2 %int_2 %int_2 %int_2
%216 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
%220 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
%223 = OpConstantComposite %v4int %int_2 %int_2 %int_2 %int_2
%226 = OpConstantComposite %v4int %int_2 %int_2 %int_2 %int_2
%main = OpFunction %void None %11
%12 = OpLabel
%_0_result = OpVariable %_ptr_Function_v4int Function
@ -123,249 +115,249 @@ OpStore %sk_FragColor %18
OpStore %sk_FragColor %23
OpStore %sk_FragColor %24
OpStore %sk_FragColor %28
%32 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %32 %float_6_0
%34 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %34 %float_1
%31 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %31 %float_6
%33 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %33 %float_1
%35 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %35 %float_n2
%36 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %36 %float_n2
%38 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %38 %float_3_0
OpStore %36 %float_3
%37 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %37 %float_4
%39 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %39 %float_n5
%40 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %40 %float_4_0
%42 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %42 %float_n5
OpStore %40 %float_6
%41 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %41 %float_7
%43 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %43 %float_6_0
%45 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %45 %float_7_0
%47 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %47 %float_n8
%49 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %49 %float_9_0
%51 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %51 %float_n10
OpStore %43 %float_n8
%44 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %44 %float_9
%46 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %46 %float_n10
%48 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %48 %float_n11
%50 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %50 %float_n12
%52 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %52 %float_13
%53 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %53 %float_n11
%54 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %54 %float_n12
%55 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %55 %float_n12
OpStore %55 %float_13
%56 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %56 %float_n11
%57 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %57 %float_13
%58 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %58 %float_n11
OpStore %57 %float_n12
%59 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %59 %float_n12
OpStore %59 %float_n13
%60 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %60 %float_13
OpStore %60 %float_n11
%61 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %61 %float_n11
OpStore %61 %float_n12
%62 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %62 %float_n12
%64 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %64 %float_n13
%65 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %65 %float_n11
%66 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %66 %float_n12
%67 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %67 %float_n13
%68 = OpExtInst %float %1 Sqrt %float_1_0
%70 = OpCompositeConstruct %v4float %68 %68 %68 %68
OpStore %62 %float_n13
%63 = OpExtInst %float %1 Sqrt %float_1
%64 = OpCompositeConstruct %v4float %63 %63 %63 %63
OpStore %sk_FragColor %64
%65 = OpExtInst %float %1 Sqrt %float_2
%66 = OpCompositeConstruct %v4float %65 %65 %65 %65
OpStore %sk_FragColor %66
OpStore %sk_FragColor %67
OpStore %sk_FragColor %69
OpStore %sk_FragColor %70
%71 = OpExtInst %float %1 Sqrt %float_2
%71 = OpExtInst %float %1 Sqrt %float_6
%72 = OpCompositeConstruct %v4float %71 %71 %71 %71
OpStore %sk_FragColor %72
OpStore %sk_FragColor %73
OpStore %sk_FragColor %75
%73 = OpExtInst %float %1 Sqrt %float_7
%74 = OpCompositeConstruct %v4float %73 %73 %73 %73
OpStore %sk_FragColor %74
%75 = OpExtInst %float %1 Sqrt %float_8
%76 = OpCompositeConstruct %v4float %75 %75 %75 %75
OpStore %sk_FragColor %76
%77 = OpExtInst %float %1 Sqrt %float_6
%77 = OpExtInst %float %1 Sqrt %float_9
%78 = OpCompositeConstruct %v4float %77 %77 %77 %77
OpStore %sk_FragColor %78
%79 = OpExtInst %float %1 Sqrt %float_7
%80 = OpCompositeConstruct %v4float %79 %79 %79 %79
OpStore %sk_FragColor %79
OpStore %sk_FragColor %80
%81 = OpExtInst %float %1 Sqrt %float_8
%81 = OpExtInst %float %1 Sqrt %float_12
%82 = OpCompositeConstruct %v4float %81 %81 %81 %81
OpStore %sk_FragColor %82
%83 = OpExtInst %float %1 Sqrt %float_9
%83 = OpExtInst %float %1 Sqrt %float_13
%84 = OpCompositeConstruct %v4float %83 %83 %83 %83
OpStore %sk_FragColor %84
OpStore %sk_FragColor %85
OpStore %sk_FragColor %86
%87 = OpExtInst %float %1 Sqrt %float_12
%88 = OpCompositeConstruct %v4float %87 %87 %87 %87
OpStore %sk_FragColor %88
%89 = OpExtInst %float %1 Sqrt %float_13_0
%91 = OpCompositeConstruct %v4float %89 %89 %89 %89
OpStore %sk_FragColor %91
%87 = OpExtInst %float %1 Sqrt %float_16
%89 = OpCompositeConstruct %v4float %87 %87 %87 %87
OpStore %sk_FragColor %89
%90 = OpExtInst %float %1 Sqrt %float_17
%92 = OpCompositeConstruct %v4float %90 %90 %90 %90
OpStore %sk_FragColor %92
OpStore %sk_FragColor %93
%94 = OpExtInst %float %1 Sqrt %float_16
%94 = OpExtInst %float %1 Sqrt %float_19
%96 = OpCompositeConstruct %v4float %94 %94 %94 %94
OpStore %sk_FragColor %96
%97 = OpExtInst %float %1 Sqrt %float_17
%97 = OpExtInst %float %1 Sqrt %float_19_5
%99 = OpCompositeConstruct %v4float %97 %97 %97 %97
OpStore %sk_FragColor %99
OpStore %sk_FragColor %100
%101 = OpExtInst %float %1 Sqrt %float_19
%103 = OpCompositeConstruct %v4float %101 %101 %101 %101
OpStore %sk_FragColor %103
%104 = OpExtInst %float %1 Sqrt %float_19_5
%106 = OpCompositeConstruct %v4float %104 %104 %104 %104
OpStore %sk_FragColor %106
%107 = OpExtInst %float %1 Sqrt %float_20
%109 = OpCompositeConstruct %v4float %107 %107 %107 %107
OpStore %sk_FragColor %109
%110 = OpExtInst %float %1 Sqrt %float_21
%112 = OpCompositeConstruct %v4float %110 %110 %110 %110
OpStore %sk_FragColor %112
%113 = OpExtInst %float %1 Sqrt %float_22
%115 = OpCompositeConstruct %v4float %113 %113 %113 %113
OpStore %sk_FragColor %115
%116 = OpExtInst %float %1 Sqrt %float_23
%118 = OpCompositeConstruct %v4float %116 %116 %116 %116
OpStore %sk_FragColor %118
%119 = OpExtInst %float %1 Sqrt %float_24
%121 = OpCompositeConstruct %v4float %119 %119 %119 %119
OpStore %sk_FragColor %121
%122 = OpLoad %v4float %sk_FragColor
%124 = OpFAdd %v4float %122 %123
OpStore %sk_FragColor %124
%125 = OpLoad %v4float %sk_FragColor
%127 = OpFSub %v4float %125 %126
OpStore %sk_FragColor %127
%128 = OpLoad %v4float %sk_FragColor
%131 = OpFMul %v4float %128 %129
OpStore %sk_FragColor %131
%132 = OpLoad %v4float %sk_FragColor
%134 = OpFDiv %v4float %132 %133
OpStore %sk_FragColor %134
%139 = OpAccessChain %_ptr_Function_int %_0_result %int_0
OpStore %139 %int_2
OpStore %_0_result %141
OpStore %_0_result %146
OpStore %_0_result %147
OpStore %_0_result %150
%100 = OpExtInst %float %1 Sqrt %float_20
%102 = OpCompositeConstruct %v4float %100 %100 %100 %100
OpStore %sk_FragColor %102
%103 = OpExtInst %float %1 Sqrt %float_21
%105 = OpCompositeConstruct %v4float %103 %103 %103 %103
OpStore %sk_FragColor %105
%106 = OpExtInst %float %1 Sqrt %float_22
%108 = OpCompositeConstruct %v4float %106 %106 %106 %106
OpStore %sk_FragColor %108
%109 = OpExtInst %float %1 Sqrt %float_23
%111 = OpCompositeConstruct %v4float %109 %109 %109 %109
OpStore %sk_FragColor %111
%112 = OpExtInst %float %1 Sqrt %float_24
%114 = OpCompositeConstruct %v4float %112 %112 %112 %112
OpStore %sk_FragColor %114
%115 = OpLoad %v4float %sk_FragColor
%117 = OpFAdd %v4float %115 %116
OpStore %sk_FragColor %117
%118 = OpLoad %v4float %sk_FragColor
%120 = OpFSub %v4float %118 %119
OpStore %sk_FragColor %120
%121 = OpLoad %v4float %sk_FragColor
%123 = OpFMul %v4float %121 %122
OpStore %sk_FragColor %123
%124 = OpLoad %v4float %sk_FragColor
%126 = OpFDiv %v4float %124 %125
OpStore %sk_FragColor %126
%131 = OpAccessChain %_ptr_Function_int %_0_result %int_0
OpStore %131 %int_2
OpStore %_0_result %133
OpStore %_0_result %138
OpStore %_0_result %139
OpStore %_0_result %142
%145 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %145 %float_6
%146 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %146 %float_1
%147 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %147 %float_n2
%148 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %148 %float_3
%149 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %149 %float_4
%150 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %150 %float_n5
%151 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %151 %float_6
%152 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %152 %float_7
%153 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %153 %float_6_0
OpStore %153 %float_n8
%154 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %154 %float_1
OpStore %154 %float_9
%155 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %155 %float_n2
%156 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %156 %float_3_0
%157 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %157 %float_4_0
%158 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %158 %float_n5
%159 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %159 %float_6_0
%160 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %160 %float_7_0
%161 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %161 %float_n8
%162 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %162 %float_9_0
%163 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %163 %float_n10
%165 = OpExtInst %float %1 Sqrt %float_1_0
%164 = OpConvertFToS %int %165
%166 = OpCompositeConstruct %v4int %164 %164 %164 %164
OpStore %_0_result %166
%168 = OpExtInst %float %1 Sqrt %float_2
%167 = OpConvertFToS %int %168
%169 = OpCompositeConstruct %v4int %167 %167 %167 %167
OpStore %_0_result %169
OpStore %155 %float_n10
%157 = OpExtInst %float %1 Sqrt %float_1
%156 = OpConvertFToS %int %157
%158 = OpCompositeConstruct %v4int %156 %156 %156 %156
OpStore %_0_result %158
%160 = OpExtInst %float %1 Sqrt %float_2
%159 = OpConvertFToS %int %160
%161 = OpCompositeConstruct %v4int %159 %159 %159 %159
OpStore %_0_result %161
OpStore %_0_result %162
OpStore %_0_result %163
OpStore %_0_result %164
%166 = OpExtInst %float %1 Sqrt %float_6
%165 = OpConvertFToS %int %166
%167 = OpCompositeConstruct %v4int %165 %165 %165 %165
OpStore %_0_result %167
%169 = OpExtInst %float %1 Sqrt %float_7
%168 = OpConvertFToS %int %169
%170 = OpCompositeConstruct %v4int %168 %168 %168 %168
OpStore %_0_result %170
OpStore %_0_result %171
OpStore %_0_result %172
%174 = OpExtInst %float %1 Sqrt %float_6
%173 = OpConvertFToS %int %174
%175 = OpCompositeConstruct %v4int %173 %173 %173 %173
OpStore %_0_result %175
%177 = OpExtInst %float %1 Sqrt %float_7
%176 = OpConvertFToS %int %177
%178 = OpCompositeConstruct %v4int %176 %176 %176 %176
%172 = OpExtInst %float %1 Sqrt %float_8
%171 = OpConvertFToS %int %172
%173 = OpCompositeConstruct %v4int %171 %171 %171 %171
OpStore %_0_result %173
%175 = OpExtInst %float %1 Sqrt %float_9
%174 = OpConvertFToS %int %175
%176 = OpCompositeConstruct %v4int %174 %174 %174 %174
OpStore %_0_result %176
OpStore %_0_result %177
OpStore %_0_result %178
%180 = OpExtInst %float %1 Sqrt %float_8
%180 = OpExtInst %float %1 Sqrt %float_12
%179 = OpConvertFToS %int %180
%181 = OpCompositeConstruct %v4int %179 %179 %179 %179
OpStore %_0_result %181
%183 = OpExtInst %float %1 Sqrt %float_9
%183 = OpExtInst %float %1 Sqrt %float_13
%182 = OpConvertFToS %int %183
%184 = OpCompositeConstruct %v4int %182 %182 %182 %182
OpStore %_0_result %184
OpStore %_0_result %185
OpStore %_0_result %186
%188 = OpExtInst %float %1 Sqrt %float_12
%188 = OpExtInst %float %1 Sqrt %float_16
%187 = OpConvertFToS %int %188
%189 = OpCompositeConstruct %v4int %187 %187 %187 %187
OpStore %_0_result %189
%191 = OpExtInst %float %1 Sqrt %float_13_0
%191 = OpExtInst %float %1 Sqrt %float_17
%190 = OpConvertFToS %int %191
%192 = OpCompositeConstruct %v4int %190 %190 %190 %190
OpStore %_0_result %192
OpStore %_0_result %193
OpStore %_0_result %194
%196 = OpExtInst %float %1 Sqrt %float_16
%195 = OpConvertFToS %int %196
%197 = OpCompositeConstruct %v4int %195 %195 %195 %195
OpStore %_0_result %197
%199 = OpExtInst %float %1 Sqrt %float_17
%198 = OpConvertFToS %int %199
%200 = OpCompositeConstruct %v4int %198 %198 %198 %198
OpStore %_0_result %200
OpStore %_0_result %201
%203 = OpExtInst %float %1 Sqrt %float_19
%202 = OpConvertFToS %int %203
%204 = OpCompositeConstruct %v4int %202 %202 %202 %202
OpStore %_0_result %204
%206 = OpExtInst %float %1 Sqrt %float_19_5
%205 = OpConvertFToS %int %206
%207 = OpCompositeConstruct %v4int %205 %205 %205 %205
OpStore %_0_result %207
%209 = OpExtInst %float %1 Sqrt %float_20
%208 = OpConvertFToS %int %209
%210 = OpCompositeConstruct %v4int %208 %208 %208 %208
OpStore %_0_result %210
%212 = OpExtInst %float %1 Sqrt %float_21
%211 = OpConvertFToS %int %212
%213 = OpCompositeConstruct %v4int %211 %211 %211 %211
OpStore %_0_result %213
%215 = OpExtInst %float %1 Sqrt %float_22
%214 = OpConvertFToS %int %215
%216 = OpCompositeConstruct %v4int %214 %214 %214 %214
OpStore %_0_result %216
%218 = OpExtInst %float %1 Sqrt %float_23
%217 = OpConvertFToS %int %218
%219 = OpCompositeConstruct %v4int %217 %217 %217 %217
OpStore %_0_result %219
%221 = OpExtInst %float %1 Sqrt %float_24
%220 = OpConvertFToS %int %221
%222 = OpCompositeConstruct %v4int %220 %220 %220 %220
OpStore %_0_result %222
%223 = OpLoad %v4int %_0_result
%226 = OpIAdd %v4int %223 %224
OpStore %_0_result %226
%227 = OpLoad %v4int %_0_result
%229 = OpISub %v4int %227 %228
OpStore %_0_result %229
%230 = OpLoad %v4int %_0_result
%232 = OpIMul %v4int %230 %231
OpStore %_0_result %232
%233 = OpLoad %v4int %_0_result
%235 = OpSDiv %v4int %233 %234
OpStore %_0_result %235
%236 = OpLoad %v4int %_0_result
%237 = OpCompositeExtract %int %236 0
%238 = OpConvertSToF %float %237
%239 = OpCompositeExtract %int %236 1
%240 = OpConvertSToF %float %239
%241 = OpCompositeExtract %int %236 2
%242 = OpConvertSToF %float %241
%243 = OpCompositeExtract %int %236 3
%244 = OpConvertSToF %float %243
%245 = OpCompositeConstruct %v4float %238 %240 %242 %244
OpStore %sk_FragColor %245
%195 = OpExtInst %float %1 Sqrt %float_19
%194 = OpConvertFToS %int %195
%196 = OpCompositeConstruct %v4int %194 %194 %194 %194
OpStore %_0_result %196
%198 = OpExtInst %float %1 Sqrt %float_19_5
%197 = OpConvertFToS %int %198
%199 = OpCompositeConstruct %v4int %197 %197 %197 %197
OpStore %_0_result %199
%201 = OpExtInst %float %1 Sqrt %float_20
%200 = OpConvertFToS %int %201
%202 = OpCompositeConstruct %v4int %200 %200 %200 %200
OpStore %_0_result %202
%204 = OpExtInst %float %1 Sqrt %float_21
%203 = OpConvertFToS %int %204
%205 = OpCompositeConstruct %v4int %203 %203 %203 %203
OpStore %_0_result %205
%207 = OpExtInst %float %1 Sqrt %float_22
%206 = OpConvertFToS %int %207
%208 = OpCompositeConstruct %v4int %206 %206 %206 %206
OpStore %_0_result %208
%210 = OpExtInst %float %1 Sqrt %float_23
%209 = OpConvertFToS %int %210
%211 = OpCompositeConstruct %v4int %209 %209 %209 %209
OpStore %_0_result %211
%213 = OpExtInst %float %1 Sqrt %float_24
%212 = OpConvertFToS %int %213
%214 = OpCompositeConstruct %v4int %212 %212 %212 %212
OpStore %_0_result %214
%215 = OpLoad %v4int %_0_result
%218 = OpIAdd %v4int %215 %216
OpStore %_0_result %218
%219 = OpLoad %v4int %_0_result
%221 = OpISub %v4int %219 %220
OpStore %_0_result %221
%222 = OpLoad %v4int %_0_result
%224 = OpIMul %v4int %222 %223
OpStore %_0_result %224
%225 = OpLoad %v4int %_0_result
%227 = OpSDiv %v4int %225 %226
OpStore %_0_result %227
%228 = OpLoad %v4int %_0_result
%229 = OpCompositeExtract %int %228 0
%230 = OpConvertSToF %float %229
%231 = OpCompositeExtract %int %228 1
%232 = OpConvertSToF %float %231
%233 = OpCompositeExtract %int %228 2
%234 = OpConvertSToF %float %233
%235 = OpCompositeExtract %int %228 3
%236 = OpConvertSToF %float %235
%237 = OpCompositeConstruct %v4float %230 %232 %234 %236
OpStore %sk_FragColor %237
OpReturn
OpFunctionEnd