Migrate the last SkSL tests in shared/ to dm.

The leftover tests in shared/ are not easily testable as Runtime
Effects; they do things that ES2 doesn't support or use a feature not
exposed directly by Runtime Effects.

Change-Id: I7ebe170cf713c4a0d2dbef333c1fcbac2410c67f
Bug: skia:11009
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/367059
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
This commit is contained in:
John Stiles 2021-02-08 14:20:28 -05:00 committed by Skia Commit-Bot
parent 5af72c1abe
commit ecd7c2278f
21 changed files with 532 additions and 389 deletions

View File

@ -1,7 +1,6 @@
void main() {
int r, g;
(true ? r : g) = 1;
(false ? r : g) = 0;
sk_FragColor.x = half(r);
sk_FragColor.y = half(g);
half4 main() {
half r, g;
(true ? r : g) = 0;
(false ? r : g) = 1;
return half4(r, g, 0, 1);
}

View File

@ -1,7 +1,8 @@
void main() {
uniform half unknownInput; // 1
half4 main() {
half r, g;
(true ? r : g) = half(sqrt(1));
(false ? r : g) = half(sqrt(0));
sk_FragColor.x = half(r);
sk_FragColor.y = half(g);
(true ? r : g) = 1 - unknownInput;
(false ? r : g) = unknownInput;
return half4(r, g, 0, 1);
}

View File

@ -1,6 +1,8 @@
void main() {
half2 x = half2(1);
uniform half4 colorWhite, colorGreen, colorRed;
half4 main() {
half2 x = colorWhite.rg;
x = +x;
x = -x;
sk_FragColor.rg = x;
return x == half2(-1) ? colorGreen : colorRed;
}

View File

@ -1,8 +1,9 @@
void main() {
half4 main() {
float a = 1, b = 2, c = 3;
float d = c;
float e = d;
b++;
d++;
sk_FragColor = half4(half(b), half(b), half(d), half(d));
return half4(b == 2, b == 3, d == 5, d == 4);
}

View File

@ -1,24 +1,37 @@
float2 v1 = float2(1);
float2 v2 = float2(1, 2);
float2 v3 = float2(float2(1));
float3 v4 = float3(float2(1), 1.0);
int2 v5 = int2(1);
int2 v6 = int2(float2(1, 2));
float2 v7 = float2(int2(1, 2));
float2 v8 = float2(v5);
float4 v9 = float4(v6.x, sqrt(2), int2(3, 4));
int2 v10 = int2(3.14, v1.x);
bool4 v11 = bool4(bool2(true, false), true, false);
float2 v12 = float2(1.0, false);
float2 v13 = float2(false);
float2 v14 = float2(bool2(false));
bool2 v15 = bool2(1.0);
bool2 v16 = bool2(float2(1));
bool3 v17 = bool3(1.0, int2(77));
/*#pragma settings NoInline*/
void main() {
sk_FragColor.r = half(v1.x) + half(v2.x) + half(v3.x) + half(v4.x) + half(v5.x) + half(v6.x) +
half(v7.x) + half(v8.x) + half(v9.x) + half(v10.x) + half(v11.x) +
half(v12.x) + half(v13.x) + half(v14.x) + half(v15.x) + half(v16.x) +
half(v17.x);
uniform half4 colorGreen, colorRed;
bool check(float2 v1, float2 v2, float2 v3, float3 v4, int2 v5, int2 v6, float2 v7, float2 v8,
float4 v9, int2 v10, bool4 v11, float2 v12, float2 v13, float2 v14, bool2 v15,
bool2 v16, bool3 v17) {
return half(v1.x) + half(v2.x) + half(v3.x) + half(v4.x) +
half(v5.x) + half(v6.x) + half(v7.x) + half(v8.x) +
half(v9.x) + half(v10.x) + half(v11.x) + half(v12.x) +
half(v13.x) + half(v14.x) + half(v15.x) + half(v16.x) +
half(v17.x) == 17;
}
half4 main() {
float2 v1 = float2(1);
float2 v2 = float2(1, 2);
float2 v3 = float2(float2(1));
float3 v4 = float3(float2(1), 1.0);
int2 v5 = int2(1);
int2 v6 = int2(float2(1, 2));
float2 v7 = float2(int2(1, 2));
float2 v8 = float2(v5);
float4 v9 = float4(v6.x, sqrt(2), int2(3, 4));
int2 v10 = int2(3.14, v1.x);
bool4 v11 = bool4(bool2(true, false), true, false);
float2 v12 = float2(1.0, false);
float2 v13 = float2(false);
float2 v14 = float2(bool2(false));
bool2 v15 = bool2(1.0);
bool2 v16 = bool2(float2(1));
bool3 v17 = bool3(1.0, int2(77));
return check(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17)
? colorGreen
: colorRed;
}

View File

@ -166,6 +166,11 @@ SKSL_TEST(SkSLSwizzleConstants, "shared/SwizzleConstants.sksl")
SKSL_TEST(SkSLSwizzleLTRB, "shared/SwizzleLTRB.sksl")
SKSL_TEST(SkSLSwizzleOpt, "shared/SwizzleOpt.sksl")
SKSL_TEST(SkSLSwizzleScalar, "shared/SwizzleScalar.sksl")
SKSL_TEST(SkSLTernaryAsLValueEntirelyFoldable, "shared/TernaryAsLValueEntirelyFoldable.sksl")
SKSL_TEST(SkSLTernaryAsLValueFoldableTest, "shared/TernaryAsLValueFoldableTest.sksl")
SKSL_TEST(SkSLUnaryPositiveNegative, "shared/UnaryPositiveNegative.sksl")
SKSL_TEST(SkSLUnusedVariables, "shared/UnusedVariables.sksl")
SKSL_TEST(SkSLVectorConstructors, "shared/VectorConstructors.sksl")
/*
// Incompatible with Runtime Effects because calling a function before its definition is disallowed.

View File

@ -1,10 +1,11 @@
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %main "main" %sk_FragColor %sk_Clockwise
OpExecutionMode %main OriginUpperLeft
OpEntryPoint Fragment %_entrypoint "_entrypoint" %sk_FragColor %sk_Clockwise
OpExecutionMode %_entrypoint OriginUpperLeft
OpName %sk_FragColor "sk_FragColor"
OpName %sk_Clockwise "sk_Clockwise"
OpName %_entrypoint "_entrypoint"
OpName %main "main"
OpDecorate %sk_FragColor RelaxedPrecision
OpDecorate %sk_FragColor Location 0
@ -19,18 +20,18 @@ OpDecorate %sk_Clockwise BuiltIn FrontFacing
%_ptr_Input_bool = OpTypePointer Input %bool
%sk_Clockwise = OpVariable %_ptr_Input_bool Input
%void = OpTypeVoid
%11 = OpTypeFunction %void
%float_1 = OpConstant %float 1
%_ptr_Output_float = OpTypePointer Output %float
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%12 = OpTypeFunction %void
%15 = OpTypeFunction %v4float
%float_0 = OpConstant %float 0
%int_1 = OpConstant %int 1
%main = OpFunction %void None %11
%12 = OpLabel
%14 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %14 %float_1
%19 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_1
OpStore %19 %float_0
%float_1 = OpConstant %float 1
%19 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
%_entrypoint = OpFunction %void None %12
%13 = OpLabel
%14 = OpFunctionCall %v4float %main
OpStore %sk_FragColor %14
OpReturn
OpFunctionEnd
%main = OpFunction %v4float None %15
%16 = OpLabel
OpReturnValue %19
OpFunctionEnd

View File

@ -1,6 +1,5 @@
out vec4 sk_FragColor;
void main() {
sk_FragColor.x = 1.0;
sk_FragColor.y = 0.0;
vec4 main() {
return vec4(0.0, 1.0, 0.0, 1.0);
}

View File

@ -9,7 +9,6 @@ struct Outputs {
fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
Outputs _out;
(void)_out;
_out.sk_FragColor.x = 1.0;
_out.sk_FragColor.y = 0.0;
_out.sk_FragColor = float4(0.0, 1.0, 0.0, 1.0);
return _out;
}

View File

@ -1,10 +1,13 @@
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %main "main" %sk_FragColor %sk_Clockwise
OpExecutionMode %main OriginUpperLeft
OpEntryPoint Fragment %_entrypoint "_entrypoint" %sk_FragColor %sk_Clockwise
OpExecutionMode %_entrypoint OriginUpperLeft
OpName %sk_FragColor "sk_FragColor"
OpName %sk_Clockwise "sk_Clockwise"
OpName %_UniformBuffer "_UniformBuffer"
OpMemberName %_UniformBuffer 0 "unknownInput"
OpName %_entrypoint "_entrypoint"
OpName %main "main"
OpName %r "r"
OpName %g "g"
@ -13,8 +16,16 @@ 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
OpMemberDecorate %_UniformBuffer 0 Offset 0
OpMemberDecorate %_UniformBuffer 0 RelaxedPrecision
OpDecorate %_UniformBuffer Block
OpDecorate %10 Binding 0
OpDecorate %10 DescriptorSet 0
OpDecorate %28 RelaxedPrecision
OpDecorate %29 RelaxedPrecision
OpDecorate %31 RelaxedPrecision
OpDecorate %32 RelaxedPrecision
OpDecorate %33 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -22,28 +33,37 @@ OpDecorate %25 RelaxedPrecision
%bool = OpTypeBool
%_ptr_Input_bool = OpTypePointer Input %bool
%sk_Clockwise = OpVariable %_ptr_Input_bool Input
%_UniformBuffer = OpTypeStruct %float
%_ptr_Uniform__UniformBuffer = OpTypePointer Uniform %_UniformBuffer
%10 = OpVariable %_ptr_Uniform__UniformBuffer Uniform
%void = OpTypeVoid
%11 = OpTypeFunction %void
%15 = OpTypeFunction %void
%18 = OpTypeFunction %v4float
%_ptr_Function_float = OpTypePointer Function %float
%float_1 = OpConstant %float 1
%float_0 = OpConstant %float 0
%_ptr_Output_float = OpTypePointer Output %float
%_ptr_Uniform_float = OpTypePointer Uniform %float
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%int_1 = OpConstant %int 1
%main = OpFunction %void None %11
%12 = OpLabel
%r = OpVariable %_ptr_Function_float Function
%g = OpVariable %_ptr_Function_float Function
%16 = OpExtInst %float %1 Sqrt %float_1
OpStore %r %16
%18 = OpExtInst %float %1 Sqrt %float_0
OpStore %g %18
%20 = OpLoad %float %r
%21 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %21 %20
%25 = OpLoad %float %g
%26 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_1
OpStore %26 %25
%float_0 = OpConstant %float 0
%_entrypoint = OpFunction %void None %15
%16 = OpLabel
%17 = OpFunctionCall %v4float %main
OpStore %sk_FragColor %17
OpReturn
OpFunctionEnd
%main = OpFunction %v4float None %18
%19 = OpLabel
%r = OpVariable %_ptr_Function_float Function
%g = OpVariable %_ptr_Function_float Function
%24 = OpAccessChain %_ptr_Uniform_float %10 %int_0
%28 = OpLoad %float %24
%29 = OpFSub %float %float_1 %28
OpStore %r %29
%30 = OpAccessChain %_ptr_Uniform_float %10 %int_0
%31 = OpLoad %float %30
OpStore %g %31
%32 = OpLoad %float %r
%33 = OpLoad %float %g
%35 = OpCompositeConstruct %v4float %32 %33 %float_0 %float_1
OpReturnValue %35
OpFunctionEnd

View File

@ -1,11 +1,11 @@
out vec4 sk_FragColor;
void main() {
uniform float unknownInput;
vec4 main() {
float r;
float g;
r = sqrt(1.0);
g = sqrt(0.0);
sk_FragColor.x = r;
sk_FragColor.y = g;
r = 1.0 - unknownInput;
g = unknownInput;
return vec4(r, g, 0.0, 1.0);
}

View File

@ -1,20 +1,23 @@
#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
struct Uniforms {
float unknownInput;
};
struct Inputs {
};
struct Outputs {
float4 sk_FragColor [[color(0)]];
};
fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
Outputs _out;
(void)_out;
float r;
float g;
r = sqrt(1.0);
g = sqrt(0.0);
_out.sk_FragColor.x = r;
_out.sk_FragColor.y = g;
r = 1.0 - _uniforms.unknownInput;
g = _uniforms.unknownInput;
_out.sk_FragColor = float4(r, g, 0.0, 1.0);
return _out;
}

View File

@ -1,17 +1,39 @@
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %main "main" %sk_FragColor %sk_Clockwise
OpExecutionMode %main OriginUpperLeft
OpEntryPoint Fragment %_entrypoint "_entrypoint" %sk_FragColor %sk_Clockwise
OpExecutionMode %_entrypoint OriginUpperLeft
OpName %sk_FragColor "sk_FragColor"
OpName %sk_Clockwise "sk_Clockwise"
OpName %_UniformBuffer "_UniformBuffer"
OpMemberName %_UniformBuffer 0 "colorWhite"
OpMemberName %_UniformBuffer 1 "colorGreen"
OpMemberName %_UniformBuffer 2 "colorRed"
OpName %_entrypoint "_entrypoint"
OpName %main "main"
OpName %x "x"
OpDecorate %sk_FragColor RelaxedPrecision
OpDecorate %sk_FragColor Location 0
OpDecorate %sk_FragColor Index 0
OpDecorate %sk_Clockwise RelaxedPrecision
OpDecorate %sk_Clockwise BuiltIn FrontFacing
OpDecorate %17 RelaxedPrecision
OpMemberDecorate %_UniformBuffer 0 Offset 0
OpMemberDecorate %_UniformBuffer 0 RelaxedPrecision
OpMemberDecorate %_UniformBuffer 1 Offset 16
OpMemberDecorate %_UniformBuffer 1 RelaxedPrecision
OpMemberDecorate %_UniformBuffer 2 Offset 32
OpMemberDecorate %_UniformBuffer 2 RelaxedPrecision
OpDecorate %_UniformBuffer Block
OpDecorate %10 Binding 0
OpDecorate %10 DescriptorSet 0
OpDecorate %27 RelaxedPrecision
OpDecorate %29 RelaxedPrecision
OpDecorate %31 RelaxedPrecision
OpDecorate %30 RelaxedPrecision
OpDecorate %32 RelaxedPrecision
OpDecorate %45 RelaxedPrecision
OpDecorate %48 RelaxedPrecision
OpDecorate %49 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -19,15 +41,58 @@ OpDecorate %17 RelaxedPrecision
%bool = OpTypeBool
%_ptr_Input_bool = OpTypePointer Input %bool
%sk_Clockwise = OpVariable %_ptr_Input_bool Input
%_UniformBuffer = OpTypeStruct %v4float %v4float %v4float
%_ptr_Uniform__UniformBuffer = OpTypePointer Uniform %_UniformBuffer
%10 = OpVariable %_ptr_Uniform__UniformBuffer Uniform
%void = OpTypeVoid
%11 = OpTypeFunction %void
%15 = OpTypeFunction %void
%18 = OpTypeFunction %v4float
%v2float = OpTypeVector %float 2
%_ptr_Function_v2float = OpTypePointer Function %v2float
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%float_n1 = OpConstant %float -1
%15 = OpConstantComposite %v2float %float_n1 %float_n1
%main = OpFunction %void None %11
%12 = OpLabel
%16 = OpLoad %v4float %sk_FragColor
%17 = OpVectorShuffle %v4float %16 %15 4 5 2 3
%34 = OpConstantComposite %v2float %float_n1 %float_n1
%v2bool = OpTypeVector %bool 2
%_ptr_Function_v4float = OpTypePointer Function %v4float
%int_1 = OpConstant %int 1
%int_2 = OpConstant %int 2
%_entrypoint = OpFunction %void None %15
%16 = OpLabel
%17 = OpFunctionCall %v4float %main
OpStore %sk_FragColor %17
OpReturn
OpFunctionEnd
%main = OpFunction %v4float None %18
%19 = OpLabel
%x = OpVariable %_ptr_Function_v2float Function
%38 = OpVariable %_ptr_Function_v4float Function
%23 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%27 = OpLoad %v4float %23
%28 = OpVectorShuffle %v2float %27 %27 0 1
OpStore %x %28
%29 = OpLoad %v2float %x
OpStore %x %29
%31 = OpLoad %v2float %x
%30 = OpFNegate %v2float %31
OpStore %x %30
%32 = OpLoad %v2float %x
%35 = OpFOrdEqual %v2bool %32 %34
%37 = OpAll %bool %35
OpSelectionMerge %42 None
OpBranchConditional %37 %40 %41
%40 = OpLabel
%43 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%45 = OpLoad %v4float %43
OpStore %38 %45
OpBranch %42
%41 = OpLabel
%46 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%48 = OpLoad %v4float %46
OpStore %38 %48
OpBranch %42
%42 = OpLabel
%49 = OpLoad %v4float %38
OpReturnValue %49
OpFunctionEnd

View File

@ -1,5 +1,11 @@
out vec4 sk_FragColor;
void main() {
sk_FragColor.xy = vec2(-1.0);
uniform vec4 colorWhite;
uniform vec4 colorGreen;
uniform vec4 colorRed;
vec4 main() {
vec2 x = colorWhite.xy;
x = x;
x = -x;
return x == vec2(-1.0) ? colorGreen : colorRed;
}

View File

@ -1,14 +1,25 @@
#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
struct Uniforms {
float4 colorWhite;
float4 colorGreen;
float4 colorRed;
};
struct Inputs {
};
struct Outputs {
float4 sk_FragColor [[color(0)]];
};
fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
Outputs _out;
(void)_out;
_out.sk_FragColor.xy = float2(-1.0);
float2 x = _uniforms.colorWhite.xy;
x = x;
x = -x;
_out.sk_FragColor = all(x == float2(-1.0)) ? _uniforms.colorGreen : _uniforms.colorRed;
return _out;
}

View File

@ -1,10 +1,11 @@
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %main "main" %sk_FragColor %sk_Clockwise
OpExecutionMode %main OriginUpperLeft
OpEntryPoint Fragment %_entrypoint "_entrypoint" %sk_FragColor %sk_Clockwise
OpExecutionMode %_entrypoint OriginUpperLeft
OpName %sk_FragColor "sk_FragColor"
OpName %sk_Clockwise "sk_Clockwise"
OpName %_entrypoint "_entrypoint"
OpName %main "main"
OpName %b "b"
OpName %d "d"
@ -21,28 +22,45 @@ OpDecorate %sk_Clockwise BuiltIn FrontFacing
%_ptr_Input_bool = OpTypePointer Input %bool
%sk_Clockwise = OpVariable %_ptr_Input_bool Input
%void = OpTypeVoid
%11 = OpTypeFunction %void
%12 = OpTypeFunction %void
%15 = OpTypeFunction %v4float
%_ptr_Function_float = OpTypePointer Function %float
%float_2 = OpConstant %float 2
%float_3 = OpConstant %float 3
%float_1 = OpConstant %float 1
%main = OpFunction %void None %11
%12 = OpLabel
%float_0 = OpConstant %float 0
%float_5 = OpConstant %float 5
%float_4 = OpConstant %float 4
%_entrypoint = OpFunction %void None %12
%13 = OpLabel
%14 = OpFunctionCall %v4float %main
OpStore %sk_FragColor %14
OpReturn
OpFunctionEnd
%main = OpFunction %v4float None %15
%16 = OpLabel
%b = OpVariable %_ptr_Function_float Function
%d = OpVariable %_ptr_Function_float Function
OpStore %b %float_2
OpStore %d %float_3
%18 = OpLoad %float %b
%20 = OpFAdd %float %18 %float_1
OpStore %b %20
%21 = OpLoad %float %d
%22 = OpFAdd %float %21 %float_1
OpStore %d %22
%23 = OpLoad %float %b
%24 = OpLoad %float %b
%22 = OpLoad %float %b
%24 = OpFAdd %float %22 %float_1
OpStore %b %24
%25 = OpLoad %float %d
%26 = OpLoad %float %d
%27 = OpCompositeConstruct %v4float %23 %24 %25 %26
OpStore %sk_FragColor %27
OpReturn
%26 = OpFAdd %float %25 %float_1
OpStore %d %26
%27 = OpLoad %float %b
%28 = OpFOrdEqual %bool %27 %float_2
%29 = OpSelect %float %28 %float_1 %float_0
%31 = OpLoad %float %b
%32 = OpFOrdEqual %bool %31 %float_3
%33 = OpSelect %float %32 %float_1 %float_0
%34 = OpLoad %float %d
%36 = OpFOrdEqual %bool %34 %float_5
%37 = OpSelect %float %36 %float_1 %float_0
%38 = OpLoad %float %d
%40 = OpFOrdEqual %bool %38 %float_4
%41 = OpSelect %float %40 %float_1 %float_0
%42 = OpCompositeConstruct %v4float %29 %33 %37 %41
OpReturnValue %42
OpFunctionEnd

View File

@ -1,10 +1,10 @@
out vec4 sk_FragColor;
void main() {
vec4 main() {
float b = 2.0;
float d = 3.0;
b++;
d++;
sk_FragColor = vec4(b, b, d, d);
return vec4(float(b == 2.0), float(b == 3.0), float(d == 5.0), float(d == 4.0));
}

View File

@ -14,6 +14,6 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front
float d = 3.0;
b++;
d++;
_out.sk_FragColor = float4(b, b, d, d);
_out.sk_FragColor = float4(float(b == 2.0), float(b == 3.0), float(d == 5.0), float(d == 4.0));
return _out;
}

View File

@ -1,57 +1,52 @@
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %main "main" %sk_FragColor %sk_Clockwise
OpExecutionMode %main OriginUpperLeft
OpEntryPoint Fragment %_entrypoint "_entrypoint" %sk_FragColor %sk_Clockwise
OpExecutionMode %_entrypoint OriginUpperLeft
OpName %sk_FragColor "sk_FragColor"
OpName %sk_Clockwise "sk_Clockwise"
OpName %v1 "v1"
OpName %v2 "v2"
OpName %v3 "v3"
OpName %v4 "v4"
OpName %v5 "v5"
OpName %v6 "v6"
OpName %v7 "v7"
OpName %v8 "v8"
OpName %v9 "v9"
OpName %v10 "v10"
OpName %v11 "v11"
OpName %v12 "v12"
OpName %v13 "v13"
OpName %v14 "v14"
OpName %v15 "v15"
OpName %v16 "v16"
OpName %v17 "v17"
OpName %_UniformBuffer "_UniformBuffer"
OpMemberName %_UniformBuffer 0 "colorGreen"
OpMemberName %_UniformBuffer 1 "colorRed"
OpName %_entrypoint "_entrypoint"
OpName %check "check"
OpName %main "main"
OpName %v9 "v9"
OpDecorate %sk_FragColor RelaxedPrecision
OpDecorate %sk_FragColor Location 0
OpDecorate %sk_FragColor Index 0
OpDecorate %sk_Clockwise RelaxedPrecision
OpDecorate %sk_Clockwise BuiltIn FrontFacing
OpDecorate %v11 RelaxedPrecision
OpDecorate %v15 RelaxedPrecision
OpDecorate %v16 RelaxedPrecision
OpDecorate %v17 RelaxedPrecision
OpDecorate %111 RelaxedPrecision
OpDecorate %114 RelaxedPrecision
OpDecorate %117 RelaxedPrecision
OpDecorate %121 RelaxedPrecision
OpDecorate %125 RelaxedPrecision
OpDecorate %128 RelaxedPrecision
OpDecorate %131 RelaxedPrecision
OpDecorate %134 RelaxedPrecision
OpDecorate %138 RelaxedPrecision
OpDecorate %139 RelaxedPrecision
OpDecorate %142 RelaxedPrecision
OpDecorate %145 RelaxedPrecision
OpDecorate %148 RelaxedPrecision
OpDecorate %151 RelaxedPrecision
OpDecorate %152 RelaxedPrecision
OpDecorate %155 RelaxedPrecision
OpDecorate %156 RelaxedPrecision
OpDecorate %159 RelaxedPrecision
OpDecorate %160 RelaxedPrecision
OpDecorate %163 RelaxedPrecision
OpMemberDecorate %_UniformBuffer 0 Offset 0
OpMemberDecorate %_UniformBuffer 0 RelaxedPrecision
OpMemberDecorate %_UniformBuffer 1 Offset 16
OpMemberDecorate %_UniformBuffer 1 RelaxedPrecision
OpDecorate %_UniformBuffer Block
OpDecorate %11 Binding 0
OpDecorate %11 DescriptorSet 0
OpDecorate %56 RelaxedPrecision
OpDecorate %59 RelaxedPrecision
OpDecorate %62 RelaxedPrecision
OpDecorate %66 RelaxedPrecision
OpDecorate %70 RelaxedPrecision
OpDecorate %73 RelaxedPrecision
OpDecorate %76 RelaxedPrecision
OpDecorate %79 RelaxedPrecision
OpDecorate %83 RelaxedPrecision
OpDecorate %84 RelaxedPrecision
OpDecorate %89 RelaxedPrecision
OpDecorate %92 RelaxedPrecision
OpDecorate %95 RelaxedPrecision
OpDecorate %98 RelaxedPrecision
OpDecorate %99 RelaxedPrecision
OpDecorate %102 RelaxedPrecision
OpDecorate %103 RelaxedPrecision
OpDecorate %106 RelaxedPrecision
OpDecorate %107 RelaxedPrecision
OpDecorate %110 RelaxedPrecision
OpDecorate %196 RelaxedPrecision
OpDecorate %198 RelaxedPrecision
OpDecorate %199 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -59,181 +54,225 @@ OpDecorate %163 RelaxedPrecision
%bool = OpTypeBool
%_ptr_Input_bool = OpTypePointer Input %bool
%sk_Clockwise = OpVariable %_ptr_Input_bool Input
%_UniformBuffer = OpTypeStruct %v4float %v4float
%_ptr_Uniform__UniformBuffer = OpTypePointer Uniform %_UniformBuffer
%11 = OpVariable %_ptr_Uniform__UniformBuffer Uniform
%void = OpTypeVoid
%16 = OpTypeFunction %void
%v2float = OpTypeVector %float 2
%_ptr_Private_v2float = OpTypePointer Private %v2float
%v1 = OpVariable %_ptr_Private_v2float Private
%float_1 = OpConstant %float 1
%14 = OpConstantComposite %v2float %float_1 %float_1
%v2 = OpVariable %_ptr_Private_v2float Private
%float_2 = OpConstant %float 2
%17 = OpConstantComposite %v2float %float_1 %float_2
%v3 = OpVariable %_ptr_Private_v2float Private
%v3float = OpTypeVector %float 3
%_ptr_Private_v3float = OpTypePointer Private %v3float
%v4 = OpVariable %_ptr_Private_v3float Private
%22 = OpConstantComposite %v3float %float_1 %float_1 %float_1
%int = OpTypeInt 32 1
%v2int = OpTypeVector %int 2
%_ptr_Private_v2int = OpTypePointer Private %v2int
%v5 = OpVariable %_ptr_Private_v2int Private
%int_1 = OpConstant %int 1
%28 = OpConstantComposite %v2int %int_1 %int_1
%v6 = OpVariable %_ptr_Private_v2int Private
%v7 = OpVariable %_ptr_Private_v2float Private
%int_2 = OpConstant %int 2
%37 = OpConstantComposite %v2int %int_1 %int_2
%v8 = OpVariable %_ptr_Private_v2float Private
%_ptr_Private_v4float = OpTypePointer Private %v4float
%v9 = OpVariable %_ptr_Private_v4float Private
%v4bool = OpTypeVector %bool 4
%v2bool = OpTypeVector %bool 2
%v3bool = OpTypeVector %bool 3
%_ptr_Function_v2float = OpTypePointer Function %v2float
%_ptr_Function_v3float = OpTypePointer Function %v3float
%_ptr_Function_v2int = OpTypePointer Function %v2int
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_ptr_Function_v4bool = OpTypePointer Function %v4bool
%_ptr_Function_v2bool = OpTypePointer Function %v2bool
%_ptr_Function_v3bool = OpTypePointer Function %v3bool
%26 = OpTypeFunction %bool %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v3float %_ptr_Function_v2int %_ptr_Function_v2int %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v4float %_ptr_Function_v2int %_ptr_Function_v4bool %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v2bool %_ptr_Function_v2bool %_ptr_Function_v3bool
%float_1 = OpConstant %float 1
%float_0 = OpConstant %float 0
%float_17 = OpConstant %float 17
%113 = OpTypeFunction %v4float
%float_2 = OpConstant %float 2
%int_3 = OpConstant %int 3
%int_4 = OpConstant %int 4
%58 = OpConstantComposite %v2int %int_3 %int_4
%v10 = OpVariable %_ptr_Private_v2int Private
%v4bool = OpTypeVector %bool 4
%_ptr_Private_v4bool = OpTypePointer Private %v4bool
%v11 = OpVariable %_ptr_Private_v4bool Private
%120 = OpConstantComposite %v2int %int_3 %int_4
%129 = OpConstantComposite %v2float %float_1 %float_1
%131 = OpConstantComposite %v2float %float_1 %float_2
%134 = OpConstantComposite %v3float %float_1 %float_1 %float_1
%int_1 = OpConstant %int 1
%137 = OpConstantComposite %v2int %int_1 %int_1
%int_2 = OpConstant %int 2
%146 = OpConstantComposite %v2int %int_1 %int_2
%161 = OpConstantComposite %v2int %int_3 %int_1
%true = OpConstantTrue %bool
%false = OpConstantFalse %bool
%77 = OpConstantComposite %v4bool %true %false %true %false
%v12 = OpVariable %_ptr_Private_v2float Private
%float_0 = OpConstant %float 0
%80 = OpConstantComposite %v2float %float_1 %float_0
%v13 = OpVariable %_ptr_Private_v2float Private
%82 = OpConstantComposite %v2float %float_0 %float_0
%v14 = OpVariable %_ptr_Private_v2float Private
%v2bool = OpTypeVector %bool 2
%85 = OpConstantComposite %v2bool %false %false
%_ptr_Private_v2bool = OpTypePointer Private %v2bool
%v15 = OpVariable %_ptr_Private_v2bool Private
%93 = OpConstantComposite %v2bool %true %true
%v16 = OpVariable %_ptr_Private_v2bool Private
%v3bool = OpTypeVector %bool 3
%_ptr_Private_v3bool = OpTypePointer Private %v3bool
%v17 = OpVariable %_ptr_Private_v3bool Private
%103 = OpConstantComposite %v3bool %true %true %true
%void = OpTypeVoid
%105 = OpTypeFunction %void
%_ptr_Output_float = OpTypePointer Output %float
%165 = OpConstantComposite %v4bool %true %false %true %false
%167 = OpConstantComposite %v2float %float_1 %float_0
%169 = OpConstantComposite %v2float %float_0 %float_0
%171 = OpConstantComposite %v2bool %false %false
%178 = OpConstantComposite %v2bool %true %true
%186 = OpConstantComposite %v3bool %true %true %true
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%int_0 = OpConstant %int 0
%main = OpFunction %void None %105
%106 = OpLabel
OpStore %v1 %14
OpStore %v2 %17
OpStore %v3 %14
OpStore %v4 %22
OpStore %v5 %28
%30 = OpCompositeExtract %float %17 0
%31 = OpConvertFToS %int %30
%32 = OpCompositeExtract %float %17 1
%33 = OpConvertFToS %int %32
%34 = OpCompositeConstruct %v2int %31 %33
OpStore %v6 %34
%38 = OpCompositeExtract %int %37 0
%39 = OpConvertSToF %float %38
%40 = OpCompositeExtract %int %37 1
%41 = OpConvertSToF %float %40
%42 = OpCompositeConstruct %v2float %39 %41
OpStore %v7 %42
%44 = OpLoad %v2int %v5
%45 = OpCompositeExtract %int %44 0
%46 = OpConvertSToF %float %45
%47 = OpCompositeExtract %int %44 1
%48 = OpConvertSToF %float %47
%49 = OpCompositeConstruct %v2float %46 %48
OpStore %v8 %49
%52 = OpLoad %v2int %v6
%53 = OpCompositeExtract %int %52 0
%54 = OpConvertSToF %float %53
%55 = OpExtInst %float %1 Sqrt %float_2
%59 = OpCompositeExtract %int %58 0
%60 = OpConvertSToF %float %59
%61 = OpCompositeExtract %int %58 1
%62 = OpConvertSToF %float %61
%63 = OpCompositeConstruct %v2float %60 %62
%64 = OpCompositeExtract %float %63 0
%65 = OpCompositeExtract %float %63 1
%66 = OpCompositeConstruct %v4float %54 %55 %64 %65
OpStore %v9 %66
%68 = OpLoad %v2float %v1
%69 = OpCompositeExtract %float %68 0
%70 = OpConvertFToS %int %69
%71 = OpCompositeConstruct %v2int %int_3 %70
OpStore %v10 %71
OpStore %v11 %77
OpStore %v12 %80
OpStore %v13 %82
%86 = OpCompositeExtract %bool %85 0
%87 = OpSelect %float %86 %float_1 %float_0
%88 = OpCompositeExtract %bool %85 1
%89 = OpSelect %float %88 %float_1 %float_0
%90 = OpCompositeConstruct %v2float %87 %89
OpStore %v14 %90
OpStore %v15 %93
%95 = OpCompositeExtract %float %14 0
%96 = OpFUnordNotEqual %bool %95 %float_0
%97 = OpCompositeExtract %float %14 1
%98 = OpFUnordNotEqual %bool %97 %float_0
%99 = OpCompositeConstruct %v2bool %96 %98
OpStore %v16 %99
OpStore %v17 %103
%107 = OpLoad %v2float %v1
%108 = OpCompositeExtract %float %107 0
%109 = OpLoad %v2float %v2
%110 = OpCompositeExtract %float %109 0
%111 = OpFAdd %float %108 %110
%112 = OpLoad %v2float %v3
%113 = OpCompositeExtract %float %112 0
%114 = OpFAdd %float %111 %113
%115 = OpLoad %v3float %v4
%116 = OpCompositeExtract %float %115 0
%117 = OpFAdd %float %114 %116
%118 = OpLoad %v2int %v5
%119 = OpCompositeExtract %int %118 0
%120 = OpConvertSToF %float %119
%121 = OpFAdd %float %117 %120
%122 = OpLoad %v2int %v6
%123 = OpCompositeExtract %int %122 0
%124 = OpConvertSToF %float %123
%125 = OpFAdd %float %121 %124
%126 = OpLoad %v2float %v7
%127 = OpCompositeExtract %float %126 0
%128 = OpFAdd %float %125 %127
%129 = OpLoad %v2float %v8
%130 = OpCompositeExtract %float %129 0
%131 = OpFAdd %float %128 %130
%132 = OpLoad %v4float %v9
%133 = OpCompositeExtract %float %132 0
%134 = OpFAdd %float %131 %133
%135 = OpLoad %v2int %v10
%136 = OpCompositeExtract %int %135 0
%137 = OpConvertSToF %float %136
%138 = OpFAdd %float %134 %137
%139 = OpLoad %v4bool %v11
%140 = OpCompositeExtract %bool %139 0
%141 = OpSelect %float %140 %float_1 %float_0
%142 = OpFAdd %float %138 %141
%143 = OpLoad %v2float %v12
%144 = OpCompositeExtract %float %143 0
%145 = OpFAdd %float %142 %144
%146 = OpLoad %v2float %v13
%147 = OpCompositeExtract %float %146 0
%148 = OpFAdd %float %145 %147
%149 = OpLoad %v2float %v14
%150 = OpCompositeExtract %float %149 0
%151 = OpFAdd %float %148 %150
%152 = OpLoad %v2bool %v15
%153 = OpCompositeExtract %bool %152 0
%154 = OpSelect %float %153 %float_1 %float_0
%155 = OpFAdd %float %151 %154
%156 = OpLoad %v2bool %v16
%157 = OpCompositeExtract %bool %156 0
%158 = OpSelect %float %157 %float_1 %float_0
%159 = OpFAdd %float %155 %158
%160 = OpLoad %v3bool %v17
%161 = OpCompositeExtract %bool %160 0
%162 = OpSelect %float %161 %float_1 %float_0
%163 = OpFAdd %float %159 %162
%164 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
OpStore %164 %163
%_entrypoint = OpFunction %void None %16
%17 = OpLabel
%18 = OpFunctionCall %v4float %main
OpStore %sk_FragColor %18
OpReturn
OpFunctionEnd
%check = OpFunction %bool None %26
%34 = OpFunctionParameter %_ptr_Function_v2float
%35 = OpFunctionParameter %_ptr_Function_v2float
%36 = OpFunctionParameter %_ptr_Function_v2float
%37 = OpFunctionParameter %_ptr_Function_v3float
%38 = OpFunctionParameter %_ptr_Function_v2int
%39 = OpFunctionParameter %_ptr_Function_v2int
%40 = OpFunctionParameter %_ptr_Function_v2float
%41 = OpFunctionParameter %_ptr_Function_v2float
%42 = OpFunctionParameter %_ptr_Function_v4float
%43 = OpFunctionParameter %_ptr_Function_v2int
%44 = OpFunctionParameter %_ptr_Function_v4bool
%45 = OpFunctionParameter %_ptr_Function_v2float
%46 = OpFunctionParameter %_ptr_Function_v2float
%47 = OpFunctionParameter %_ptr_Function_v2float
%48 = OpFunctionParameter %_ptr_Function_v2bool
%49 = OpFunctionParameter %_ptr_Function_v2bool
%50 = OpFunctionParameter %_ptr_Function_v3bool
%51 = OpLabel
%52 = OpLoad %v2float %34
%53 = OpCompositeExtract %float %52 0
%54 = OpLoad %v2float %35
%55 = OpCompositeExtract %float %54 0
%56 = OpFAdd %float %53 %55
%57 = OpLoad %v2float %36
%58 = OpCompositeExtract %float %57 0
%59 = OpFAdd %float %56 %58
%60 = OpLoad %v3float %37
%61 = OpCompositeExtract %float %60 0
%62 = OpFAdd %float %59 %61
%63 = OpLoad %v2int %38
%64 = OpCompositeExtract %int %63 0
%65 = OpConvertSToF %float %64
%66 = OpFAdd %float %62 %65
%67 = OpLoad %v2int %39
%68 = OpCompositeExtract %int %67 0
%69 = OpConvertSToF %float %68
%70 = OpFAdd %float %66 %69
%71 = OpLoad %v2float %40
%72 = OpCompositeExtract %float %71 0
%73 = OpFAdd %float %70 %72
%74 = OpLoad %v2float %41
%75 = OpCompositeExtract %float %74 0
%76 = OpFAdd %float %73 %75
%77 = OpLoad %v4float %42
%78 = OpCompositeExtract %float %77 0
%79 = OpFAdd %float %76 %78
%80 = OpLoad %v2int %43
%81 = OpCompositeExtract %int %80 0
%82 = OpConvertSToF %float %81
%83 = OpFAdd %float %79 %82
%84 = OpLoad %v4bool %44
%85 = OpCompositeExtract %bool %84 0
%86 = OpSelect %float %85 %float_1 %float_0
%89 = OpFAdd %float %83 %86
%90 = OpLoad %v2float %45
%91 = OpCompositeExtract %float %90 0
%92 = OpFAdd %float %89 %91
%93 = OpLoad %v2float %46
%94 = OpCompositeExtract %float %93 0
%95 = OpFAdd %float %92 %94
%96 = OpLoad %v2float %47
%97 = OpCompositeExtract %float %96 0
%98 = OpFAdd %float %95 %97
%99 = OpLoad %v2bool %48
%100 = OpCompositeExtract %bool %99 0
%101 = OpSelect %float %100 %float_1 %float_0
%102 = OpFAdd %float %98 %101
%103 = OpLoad %v2bool %49
%104 = OpCompositeExtract %bool %103 0
%105 = OpSelect %float %104 %float_1 %float_0
%106 = OpFAdd %float %102 %105
%107 = OpLoad %v3bool %50
%108 = OpCompositeExtract %bool %107 0
%109 = OpSelect %float %108 %float_1 %float_0
%110 = OpFAdd %float %106 %109
%112 = OpFOrdEqual %bool %110 %float_17
OpReturnValue %112
OpFunctionEnd
%main = OpFunction %v4float None %113
%114 = OpLabel
%v9 = OpVariable %_ptr_Function_v4float Function
%130 = OpVariable %_ptr_Function_v2float Function
%132 = OpVariable %_ptr_Function_v2float Function
%133 = OpVariable %_ptr_Function_v2float Function
%135 = OpVariable %_ptr_Function_v3float Function
%138 = OpVariable %_ptr_Function_v2int Function
%144 = OpVariable %_ptr_Function_v2int Function
%152 = OpVariable %_ptr_Function_v2float Function
%158 = OpVariable %_ptr_Function_v2float Function
%160 = OpVariable %_ptr_Function_v4float Function
%162 = OpVariable %_ptr_Function_v2int Function
%166 = OpVariable %_ptr_Function_v4bool Function
%168 = OpVariable %_ptr_Function_v2float Function
%170 = OpVariable %_ptr_Function_v2float Function
%177 = OpVariable %_ptr_Function_v2float Function
%179 = OpVariable %_ptr_Function_v2bool Function
%185 = OpVariable %_ptr_Function_v2bool Function
%187 = OpVariable %_ptr_Function_v3bool Function
%189 = OpVariable %_ptr_Function_v4float Function
%116 = OpExtInst %float %1 Sqrt %float_2
%121 = OpCompositeExtract %int %120 0
%122 = OpConvertSToF %float %121
%123 = OpCompositeExtract %int %120 1
%124 = OpConvertSToF %float %123
%125 = OpCompositeConstruct %v2float %122 %124
%126 = OpCompositeExtract %float %125 0
%127 = OpCompositeExtract %float %125 1
%128 = OpCompositeConstruct %v4float %float_1 %116 %126 %127
OpStore %v9 %128
OpStore %130 %129
OpStore %132 %131
OpStore %133 %129
OpStore %135 %134
OpStore %138 %137
%139 = OpCompositeExtract %float %131 0
%140 = OpConvertFToS %int %139
%141 = OpCompositeExtract %float %131 1
%142 = OpConvertFToS %int %141
%143 = OpCompositeConstruct %v2int %140 %142
OpStore %144 %143
%147 = OpCompositeExtract %int %146 0
%148 = OpConvertSToF %float %147
%149 = OpCompositeExtract %int %146 1
%150 = OpConvertSToF %float %149
%151 = OpCompositeConstruct %v2float %148 %150
OpStore %152 %151
%153 = OpCompositeExtract %int %137 0
%154 = OpConvertSToF %float %153
%155 = OpCompositeExtract %int %137 1
%156 = OpConvertSToF %float %155
%157 = OpCompositeConstruct %v2float %154 %156
OpStore %158 %157
%159 = OpLoad %v4float %v9
OpStore %160 %159
OpStore %162 %161
OpStore %166 %165
OpStore %168 %167
OpStore %170 %169
%172 = OpCompositeExtract %bool %171 0
%173 = OpSelect %float %172 %float_1 %float_0
%174 = OpCompositeExtract %bool %171 1
%175 = OpSelect %float %174 %float_1 %float_0
%176 = OpCompositeConstruct %v2float %173 %175
OpStore %177 %176
OpStore %179 %178
%180 = OpCompositeExtract %float %129 0
%181 = OpFUnordNotEqual %bool %180 %float_0
%182 = OpCompositeExtract %float %129 1
%183 = OpFUnordNotEqual %bool %182 %float_0
%184 = OpCompositeConstruct %v2bool %181 %183
OpStore %185 %184
OpStore %187 %186
%188 = OpFunctionCall %bool %check %130 %132 %133 %135 %138 %144 %152 %158 %160 %162 %166 %168 %170 %177 %179 %185 %187
OpSelectionMerge %192 None
OpBranchConditional %188 %190 %191
%190 = OpLabel
%193 = OpAccessChain %_ptr_Uniform_v4float %11 %int_0
%196 = OpLoad %v4float %193
OpStore %189 %196
OpBranch %192
%191 = OpLabel
%197 = OpAccessChain %_ptr_Uniform_v4float %11 %int_1
%198 = OpLoad %v4float %197
OpStore %189 %198
OpBranch %192
%192 = OpLabel
%199 = OpLoad %v4float %189
OpReturnValue %199
OpFunctionEnd

View File

@ -1,22 +1,11 @@
out vec4 sk_FragColor;
vec2 v1 = vec2(1.0);
vec2 v2 = vec2(1.0, 2.0);
vec2 v3 = vec2(1.0);
vec3 v4 = vec3(vec2(1.0), 1.0);
ivec2 v5 = ivec2(1);
ivec2 v6 = ivec2(vec2(1.0, 2.0));
vec2 v7 = vec2(ivec2(1, 2));
vec2 v8 = vec2(v5);
vec4 v9 = vec4(float(v6.x), sqrt(2.0), vec2(ivec2(3, 4)));
ivec2 v10 = ivec2(3, int(v1.x));
bvec4 v11 = bvec4(bvec2(true, false), true, false);
vec2 v12 = vec2(1.0, 0.0);
vec2 v13 = vec2(0.0);
vec2 v14 = vec2(bvec2(false));
bvec2 v15 = bvec2(true);
bvec2 v16 = bvec2(vec2(1.0));
bvec3 v17 = bvec3(true, bvec2(ivec2(77)));
void main() {
sk_FragColor.x = (((((((((((((((v1.x + v2.x) + v3.x) + v4.x) + float(v5.x)) + float(v6.x)) + v7.x) + v8.x) + v9.x) + float(v10.x)) + float(v11.x)) + v12.x) + v13.x) + v14.x) + float(v15.x)) + float(v16.x)) + float(v17.x);
uniform vec4 colorGreen;
uniform vec4 colorRed;
bool check(vec2 v1, vec2 v2, vec2 v3, vec3 v4, ivec2 v5, ivec2 v6, vec2 v7, vec2 v8, vec4 v9, ivec2 v10, bvec4 v11, vec2 v12, vec2 v13, vec2 v14, bvec2 v15, bvec2 v16, bvec3 v17) {
return (((((((((((((((v1.x + v2.x) + v3.x) + v4.x) + float(v5.x)) + float(v6.x)) + v7.x) + v8.x) + v9.x) + float(v10.x)) + float(v11.x)) + v12.x) + v13.x) + v14.x) + float(v15.x)) + float(v16.x)) + float(v17.x) == 17.0;
}
vec4 main() {
vec4 v9 = vec4(1.0, sqrt(2.0), vec2(ivec2(3, 4)));
return check(vec2(1.0), vec2(1.0, 2.0), vec2(1.0), vec3(vec2(1.0), 1.0), ivec2(1), ivec2(vec2(1.0, 2.0)), vec2(ivec2(1, 2)), vec2(ivec2(1)), v9, ivec2(3, 1), bvec4(true, false, true, false), vec2(1.0, 0.0), vec2(0.0), vec2(bvec2(false)), bvec2(true), bvec2(vec2(1.0)), bvec3(true, bvec2(ivec2(77)))) ? colorGreen : colorRed;
}

View File

@ -1,52 +1,24 @@
#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
struct Uniforms {
float4 colorGreen;
float4 colorRed;
};
struct Inputs {
};
struct Outputs {
float4 sk_FragColor [[color(0)]];
};
struct Globals {
float2 v1;
float2 v2;
float2 v3;
float3 v4;
int2 v5;
int2 v6;
float2 v7;
float2 v8;
float4 v9;
int2 v10;
bool4 v11;
float2 v12;
float2 v13;
float2 v14;
bool2 v15;
bool2 v16;
bool3 v17;
};
fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
Globals _globals{float2(1.0), float2(1.0, 2.0), float2(1.0), float3(float2(1.0), 1.0), int2(1), int2(float2(1.0, 2.0)), float2(int2(1, 2)), float2(_globals.v5), float4(float(_globals.v6.x), sqrt(2.0), float2(int2(3, 4))), int2(3, int(_globals.v1.x)), bool4(bool2(true, false), true, false), float2(1.0, 0.0), float2(0.0), float2(bool2(false)), bool2(true), bool2(float2(1.0)), bool3(true, bool2(int2(77)))};
(void)_globals;
bool check(float2 v1, float2 v2, float2 v3, float3 v4, int2 v5, int2 v6, float2 v7, float2 v8, float4 v9, int2 v10, bool4 v11, float2 v12, float2 v13, float2 v14, bool2 v15, bool2 v16, bool3 v17) {
return (((((((((((((((v1.x + v2.x) + v3.x) + v4.x) + float(v5.x)) + float(v6.x)) + v7.x) + v8.x) + v9.x) + float(v10.x)) + float(v11.x)) + v12.x) + v13.x) + v14.x) + float(v15.x)) + float(v16.x)) + float(v17.x) == 17.0;
}
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
Outputs _out;
(void)_out;
_out.sk_FragColor.x = (((((((((((((((_globals.v1.x + _globals.v2.x) + _globals.v3.x) + _globals.v4.x) + float(_globals.v5.x)) + float(_globals.v6.x)) + _globals.v7.x) + _globals.v8.x) + _globals.v9.x) + float(_globals.v10.x)) + float(_globals.v11.x)) + _globals.v12.x) + _globals.v13.x) + _globals.v14.x) + float(_globals.v15.x)) + float(_globals.v16.x)) + float(_globals.v17.x);
float4 v9 = float4(1.0, sqrt(2.0), float2(int2(3, 4)));
_out.sk_FragColor = check(float2(1.0), float2(1.0, 2.0), float2(1.0), float3(float2(1.0), 1.0), int2(1), int2(float2(1.0, 2.0)), float2(int2(1, 2)), float2(int2(1)), v9, int2(3, 1), bool4(true, false, true, false), float2(1.0, 0.0), float2(0.0), float2(bool2(false)), bool2(true), bool2(float2(1.0)), bool3(true, bool2(int2(77)))) ? _uniforms.colorGreen : _uniforms.colorRed;
return _out;
}