Replace array indexing on vector types with swizzles.
Our optimizer ignores index expressions, but has a few simplifications that it can perform on swizzles. (Added extra code to SwizzleByIndex which demonstrates this.) Change-Id: If3c85a0456d98749008d796e422944b602ee6933 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/341460 Reviewed-by: Brian Osman <brianosman@google.com> Commit-Queue: Brian Osman <brianosman@google.com> Auto-Submit: John Stiles <johnstiles@google.com>
This commit is contained in:
parent
e38a9e7f18
commit
bf282c05e5
@ -2771,6 +2771,12 @@ std::unique_ptr<Expression> IRGenerator::convertIndex(std::unique_ptr<Expression
|
||||
" out of range for '" + baseType.displayName() + "'");
|
||||
return nullptr;
|
||||
}
|
||||
// Constant array indexes on vectors can be converted to swizzles: `myHalf4.z`.
|
||||
// (Using a swizzle gives our optimizer a bit more to work with, compared to array indices.)
|
||||
if (baseType.isVector()) {
|
||||
return std::make_unique<Swizzle>(fContext, std::move(base),
|
||||
ComponentArray{(int8_t)index});
|
||||
}
|
||||
}
|
||||
return std::make_unique<IndexExpression>(fContext, std::move(base), std::move(converted));
|
||||
}
|
||||
|
@ -9,5 +9,5 @@ mediump vec3 h3 = vec3(1.0, 2.0, 3.0);
|
||||
highp mat2 f22 = mat2(1.0, 2.0, 3.0, 4.0);
|
||||
mediump mat2x4 h24 = mat2x4(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0);
|
||||
void main() {
|
||||
sk_FragColor.x = ((((f + h) + f2.x) + h3.x) + f22[0][0]) + h24[0][0];
|
||||
sk_FragColor.x = ((((f + h) + f2.x) + h3.x) + f22[0].x) + h24[0].x;
|
||||
}
|
||||
|
@ -7,5 +7,5 @@ vec3 h3 = vec3(1.0, 2.0, 3.0);
|
||||
mat2 f22 = mat2(1.0, 2.0, 3.0, 4.0);
|
||||
mat2x4 h24 = mat2x4(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0);
|
||||
void main() {
|
||||
sk_FragColor.x = ((((f + h) + f2.x) + h3.x) + f22[0][0]) + h24[0][0];
|
||||
sk_FragColor.x = ((((f + h) + f2.x) + h3.x) + f22[0].x) + h24[0].x;
|
||||
}
|
||||
|
@ -83,7 +83,7 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front
|
||||
out_half3(h3);
|
||||
float4 h4;
|
||||
out_half4(h4);
|
||||
/*needs swizzle fix*/ out_half(h3[1]);
|
||||
/*needs swizzle fix*/ out_half(h3.y);
|
||||
/*needs swizzle fix*/ out_half2(h3.xz);
|
||||
/*needs swizzle fix*/ out_half4(h4.zwxy);
|
||||
_out->sk_FragColor = float4(h, h2.x, h3.x, h4.x);
|
||||
@ -96,7 +96,7 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front
|
||||
out_half3(h3x3[1]);
|
||||
/*needs swizzle fix*/ out_half4(h4x4[3].zwxy);
|
||||
out_half2(h2x2[0]);
|
||||
_out->sk_FragColor = float4(h2x2[0][0], h3x3[0][0], h4x4[0][0], 1.0);
|
||||
_out->sk_FragColor = float4(h2x2[0].x, h3x3[0].x, h4x4[0].x, 1.0);
|
||||
int i;
|
||||
out_int(i);
|
||||
int2 i2;
|
||||
@ -116,7 +116,7 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front
|
||||
float4 f4;
|
||||
out_float4(f4);
|
||||
/*needs swizzle fix*/ out_float2(f3.xy);
|
||||
/*needs swizzle fix*/ out_float(f2[0]);
|
||||
/*needs swizzle fix*/ out_float(f2.x);
|
||||
_out->sk_FragColor = float4(f, f2.x, f3.x, f4.x);
|
||||
float2x2 f2x2;
|
||||
out_float2x2(f2x2);
|
||||
@ -124,9 +124,9 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front
|
||||
out_float3x3(f3x3);
|
||||
float4x4 f4x4;
|
||||
out_float4x4(f4x4);
|
||||
/*needs swizzle fix*/ out_float(f2x2[0][0]);
|
||||
/*needs swizzle fix*/ out_float(f2x2[0].x);
|
||||
out_float4(f4x4[1]);
|
||||
_out->sk_FragColor = float4(f2x2[0][0], f3x3[0][0], f4x4[0][0], 1.0);
|
||||
_out->sk_FragColor = float4(f2x2[0].x, f3x3[0].x, f4x4[0].x, 1.0);
|
||||
bool b;
|
||||
out_bool(b);
|
||||
bool2 b2;
|
||||
@ -136,7 +136,7 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front
|
||||
bool4 b4;
|
||||
out_bool4(b4);
|
||||
/*needs swizzle fix*/ out_bool2(b4.xw);
|
||||
/*needs swizzle fix*/ out_bool(b3[2]);
|
||||
/*needs swizzle fix*/ out_bool(b3.z);
|
||||
_out->sk_FragColor = float4(b ? 1.0 : 0.0, b2.x ? 1.0 : 0.0, b3.x ? 1.0 : 0.0, b4.x ? 1.0 : 0.0);
|
||||
return *_out;
|
||||
}
|
||||
|
@ -1,8 +1,33 @@
|
||||
void main() {
|
||||
void non_constant_swizzle() {
|
||||
int4 i = int4(int(sqrt(1)));
|
||||
half4 v = half4(half(sqrt(1)));
|
||||
half x = v[i[0]];
|
||||
half y = v[i[1]];
|
||||
half z = v[i[2]];
|
||||
half w = v[i[3]];
|
||||
sk_FragColor = half4(x, y, z, w);
|
||||
}
|
||||
|
||||
void constant_swizzle() {
|
||||
half4 v = half4(half(sqrt(1)));
|
||||
half x = v[0];
|
||||
half y = v[1];
|
||||
half z = v[2];
|
||||
half w = v[3];
|
||||
sk_FragColor = half4(x,y,z,w);
|
||||
sk_FragColor = half4(x, y, z, w);
|
||||
}
|
||||
|
||||
void foldable() {
|
||||
half4 v = half4(2);
|
||||
half x = v[0];
|
||||
half y = v[1];
|
||||
half z = v[2];
|
||||
half w = v[3];
|
||||
sk_FragColor = half4(x, y, z, w);
|
||||
}
|
||||
|
||||
void main() {
|
||||
non_constant_swizzle();
|
||||
constant_swizzle();
|
||||
foldable();
|
||||
}
|
||||
|
@ -4,5 +4,5 @@ float test1[] = float[](1.0, 2.0, 3.0, 4.0);
|
||||
vec2 test2[] = vec2[](vec2(1.0, 2.0), vec2(3.0, 4.0));
|
||||
mat4 test3[] = mat4[]();
|
||||
void main() {
|
||||
sk_FragColor.x = (test1[0] + test2[0].x) + test3[0][0][0];
|
||||
sk_FragColor.x = (test1[0] + test2[0].x) + test3[0][0].x;
|
||||
}
|
||||
|
@ -5,6 +5,6 @@ void main() {
|
||||
vec3 v1 = mat3(1.0) * vec3(2.0);
|
||||
vec3 v2 = vec3(2.0) * mat3(1.0);
|
||||
sk_FragColor = vec4(z[0].x, v1 + v2);
|
||||
mat2 m5 = mat2(mat2(1.0, 2.0, 3.0, 4.0)[0][0]);
|
||||
sk_FragColor = vec4((((((((((mat2(1.0, 2.0, 3.0, 4.0)[0][0] + mat2(vec4(0.0))[0][0]) + mat2(1.0, 2.0, 3.0, 4.0)[0][0]) + mat2(1.0)[0][0]) + m5[0][0]) + mat2(1.0, 2.0, 3.0, 4.0)[0][0]) + mat2(5.0, 6.0, 7.0, 8.0)[0][0]) + mat3x2(1.0, 2.0, 3.0, 4.0, 5.0, 6.0)[0][0]) + mat3(1.0)[0][0]) + mat4(1.0)[0][0]) + mat4(2.0)[0][0]);
|
||||
mat2 m5 = mat2(mat2(1.0, 2.0, 3.0, 4.0)[0].x);
|
||||
sk_FragColor = vec4((((((((((mat2(1.0, 2.0, 3.0, 4.0)[0].x + mat2(vec4(0.0))[0].x) + mat2(1.0, 2.0, 3.0, 4.0)[0].x) + mat2(1.0)[0].x) + m5[0].x) + mat2(1.0, 2.0, 3.0, 4.0)[0].x) + mat2(5.0, 6.0, 7.0, 8.0)[0].x) + mat3x2(1.0, 2.0, 3.0, 4.0, 5.0, 6.0)[0].x) + mat3(1.0)[0].x) + mat4(1.0)[0].x) + mat4(2.0)[0].x);
|
||||
}
|
||||
|
@ -16,7 +16,7 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front
|
||||
float3 v1 = float3x3(1.0) * float3(2.0);
|
||||
float3 v2 = float3(2.0) * float3x3(1.0);
|
||||
_out->sk_FragColor = float4(z[0].x, v1 + v2);
|
||||
float2x2 m5 = float2x2(float2x2(float2(1.0, 2.0), float2(3.0, 4.0))[0][0]);
|
||||
_out->sk_FragColor = float4((((((((((float2x2(float2(1.0, 2.0), float2(3.0, 4.0))[0][0] + float2x2_from_float4(float4(0.0))[0][0]) + float2x2(float2(1.0, 2.0), float2(3.0, 4.0))[0][0]) + float2x2(1.0)[0][0]) + m5[0][0]) + float2x2(float2(1.0, 2.0), float2(3.0, 4.0))[0][0]) + float2x2(float2(5.0, 6.0), float2(7.0, 8.0))[0][0]) + float3x2(float2(1.0, 2.0), float2(3.0, 4.0), float2(5.0, 6.0))[0][0]) + float3x3(1.0)[0][0]) + float4x4(1.0)[0][0]) + float4x4(2.0)[0][0]);
|
||||
float2x2 m5 = float2x2(float2x2(float2(1.0, 2.0), float2(3.0, 4.0))[0].x);
|
||||
_out->sk_FragColor = float4((((((((((float2x2(float2(1.0, 2.0), float2(3.0, 4.0))[0].x + float2x2_from_float4(float4(0.0))[0].x) + float2x2(float2(1.0, 2.0), float2(3.0, 4.0))[0].x) + float2x2(1.0)[0].x) + m5[0].x) + float2x2(float2(1.0, 2.0), float2(3.0, 4.0))[0].x) + float2x2(float2(5.0, 6.0), float2(7.0, 8.0))[0].x) + float3x2(float2(1.0, 2.0), float2(3.0, 4.0), float2(5.0, 6.0))[0].x) + float3x3(1.0)[0].x) + float4x4(1.0)[0].x) + float4x4(2.0)[0].x);
|
||||
return *_out;
|
||||
}
|
||||
|
@ -42,12 +42,12 @@ OpDecorate %60 RelaxedPrecision
|
||||
OpDecorate %61 RelaxedPrecision
|
||||
OpDecorate %57 RelaxedPrecision
|
||||
OpDecorate %57 RelaxedPrecision
|
||||
OpDecorate %71 RelaxedPrecision
|
||||
OpDecorate %74 RelaxedPrecision
|
||||
OpDecorate %77 RelaxedPrecision
|
||||
OpDecorate %159 RelaxedPrecision
|
||||
OpDecorate %164 RelaxedPrecision
|
||||
OpDecorate %167 RelaxedPrecision
|
||||
OpDecorate %72 RelaxedPrecision
|
||||
OpDecorate %75 RelaxedPrecision
|
||||
OpDecorate %78 RelaxedPrecision
|
||||
OpDecorate %161 RelaxedPrecision
|
||||
OpDecorate %166 RelaxedPrecision
|
||||
OpDecorate %169 RelaxedPrecision
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||
@ -65,9 +65,9 @@ OpDecorate %167 RelaxedPrecision
|
||||
%float_4 = OpConstant %float 4
|
||||
%20 = OpConstantComposite %v4float %float_4 %float_4 %float_4 %float_4
|
||||
%float_1 = OpConstant %float 1
|
||||
%_ptr_Function_float = OpTypePointer Function %float
|
||||
%int = OpTypeInt 32 1
|
||||
%int_1 = OpConstant %int 1
|
||||
%_ptr_Function_float = OpTypePointer Function %float
|
||||
%float_2 = OpConstant %float 2
|
||||
%v2float = OpTypeVector %float 2
|
||||
%27 = OpConstantComposite %v2float %float_2 %float_2
|
||||
@ -86,31 +86,31 @@ OpDecorate %167 RelaxedPrecision
|
||||
%v2int = OpTypeVector %int 2
|
||||
%_ptr_Function_v2int = OpTypePointer Function %v2int
|
||||
%int_2 = OpConstant %int 2
|
||||
%83 = OpConstantComposite %v2int %int_2 %int_2
|
||||
%84 = OpConstantComposite %v2int %int_2 %int_2
|
||||
%v4int = OpTypeVector %int 4
|
||||
%_ptr_Function_v4int = OpTypePointer Function %v4int
|
||||
%int_4 = OpConstant %int 4
|
||||
%88 = OpConstantComposite %v4int %int_4 %int_4 %int_4 %int_4
|
||||
%89 = OpConstantComposite %v4int %int_4 %int_4 %int_4 %int_4
|
||||
%v3int = OpTypeVector %int 3
|
||||
%90 = OpConstantComposite %v3int %int_3 %int_3 %int_3
|
||||
%91 = OpConstantComposite %v3int %int_3 %int_3 %int_3
|
||||
%_ptr_Function_int = OpTypePointer Function %int
|
||||
%float_2_0 = OpConstant %float 2
|
||||
%104 = OpConstantComposite %v2float %float_2_0 %float_2_0
|
||||
%105 = OpConstantComposite %v2float %float_2_0 %float_2_0
|
||||
%float_3_0 = OpConstant %float 3
|
||||
%107 = OpConstantComposite %v3float %float_3_0 %float_3_0 %float_3_0
|
||||
%109 = OpConstantComposite %v2float %float_2_0 %float_2_0
|
||||
%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
|
||||
%v3bool = OpTypeVector %bool 3
|
||||
%_ptr_Function_v3bool = OpTypePointer Function %v3bool
|
||||
%true = OpConstantTrue %bool
|
||||
%149 = OpConstantComposite %v3bool %true %true %true
|
||||
%151 = OpConstantComposite %v3bool %true %true %true
|
||||
%v4bool = OpTypeVector %bool 4
|
||||
%_ptr_Function_v4bool = OpTypePointer Function %v4bool
|
||||
%false = OpConstantFalse %bool
|
||||
%154 = OpConstantComposite %v4bool %false %false %false %false
|
||||
%156 = OpConstantComposite %v4bool %false %false %false %false
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%156 = OpConstantComposite %v2bool %false %false
|
||||
%158 = OpConstantComposite %v2bool %false %false
|
||||
%_ptr_Function_bool = OpTypePointer Function %bool
|
||||
%float_0_0 = OpConstant %float 0
|
||||
%main = OpFunction %void None %11
|
||||
@ -125,14 +125,14 @@ OpDecorate %167 RelaxedPrecision
|
||||
%f2 = OpVariable %_ptr_Function_v2float Function
|
||||
%f3 = OpVariable %_ptr_Function_v3float Function
|
||||
%f2x2 = OpVariable %_ptr_Function_mat2v2float Function
|
||||
%128 = OpVariable %_ptr_Function_mat3v3float Function
|
||||
%136 = OpVariable %_ptr_Function_mat4v4float Function
|
||||
%130 = OpVariable %_ptr_Function_mat3v3float Function
|
||||
%138 = OpVariable %_ptr_Function_mat4v4float Function
|
||||
%b3 = OpVariable %_ptr_Function_v3bool Function
|
||||
%b4 = OpVariable %_ptr_Function_v4bool Function
|
||||
OpStore %h3 %16
|
||||
OpStore %h4 %20
|
||||
%25 = OpAccessChain %_ptr_Function_float %h3 %int_1
|
||||
OpStore %25 %float_1
|
||||
%23 = OpAccessChain %_ptr_Function_float %h3 %int_1
|
||||
OpStore %23 %float_1
|
||||
%30 = OpLoad %v3float %h3
|
||||
%31 = OpVectorShuffle %v3float %30 %27 3 1 4
|
||||
OpStore %h3 %31
|
||||
@ -165,90 +165,92 @@ OpStore %63 %62
|
||||
%65 = OpAccessChain %_ptr_Function_v4float %h4x4 %int_3
|
||||
%66 = OpAccessChain %_ptr_Function_float %65 %int_3
|
||||
OpStore %66 %float_1
|
||||
%68 = OpAccessChain %_ptr_Function_float %h2x2 %int_0 %int_0
|
||||
OpStore %68 %float_1
|
||||
%69 = OpAccessChain %_ptr_Function_v2float %h2x2 %int_0
|
||||
%71 = OpLoad %v2float %69
|
||||
%72 = OpVectorExtractDynamic %float %71 %int_0
|
||||
%73 = OpAccessChain %_ptr_Function_v3float %h3x3 %int_0
|
||||
%74 = OpLoad %v3float %73
|
||||
%75 = OpVectorExtractDynamic %float %74 %int_0
|
||||
%76 = OpAccessChain %_ptr_Function_v4float %h4x4 %int_0
|
||||
%77 = OpLoad %v4float %76
|
||||
%78 = OpVectorExtractDynamic %float %77 %int_0
|
||||
%79 = OpCompositeConstruct %v4float %72 %75 %78 %float_1
|
||||
OpStore %sk_FragColor %79
|
||||
OpStore %i2 %83
|
||||
OpStore %i4 %88
|
||||
%92 = OpLoad %v4int %i4
|
||||
%93 = OpVectorShuffle %v4int %92 %90 4 5 6 3
|
||||
OpStore %i4 %93
|
||||
%94 = OpAccessChain %_ptr_Function_int %i2 %int_1
|
||||
OpStore %94 %int_1
|
||||
%97 = OpLoad %v2int %i2
|
||||
%98 = OpCompositeExtract %int %97 0
|
||||
%96 = OpConvertSToF %float %98
|
||||
%100 = OpLoad %v4int %i4
|
||||
%101 = OpCompositeExtract %int %100 0
|
||||
%99 = OpConvertSToF %float %101
|
||||
%102 = OpCompositeConstruct %v4float %float_1 %96 %float_3 %99
|
||||
OpStore %sk_FragColor %102
|
||||
OpStore %f2 %104
|
||||
OpStore %f3 %107
|
||||
%110 = OpLoad %v3float %f3
|
||||
%111 = OpVectorShuffle %v3float %110 %109 3 4 2
|
||||
OpStore %f3 %111
|
||||
%113 = OpAccessChain %_ptr_Function_float %f2 %int_0
|
||||
OpStore %113 %float_1_0
|
||||
%114 = OpLoad %v2float %f2
|
||||
%115 = OpCompositeExtract %float %114 0
|
||||
%116 = OpLoad %v3float %f3
|
||||
%117 = OpCompositeExtract %float %116 0
|
||||
%119 = OpCompositeConstruct %v4float %float_1_0 %115 %117 %float_4_0
|
||||
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_float %f2x2 %int_0 %int_0
|
||||
OpStore %124 %float_1_0
|
||||
%68 = OpAccessChain %_ptr_Function_v2float %h2x2 %int_0
|
||||
%70 = OpAccessChain %_ptr_Function_float %68 %int_0
|
||||
OpStore %70 %float_1
|
||||
%71 = OpAccessChain %_ptr_Function_v2float %h2x2 %int_0
|
||||
%72 = OpLoad %v2float %71
|
||||
%73 = OpCompositeExtract %float %72 0
|
||||
%74 = OpAccessChain %_ptr_Function_v3float %h3x3 %int_0
|
||||
%75 = OpLoad %v3float %74
|
||||
%76 = OpCompositeExtract %float %75 0
|
||||
%77 = OpAccessChain %_ptr_Function_v4float %h4x4 %int_0
|
||||
%78 = OpLoad %v4float %77
|
||||
%79 = OpCompositeExtract %float %78 0
|
||||
%80 = OpCompositeConstruct %v4float %73 %76 %79 %float_1
|
||||
OpStore %sk_FragColor %80
|
||||
OpStore %i2 %84
|
||||
OpStore %i4 %89
|
||||
%93 = OpLoad %v4int %i4
|
||||
%94 = OpVectorShuffle %v4int %93 %91 4 5 6 3
|
||||
OpStore %i4 %94
|
||||
%95 = OpAccessChain %_ptr_Function_int %i2 %int_1
|
||||
OpStore %95 %int_1
|
||||
%98 = OpLoad %v2int %i2
|
||||
%99 = OpCompositeExtract %int %98 0
|
||||
%97 = OpConvertSToF %float %99
|
||||
%101 = OpLoad %v4int %i4
|
||||
%102 = OpCompositeExtract %int %101 0
|
||||
%100 = OpConvertSToF %float %102
|
||||
%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
|
||||
%120 = OpCompositeConstruct %v4float %float_1_0 %116 %118 %float_4_0
|
||||
OpStore %sk_FragColor %120
|
||||
%123 = OpCompositeConstruct %v2float %float_2_0 %float_0
|
||||
%124 = OpCompositeConstruct %v2float %float_0 %float_2_0
|
||||
%122 = OpCompositeConstruct %mat2v2float %123 %124
|
||||
OpStore %f2x2 %122
|
||||
%125 = OpAccessChain %_ptr_Function_v2float %f2x2 %int_0
|
||||
%126 = OpLoad %v2float %125
|
||||
%127 = OpVectorExtractDynamic %float %126 %int_0
|
||||
%130 = OpCompositeConstruct %v3float %float_3_0 %float_0 %float_0
|
||||
%131 = OpCompositeConstruct %v3float %float_0 %float_3_0 %float_0
|
||||
%132 = OpCompositeConstruct %v3float %float_0 %float_0 %float_3_0
|
||||
%129 = OpCompositeConstruct %mat3v3float %130 %131 %132
|
||||
OpStore %128 %129
|
||||
%133 = OpAccessChain %_ptr_Function_v3float %128 %int_0
|
||||
%134 = OpLoad %v3float %133
|
||||
%135 = OpVectorExtractDynamic %float %134 %int_0
|
||||
%138 = OpCompositeConstruct %v4float %float_4_0 %float_0 %float_0 %float_0
|
||||
%139 = OpCompositeConstruct %v4float %float_0 %float_4_0 %float_0 %float_0
|
||||
%140 = OpCompositeConstruct %v4float %float_0 %float_0 %float_4_0 %float_0
|
||||
%141 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %float_4_0
|
||||
%137 = OpCompositeConstruct %mat4v4float %138 %139 %140 %141
|
||||
OpStore %136 %137
|
||||
%142 = OpAccessChain %_ptr_Function_v4float %136 %int_0
|
||||
%143 = OpLoad %v4float %142
|
||||
%144 = OpVectorExtractDynamic %float %143 %int_0
|
||||
%145 = OpCompositeConstruct %v4float %127 %135 %144 %float_1
|
||||
OpStore %sk_FragColor %145
|
||||
OpStore %b3 %149
|
||||
OpStore %b4 %154
|
||||
%158 = OpLoad %v4bool %b4
|
||||
%159 = OpVectorShuffle %v4bool %158 %156 4 1 2 5
|
||||
OpStore %b4 %159
|
||||
%160 = OpAccessChain %_ptr_Function_bool %b3 %int_2
|
||||
OpStore %160 %true
|
||||
%162 = OpSelect %float %false %float_1 %float_0_0
|
||||
%164 = OpLoad %v3bool %b3
|
||||
%165 = OpCompositeExtract %bool %164 0
|
||||
%166 = OpSelect %float %165 %float_1 %float_0_0
|
||||
%167 = OpLoad %v4bool %b4
|
||||
%168 = OpCompositeExtract %bool %167 0
|
||||
%169 = OpSelect %float %168 %float_1 %float_0_0
|
||||
%170 = OpCompositeConstruct %v4float %float_1 %162 %166 %169
|
||||
OpStore %sk_FragColor %170
|
||||
%126 = OpAccessChain %_ptr_Function_float %125 %int_0
|
||||
OpStore %126 %float_1_0
|
||||
%127 = OpAccessChain %_ptr_Function_v2float %f2x2 %int_0
|
||||
%128 = OpLoad %v2float %127
|
||||
%129 = OpCompositeExtract %float %128 0
|
||||
%132 = OpCompositeConstruct %v3float %float_3_0 %float_0 %float_0
|
||||
%133 = OpCompositeConstruct %v3float %float_0 %float_3_0 %float_0
|
||||
%134 = OpCompositeConstruct %v3float %float_0 %float_0 %float_3_0
|
||||
%131 = OpCompositeConstruct %mat3v3float %132 %133 %134
|
||||
OpStore %130 %131
|
||||
%135 = OpAccessChain %_ptr_Function_v3float %130 %int_0
|
||||
%136 = OpLoad %v3float %135
|
||||
%137 = OpCompositeExtract %float %136 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 %138 %139
|
||||
%144 = OpAccessChain %_ptr_Function_v4float %138 %int_0
|
||||
%145 = OpLoad %v4float %144
|
||||
%146 = OpCompositeExtract %float %145 0
|
||||
%147 = OpCompositeConstruct %v4float %129 %137 %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
|
||||
%164 = OpSelect %float %false %float_1 %float_0_0
|
||||
%166 = OpLoad %v3bool %b3
|
||||
%167 = OpCompositeExtract %bool %166 0
|
||||
%168 = OpSelect %float %167 %float_1 %float_0_0
|
||||
%169 = OpLoad %v4bool %b4
|
||||
%170 = OpCompositeExtract %bool %169 0
|
||||
%171 = OpSelect %float %170 %float_1 %float_0_0
|
||||
%172 = OpCompositeConstruct %v4float %float_1 %164 %168 %171
|
||||
OpStore %sk_FragColor %172
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
|
@ -12,7 +12,7 @@ void main() {
|
||||
}
|
||||
|
||||
{
|
||||
h3[1] = 1.0;
|
||||
h3.y = 1.0;
|
||||
}
|
||||
|
||||
{
|
||||
@ -48,10 +48,10 @@ void main() {
|
||||
}
|
||||
|
||||
{
|
||||
h2x2[0][0] = 1.0;
|
||||
h2x2[0].x = 1.0;
|
||||
}
|
||||
|
||||
sk_FragColor = vec4(h2x2[0][0], h3x3[0][0], h4x4[0][0], 1.0);
|
||||
sk_FragColor = vec4(h2x2[0].x, h3x3[0].x, h4x4[0].x, 1.0);
|
||||
ivec2 i2;
|
||||
{
|
||||
i2 = ivec2(2);
|
||||
@ -67,7 +67,7 @@ void main() {
|
||||
}
|
||||
|
||||
{
|
||||
i2[1] = 1;
|
||||
i2.y = 1;
|
||||
}
|
||||
|
||||
sk_FragColor = vec4(1.0, float(i2.x), 3.0, float(i4.x));
|
||||
@ -86,7 +86,7 @@ void main() {
|
||||
}
|
||||
|
||||
{
|
||||
f2[0] = 1.0;
|
||||
f2.x = 1.0;
|
||||
}
|
||||
|
||||
sk_FragColor = vec4(1.0, f2.x, f3.x, 4.0);
|
||||
@ -96,10 +96,10 @@ void main() {
|
||||
}
|
||||
|
||||
{
|
||||
f2x2[0][0] = 1.0;
|
||||
f2x2[0].x = 1.0;
|
||||
}
|
||||
|
||||
sk_FragColor = vec4(f2x2[0][0], mat3(3.0)[0][0], mat4(4.0)[0][0], 1.0);
|
||||
sk_FragColor = vec4(f2x2[0].x, mat3(3.0)[0].x, mat4(4.0)[0].x, 1.0);
|
||||
bvec3 b3;
|
||||
{
|
||||
b3 = bvec3(true);
|
||||
@ -115,7 +115,7 @@ void main() {
|
||||
}
|
||||
|
||||
{
|
||||
b3[2] = true;
|
||||
b3.z = true;
|
||||
}
|
||||
|
||||
sk_FragColor = vec4(1.0, false ? 1.0 : 0.0, b3.x ? 1.0 : 0.0, b4.x ? 1.0 : 0.0);
|
||||
|
@ -20,7 +20,7 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front
|
||||
}
|
||||
|
||||
{
|
||||
h3[1] = 1.0;
|
||||
h3.y = 1.0;
|
||||
}
|
||||
|
||||
{
|
||||
@ -56,10 +56,10 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front
|
||||
}
|
||||
|
||||
{
|
||||
h2x2[0][0] = 1.0;
|
||||
h2x2[0].x = 1.0;
|
||||
}
|
||||
|
||||
_out->sk_FragColor = float4(h2x2[0][0], h3x3[0][0], h4x4[0][0], 1.0);
|
||||
_out->sk_FragColor = float4(h2x2[0].x, h3x3[0].x, h4x4[0].x, 1.0);
|
||||
int2 i2;
|
||||
{
|
||||
i2 = int2(2);
|
||||
@ -75,7 +75,7 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front
|
||||
}
|
||||
|
||||
{
|
||||
i2[1] = 1;
|
||||
i2.y = 1;
|
||||
}
|
||||
|
||||
_out->sk_FragColor = float4(1.0, float(i2.x), 3.0, float(i4.x));
|
||||
@ -94,7 +94,7 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front
|
||||
}
|
||||
|
||||
{
|
||||
f2[0] = 1.0;
|
||||
f2.x = 1.0;
|
||||
}
|
||||
|
||||
_out->sk_FragColor = float4(1.0, f2.x, f3.x, 4.0);
|
||||
@ -104,10 +104,10 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front
|
||||
}
|
||||
|
||||
{
|
||||
f2x2[0][0] = 1.0;
|
||||
f2x2[0].x = 1.0;
|
||||
}
|
||||
|
||||
_out->sk_FragColor = float4(f2x2[0][0], float3x3(3.0)[0][0], float4x4(4.0)[0][0], 1.0);
|
||||
_out->sk_FragColor = float4(f2x2[0].x, float3x3(3.0)[0].x, float4x4(4.0)[0].x, 1.0);
|
||||
bool3 b3;
|
||||
{
|
||||
b3 = bool3(true);
|
||||
@ -123,7 +123,7 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front
|
||||
}
|
||||
|
||||
{
|
||||
b3[2] = true;
|
||||
b3.z = true;
|
||||
}
|
||||
|
||||
_out->sk_FragColor = float4(1.0, bool(false) ? 1.0 : 0.0, b3.x ? 1.0 : 0.0, b4.x ? 1.0 : 0.0);
|
||||
|
@ -1,15 +1,15 @@
|
||||
|
||||
out vec4 sk_FragColor;
|
||||
void main() {
|
||||
sk_FragColor.x = mat2(mat3(1.0))[0][0];
|
||||
sk_FragColor.x = mat2(mat4(1.0))[0][0];
|
||||
sk_FragColor.x = mat3(mat4(1.0))[0][0];
|
||||
sk_FragColor.x = mat3(mat2(1.0))[0][0];
|
||||
sk_FragColor.x = mat3(mat2x3(1.0))[0][0];
|
||||
sk_FragColor.x = mat3(mat3x2(1.0))[0][0];
|
||||
sk_FragColor.x = mat4(mat3(mat2(1.0)))[0][0];
|
||||
sk_FragColor.x = mat4(mat4x3(mat4x2(1.0)))[0][0];
|
||||
sk_FragColor.x = mat4(mat3x4(mat2x4(1.0)))[0][0];
|
||||
sk_FragColor.x = mat2x4(mat4x2(1.0))[0][0];
|
||||
sk_FragColor.x = mat4x2(mat2x4(1.0))[0][0];
|
||||
sk_FragColor.x = mat2(mat3(1.0))[0].x;
|
||||
sk_FragColor.x = mat2(mat4(1.0))[0].x;
|
||||
sk_FragColor.x = mat3(mat4(1.0))[0].x;
|
||||
sk_FragColor.x = mat3(mat2(1.0))[0].x;
|
||||
sk_FragColor.x = mat3(mat2x3(1.0))[0].x;
|
||||
sk_FragColor.x = mat3(mat3x2(1.0))[0].x;
|
||||
sk_FragColor.x = mat4(mat3(mat2(1.0)))[0].x;
|
||||
sk_FragColor.x = mat4(mat4x3(mat4x2(1.0)))[0].x;
|
||||
sk_FragColor.x = mat4(mat3x4(mat2x4(1.0)))[0].x;
|
||||
sk_FragColor.x = mat2x4(mat4x2(1.0))[0].x;
|
||||
sk_FragColor.x = mat4x2(mat2x4(1.0))[0].x;
|
||||
}
|
||||
|
@ -48,16 +48,16 @@ float4x2 float4x2_from_float2x4(float2x4 x0) {
|
||||
fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
||||
Outputs _outputStruct;
|
||||
thread Outputs* _out = &_outputStruct;
|
||||
_out->sk_FragColor.x = float2x2_from_float3x3(float3x3(1.0))[0][0];
|
||||
_out->sk_FragColor.x = float2x2_from_float4x4(float4x4(1.0))[0][0];
|
||||
_out->sk_FragColor.x = float3x3_from_float4x4(float4x4(1.0))[0][0];
|
||||
_out->sk_FragColor.x = float3x3_from_float2x2(float2x2(1.0))[0][0];
|
||||
_out->sk_FragColor.x = float3x3_from_float2x3(float2x3(1.0))[0][0];
|
||||
_out->sk_FragColor.x = float3x3_from_float3x2(float3x2(1.0))[0][0];
|
||||
_out->sk_FragColor.x = float4x4_from_float3x3(float3x3_from_float2x2(float2x2(1.0)))[0][0];
|
||||
_out->sk_FragColor.x = float4x4_from_float4x3(float4x3_from_float4x2(float4x2(1.0)))[0][0];
|
||||
_out->sk_FragColor.x = float4x4_from_float3x4(float3x4_from_float2x4(float2x4(1.0)))[0][0];
|
||||
_out->sk_FragColor.x = float2x4_from_float4x2(float4x2(1.0))[0][0];
|
||||
_out->sk_FragColor.x = float4x2_from_float2x4(float2x4(1.0))[0][0];
|
||||
_out->sk_FragColor.x = float2x2_from_float3x3(float3x3(1.0))[0].x;
|
||||
_out->sk_FragColor.x = float2x2_from_float4x4(float4x4(1.0))[0].x;
|
||||
_out->sk_FragColor.x = float3x3_from_float4x4(float4x4(1.0))[0].x;
|
||||
_out->sk_FragColor.x = float3x3_from_float2x2(float2x2(1.0))[0].x;
|
||||
_out->sk_FragColor.x = float3x3_from_float2x3(float2x3(1.0))[0].x;
|
||||
_out->sk_FragColor.x = float3x3_from_float3x2(float3x2(1.0))[0].x;
|
||||
_out->sk_FragColor.x = float4x4_from_float3x3(float3x3_from_float2x2(float2x2(1.0)))[0].x;
|
||||
_out->sk_FragColor.x = float4x4_from_float4x3(float4x3_from_float4x2(float4x2(1.0)))[0].x;
|
||||
_out->sk_FragColor.x = float4x4_from_float3x4(float3x4_from_float2x4(float2x4(1.0)))[0].x;
|
||||
_out->sk_FragColor.x = float2x4_from_float4x2(float4x2(1.0))[0].x;
|
||||
_out->sk_FragColor.x = float4x2_from_float2x4(float2x4(1.0))[0].x;
|
||||
return *_out;
|
||||
}
|
||||
|
@ -6,24 +6,38 @@ OpExecutionMode %main OriginUpperLeft
|
||||
OpName %sk_FragColor "sk_FragColor"
|
||||
OpName %sk_Clockwise "sk_Clockwise"
|
||||
OpName %main "main"
|
||||
OpName %v "v"
|
||||
OpName %x "x"
|
||||
OpName %y "y"
|
||||
OpName %z "z"
|
||||
OpName %w "w"
|
||||
OpName %_0_i "_0_i"
|
||||
OpName %_1_v "_1_v"
|
||||
OpName %_2_x "_2_x"
|
||||
OpName %_3_y "_3_y"
|
||||
OpName %_4_z "_4_z"
|
||||
OpName %_5_w "_5_w"
|
||||
OpName %_6_v "_6_v"
|
||||
OpName %_7_x "_7_x"
|
||||
OpName %_8_y "_8_y"
|
||||
OpName %_9_z "_9_z"
|
||||
OpName %_10_w "_10_w"
|
||||
OpDecorate %sk_FragColor RelaxedPrecision
|
||||
OpDecorate %sk_FragColor Location 0
|
||||
OpDecorate %sk_FragColor Index 0
|
||||
OpDecorate %sk_Clockwise RelaxedPrecision
|
||||
OpDecorate %sk_Clockwise BuiltIn FrontFacing
|
||||
OpDecorate %20 RelaxedPrecision
|
||||
OpDecorate %25 RelaxedPrecision
|
||||
OpDecorate %29 RelaxedPrecision
|
||||
OpDecorate %33 RelaxedPrecision
|
||||
OpDecorate %36 RelaxedPrecision
|
||||
OpDecorate %27 RelaxedPrecision
|
||||
OpDecorate %32 RelaxedPrecision
|
||||
OpDecorate %37 RelaxedPrecision
|
||||
OpDecorate %38 RelaxedPrecision
|
||||
OpDecorate %39 RelaxedPrecision
|
||||
OpDecorate %42 RelaxedPrecision
|
||||
OpDecorate %46 RelaxedPrecision
|
||||
OpDecorate %47 RelaxedPrecision
|
||||
OpDecorate %48 RelaxedPrecision
|
||||
OpDecorate %49 RelaxedPrecision
|
||||
OpDecorate %55 RelaxedPrecision
|
||||
OpDecorate %58 RelaxedPrecision
|
||||
OpDecorate %61 RelaxedPrecision
|
||||
OpDecorate %64 RelaxedPrecision
|
||||
OpDecorate %66 RelaxedPrecision
|
||||
OpDecorate %67 RelaxedPrecision
|
||||
OpDecorate %68 RelaxedPrecision
|
||||
OpDecorate %69 RelaxedPrecision
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||
@ -33,41 +47,81 @@ OpDecorate %39 RelaxedPrecision
|
||||
%sk_Clockwise = OpVariable %_ptr_Input_bool Input
|
||||
%void = OpTypeVoid
|
||||
%11 = OpTypeFunction %void
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%float_1 = OpConstant %float 1
|
||||
%_ptr_Function_float = OpTypePointer Function %float
|
||||
%int = OpTypeInt 32 1
|
||||
%int_0 = OpConstant %int 0
|
||||
%int_1 = OpConstant %int 1
|
||||
%int_2 = OpConstant %int 2
|
||||
%int_3 = OpConstant %int 3
|
||||
%v4int = OpTypeVector %int 4
|
||||
%_ptr_Function_v4int = OpTypePointer Function %v4int
|
||||
%float_1 = OpConstant %float 1
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%_ptr_Function_float = OpTypePointer Function %float
|
||||
%float_2 = OpConstant %float 2
|
||||
%71 = OpConstantComposite %v4float %float_2 %float_2 %float_2 %float_2
|
||||
%main = OpFunction %void None %11
|
||||
%12 = OpLabel
|
||||
%v = OpVariable %_ptr_Function_v4float Function
|
||||
%x = OpVariable %_ptr_Function_float Function
|
||||
%y = OpVariable %_ptr_Function_float Function
|
||||
%z = OpVariable %_ptr_Function_float Function
|
||||
%w = OpVariable %_ptr_Function_float Function
|
||||
%15 = OpExtInst %float %1 Sqrt %float_1
|
||||
%17 = OpCompositeConstruct %v4float %15 %15 %15 %15
|
||||
OpStore %v %17
|
||||
%20 = OpLoad %v4float %v
|
||||
%23 = OpVectorExtractDynamic %float %20 %int_0
|
||||
OpStore %x %23
|
||||
%25 = OpLoad %v4float %v
|
||||
%27 = OpVectorExtractDynamic %float %25 %int_1
|
||||
OpStore %y %27
|
||||
%29 = OpLoad %v4float %v
|
||||
%31 = OpVectorExtractDynamic %float %29 %int_2
|
||||
OpStore %z %31
|
||||
%33 = OpLoad %v4float %v
|
||||
%35 = OpVectorExtractDynamic %float %33 %int_3
|
||||
OpStore %w %35
|
||||
%36 = OpLoad %float %x
|
||||
%37 = OpLoad %float %y
|
||||
%38 = OpLoad %float %z
|
||||
%39 = OpLoad %float %w
|
||||
%40 = OpCompositeConstruct %v4float %36 %37 %38 %39
|
||||
OpStore %sk_FragColor %40
|
||||
%_0_i = OpVariable %_ptr_Function_v4int Function
|
||||
%_1_v = OpVariable %_ptr_Function_v4float Function
|
||||
%_2_x = OpVariable %_ptr_Function_float Function
|
||||
%_3_y = OpVariable %_ptr_Function_float Function
|
||||
%_4_z = OpVariable %_ptr_Function_float Function
|
||||
%_5_w = OpVariable %_ptr_Function_float Function
|
||||
%_6_v = OpVariable %_ptr_Function_v4float Function
|
||||
%_7_x = OpVariable %_ptr_Function_float Function
|
||||
%_8_y = OpVariable %_ptr_Function_float Function
|
||||
%_9_z = OpVariable %_ptr_Function_float Function
|
||||
%_10_w = OpVariable %_ptr_Function_float Function
|
||||
%18 = OpExtInst %float %1 Sqrt %float_1
|
||||
%17 = OpConvertFToS %int %18
|
||||
%20 = OpCompositeConstruct %v4int %17 %17 %17 %17
|
||||
OpStore %_0_i %20
|
||||
%23 = OpExtInst %float %1 Sqrt %float_1
|
||||
%24 = OpCompositeConstruct %v4float %23 %23 %23 %23
|
||||
OpStore %_1_v %24
|
||||
%27 = OpLoad %v4float %_1_v
|
||||
%28 = OpLoad %v4int %_0_i
|
||||
%29 = OpCompositeExtract %int %28 0
|
||||
%30 = OpVectorExtractDynamic %float %27 %29
|
||||
OpStore %_2_x %30
|
||||
%32 = OpLoad %v4float %_1_v
|
||||
%33 = OpLoad %v4int %_0_i
|
||||
%34 = OpCompositeExtract %int %33 1
|
||||
%35 = OpVectorExtractDynamic %float %32 %34
|
||||
OpStore %_3_y %35
|
||||
%37 = OpLoad %v4float %_1_v
|
||||
%38 = OpLoad %v4int %_0_i
|
||||
%39 = OpCompositeExtract %int %38 2
|
||||
%40 = OpVectorExtractDynamic %float %37 %39
|
||||
OpStore %_4_z %40
|
||||
%42 = OpLoad %v4float %_1_v
|
||||
%43 = OpLoad %v4int %_0_i
|
||||
%44 = OpCompositeExtract %int %43 3
|
||||
%45 = OpVectorExtractDynamic %float %42 %44
|
||||
OpStore %_5_w %45
|
||||
%46 = OpLoad %float %_2_x
|
||||
%47 = OpLoad %float %_3_y
|
||||
%48 = OpLoad %float %_4_z
|
||||
%49 = OpLoad %float %_5_w
|
||||
%50 = OpCompositeConstruct %v4float %46 %47 %48 %49
|
||||
OpStore %sk_FragColor %50
|
||||
%52 = OpExtInst %float %1 Sqrt %float_1
|
||||
%53 = OpCompositeConstruct %v4float %52 %52 %52 %52
|
||||
OpStore %_6_v %53
|
||||
%55 = OpLoad %v4float %_6_v
|
||||
%56 = OpCompositeExtract %float %55 0
|
||||
OpStore %_7_x %56
|
||||
%58 = OpLoad %v4float %_6_v
|
||||
%59 = OpCompositeExtract %float %58 1
|
||||
OpStore %_8_y %59
|
||||
%61 = OpLoad %v4float %_6_v
|
||||
%62 = OpCompositeExtract %float %61 2
|
||||
OpStore %_9_z %62
|
||||
%64 = OpLoad %v4float %_6_v
|
||||
%65 = OpCompositeExtract %float %64 3
|
||||
OpStore %_10_w %65
|
||||
%66 = OpLoad %float %_7_x
|
||||
%67 = OpLoad %float %_8_y
|
||||
%68 = OpLoad %float %_9_z
|
||||
%69 = OpLoad %float %_10_w
|
||||
%70 = OpCompositeConstruct %v4float %66 %67 %68 %69
|
||||
OpStore %sk_FragColor %70
|
||||
OpStore %sk_FragColor %71
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
|
@ -1,10 +1,27 @@
|
||||
|
||||
out vec4 sk_FragColor;
|
||||
void main() {
|
||||
vec4 v = vec4(sqrt(1.0));
|
||||
float x = v[0];
|
||||
float y = v[1];
|
||||
float z = v[2];
|
||||
float w = v[3];
|
||||
sk_FragColor = vec4(x, y, z, w);
|
||||
{
|
||||
ivec4 _0_i = ivec4(int(sqrt(1.0)));
|
||||
vec4 _1_v = vec4(sqrt(1.0));
|
||||
float _2_x = _1_v[_0_i.x];
|
||||
float _3_y = _1_v[_0_i.y];
|
||||
float _4_z = _1_v[_0_i.z];
|
||||
float _5_w = _1_v[_0_i.w];
|
||||
sk_FragColor = vec4(_2_x, _3_y, _4_z, _5_w);
|
||||
}
|
||||
|
||||
{
|
||||
vec4 _6_v = vec4(sqrt(1.0));
|
||||
float _7_x = _6_v.x;
|
||||
float _8_y = _6_v.y;
|
||||
float _9_z = _6_v.z;
|
||||
float _10_w = _6_v.w;
|
||||
sk_FragColor = vec4(_7_x, _8_y, _9_z, _10_w);
|
||||
}
|
||||
|
||||
{
|
||||
sk_FragColor = vec4(2.0, 2.0, 2.0, 2.0);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -9,11 +9,28 @@ struct Outputs {
|
||||
fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
||||
Outputs _outputStruct;
|
||||
thread Outputs* _out = &_outputStruct;
|
||||
float4 v = float4(sqrt(1.0));
|
||||
float x = v[0];
|
||||
float y = v[1];
|
||||
float z = v[2];
|
||||
float w = v[3];
|
||||
_out->sk_FragColor = float4(x, y, z, w);
|
||||
{
|
||||
int4 _0_i = int4(int(sqrt(1.0)));
|
||||
float4 _1_v = float4(sqrt(1.0));
|
||||
float _2_x = _1_v[_0_i.x];
|
||||
float _3_y = _1_v[_0_i.y];
|
||||
float _4_z = _1_v[_0_i.z];
|
||||
float _5_w = _1_v[_0_i.w];
|
||||
_out->sk_FragColor = float4(_2_x, _3_y, _4_z, _5_w);
|
||||
}
|
||||
|
||||
{
|
||||
float4 _6_v = float4(sqrt(1.0));
|
||||
float _7_x = _6_v.x;
|
||||
float _8_y = _6_v.y;
|
||||
float _9_z = _6_v.z;
|
||||
float _10_w = _6_v.w;
|
||||
_out->sk_FragColor = float4(_7_x, _8_y, _9_z, _10_w);
|
||||
}
|
||||
|
||||
{
|
||||
_out->sk_FragColor = float4(2.0, 2.0, 2.0, 2.0);
|
||||
}
|
||||
|
||||
return *_out;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user