Migrate some SkSL swizzle tests to dm.

Change-Id: I2bd6bf9c368359a2b21861c1b6f621040d335111
Bug: skia:11009
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/367056
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
This commit is contained in:
John Stiles 2021-02-05 16:24:03 -05:00
parent 75b7606c0f
commit c2c1b0c460
26 changed files with 1145 additions and 742 deletions

View File

@ -394,6 +394,7 @@ sksl_shared_tests = [
"/sksl/shared/SwitchContainingDeadCode.sksl",
"/sksl/shared/SwitchWithFallthrough.sksl",
"/sksl/shared/SwizzleBoolConstants.sksl",
"/sksl/shared/SwizzleByConstantIndex.sksl",
"/sksl/shared/SwizzleByIndex.sksl",
"/sksl/shared/SwizzleConstants.sksl",
"/sksl/shared/SwizzleLTRB.sksl",

View File

@ -0,0 +1,27 @@
uniform half4 testInputs, colorGreen, colorRed;
half4 constant_swizzle() {
half4 v = testInputs;
half x = v[0];
half y = v[1];
half z = v[2];
half w = v[3];
return half4(x, y, z, w); // -1.25, 0, 0.75, 2.25
}
half4 foldable() {
half4 v = half4(0, 1, 2, 3);
half x = v[0];
half y = v[1];
half z = v[2];
half w = v[3];
return half4(x, y, z, w); // 0, 1, 2, 3
}
half4 main() {
half4 a = constant_swizzle();
half4 b = foldable();
return a == half4(-1.25, 0, 0.75, 2.25) &&
b == half4(0, 1, 2, 3) ? colorGreen : colorRed;
}

View File

@ -1,33 +1,15 @@
void non_constant_swizzle() {
int4 i = int4(int(sqrt(1)));
half4 v = half4(half(sqrt(1)));
uniform half4 testInputs, colorBlack, colorGreen, colorRed;
half4 non_constant_swizzle() {
half4 v = half4(testInputs);
int4 i = int4(colorBlack);
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);
return half4(x, y, z, w); // -1.25, -1.25, -1.25, 0
}
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);
}
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();
half4 main() {
return non_constant_swizzle() == half4(-1.25, -1.25, -1.25, 0) ? colorGreen : colorRed;
}

View File

@ -1,29 +1,32 @@
void main() {
half4 v = half4(half(sqrt(1)));
sk_FragColor = half4(v.x, 1, 1, 1);
sk_FragColor = half4(v.xy, 1, 1);
sk_FragColor = half4(v.x1, 1, 1);
sk_FragColor = half4(v.0y, 1, 1);
sk_FragColor = half4(v.xyz, 1);
sk_FragColor = half4(v.xy1, 1);
sk_FragColor = half4(v.x0z, 1);
sk_FragColor = half4(v.x10, 1);
sk_FragColor = half4(v.1yz, 1);
sk_FragColor = half4(v.0y1, 1);
sk_FragColor = half4(v.11z, 1);
sk_FragColor = v.xyzw;
sk_FragColor = v.xyz1;
sk_FragColor = v.xy0w;
sk_FragColor = v.xy10;
sk_FragColor = v.x1zw;
sk_FragColor = v.x0z1;
sk_FragColor = v.x11w;
sk_FragColor = v.x101;
sk_FragColor = v.1yzw;
sk_FragColor = v.0yz1;
sk_FragColor = v.0y1w;
sk_FragColor = v.1y11;
sk_FragColor = v.00zw;
sk_FragColor = v.00z1;
sk_FragColor = v.011w;
uniform half4 testInputs, colorGreen, colorRed;
half4 main() {
half4 v = testInputs;
v = half4(v.x, 1, 1, 1);
v = half4(v.xy, 1, 1);
v = half4(v.x1, 1, 1);
v = half4(v.0y, 1, 1);
v = half4(v.xyz, 1);
v = half4(v.xy1, 1);
v = half4(v.x0z, 1);
v = half4(v.x10, 1);
v = half4(v.1yz, 1);
v = half4(v.0y1, 1);
v = half4(v.11z, 1);
v = v.xyzw;
v = v.xyz1;
v = v.xy0w;
v = v.xy10;
v = v.x1zw;
v = v.x0z1;
v = v.x11w;
v = v.x101;
v = v.1yzw;
v = v.0yz1;
v = v.0y1w;
v = v.1y11;
v = v.00zw;
v = v.00z1;
v = v.011w;
return v == half4(0, 1, 1, 1) ? colorGreen : colorRed;
}

View File

@ -1,3 +1,5 @@
void main() {
sk_FragColor = sk_FragColor.BRTL;
uniform half4 colorRed;
half4 main() {
return colorRed.RBTL;
}

View File

@ -1,46 +1,48 @@
half fn(half v) {
uniform half4 colorRed, colorGreen, testInputs;
half fn(half4 v) {
// Add an un-inlinable construct to ensure that fn() remains a standalone function.
switch (int(v)) {
case 1: return 2;
default: return 3;
for (int x=1; x<=2; ++x) {
return v.x;
}
}
layout(set=0) uniform half3 colRGB;
half4 main() {
half4 v = testInputs;
void main() {
half v = half(sqrt(1));
sk_FragColor = half4(v).rgba;
sk_FragColor = half4(v).rgb0.abgr;
sk_FragColor = half4(v).rgba.00ra;
sk_FragColor = half4(v).rgba.rrra.00ra.11ab;
sk_FragColor = half4(v).abga.gb11;
sk_FragColor = half4(v).abgr.abgr;
sk_FragColor = half4(half4(v).rrrr.bb, 1, 1);
sk_FragColor = half4(half4(v).ba.grgr);
v = v.rgba;
v = v.rgb0.abgr;
v = v.rgba.00ra;
v = v.rgba.rrra.00ra.11ab;
v = v.abga.gb11;
v = v.abgr.abgr;
v = half4(v.rrrr.bb, 1, 1);
v = half4(v.ba.grgr);
// The swizzle will not be optimized away to avoid eliminating fn().
sk_FragColor = half3(fn(v), 123, 456).yyzz;
sk_FragColor = half3(fn(v), half2(123, 456)).yyzz;
v = half3(fn(v), 123, 456).yyzz;
v = half3(fn(v), half2(123, 456)).yyzz;
// The swizzle will be optimized away because fn() can be reordered.
sk_FragColor = half3(fn(v), 123, 456).yzzx;
sk_FragColor = half3(fn(v), half2(123, 456)).yzzx;
v = half3(fn(v), 123, 456).yzzx;
v = half3(fn(v), half2(123, 456)).yzzx;
// The swizzle will not be optimized away to avoid duplicating fn().
sk_FragColor = half3(fn(v), 123, 456).yxxz;
sk_FragColor = half3(fn(v), half2(123, 456)).yxxz;
v = half3(fn(v), 123, 456).yxxz;
v = half3(fn(v), half2(123, 456)).yxxz;
// Swizzled constants.
sk_FragColor = half4(1, 2, 3, 4).xxyz;
v = half4(1, 2, 3, 4).xxyz;
// Swizzled uniforms mixed with constants.
sk_FragColor = half4(1, colRGB).yzwx;
sk_FragColor = half4(1, colRGB).yxzw;
v = half4(1, colorRed.rgb).yzwx;
v = half4(1, colorRed.rgb).yxzw;
sk_FragColor.rgba = sk_FragColor;
sk_FragColor.abgr = sk_FragColor;
sk_FragColor.rgba.ra = sk_FragColor.gb;
sk_FragColor.abgr.gba = sk_FragColor.aa1;
// Left-side swizzles.
v.rgba = v;
v.abgr = v;
v.rgba.ra = v.gb;
v.abgr.gba = v.aa1;
return v == half4(1) ? colorGreen : colorRed;
}

View File

@ -1,7 +1,12 @@
void main() {
half x = half(sqrt(4));
sk_FragColor = x.xx01;
sk_FragColor = half(sqrt(4)).xx01;
sk_FragColor = half(sqrt(4)).0x01;
sk_FragColor = half(sqrt(4)).0x0x;
uniform half unknownInput; // 1
half4 main() {
half x = unknownInput;
half4 v = x.xx01;
v = unknownInput.xx01;
v = unknownInput.0x10;
v = unknownInput.0x0x;
return v;
}

View File

@ -161,6 +161,11 @@ SKSL_TEST(SkSLScalarConversionConstructorsES2, "shared/ScalarConversionConstruct
SKSL_TEST(SkSLStackingVectorCasts, "shared/StackingVectorCasts.sksl")
SKSL_TEST(SkSLStaticIf, "shared/StaticIf.sksl")
SKSL_TEST(SkSLSwizzleBoolConstants, "shared/SwizzleBoolConstants.sksl")
SKSL_TEST(SkSLSwizzleByConstantIndex, "shared/SwizzleByConstantIndex.sksl")
SKSL_TEST(SkSLSwizzleConstants, "shared/SwizzleConstants.sksl")
SKSL_TEST(SkSLSwizzleLTRB, "shared/SwizzleLTRB.sksl")
SKSL_TEST(SkSLSwizzleOpt, "shared/SwizzleOpt.sksl")
SKSL_TEST(SkSLSwizzleScalar, "shared/SwizzleScalar.sksl")
/*
// Incompatible with Runtime Effects because calling a function before its definition is disallowed.
@ -195,5 +200,6 @@ SKSL_TEST(SkSLMatricesNonsquare, "shared/MatricesNonsquare.sksl")
SKSL_TEST(SkSLOperatorsES3, "shared/OperatorsES3.sksl")
SKSL_TEST(SkSLResizeMatrixNonsquare, "shared/ResizeMatrixNonsquare.sksl")
SKSL_TEST(SkSLScalarConversionConstructorsES3, "shared/ScalarConversionConstructorsES3.sksl")
SKSL_TEST(SkSLSwizzleByIndex, "shared/SwizzleByIndex.sksl")
SKSL_TEST(SkSLWhileLoopControlFlow, "shared/WhileLoopControlFlow.sksl")
*/

View File

@ -0,0 +1,127 @@
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
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 "testInputs"
OpMemberName %_UniformBuffer 1 "colorGreen"
OpMemberName %_UniformBuffer 2 "colorRed"
OpName %_entrypoint "_entrypoint"
OpName %main "main"
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 %a "a"
OpDecorate %sk_FragColor RelaxedPrecision
OpDecorate %sk_FragColor Location 0
OpDecorate %sk_FragColor Index 0
OpDecorate %sk_Clockwise RelaxedPrecision
OpDecorate %sk_Clockwise BuiltIn FrontFacing
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 %26 RelaxedPrecision
OpDecorate %29 RelaxedPrecision
OpDecorate %32 RelaxedPrecision
OpDecorate %35 RelaxedPrecision
OpDecorate %38 RelaxedPrecision
OpDecorate %41 RelaxedPrecision
OpDecorate %42 RelaxedPrecision
OpDecorate %43 RelaxedPrecision
OpDecorate %44 RelaxedPrecision
OpDecorate %46 RelaxedPrecision
OpDecorate %61 RelaxedPrecision
OpDecorate %64 RelaxedPrecision
OpDecorate %65 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%sk_FragColor = OpVariable %_ptr_Output_v4float Output
%bool = OpTypeBool
%_ptr_Input_bool = OpTypePointer Input %bool
%sk_Clockwise = OpVariable %_ptr_Input_bool Input
%_UniformBuffer = OpTypeStruct %v4float %v4float %v4float
%_ptr_Uniform__UniformBuffer = OpTypePointer Uniform %_UniformBuffer
%10 = OpVariable %_ptr_Uniform__UniformBuffer Uniform
%void = OpTypeVoid
%15 = OpTypeFunction %void
%18 = OpTypeFunction %v4float
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%_ptr_Function_float = OpTypePointer Function %float
%float_n1_25 = OpConstant %float -1.25
%float_0 = OpConstant %float 0
%float_0_75 = OpConstant %float 0.75
%float_2_25 = OpConstant %float 2.25
%51 = OpConstantComposite %v4float %float_n1_25 %float_0 %float_0_75 %float_2_25
%v4bool = OpTypeVector %bool 4
%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
%_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
%a = OpVariable %_ptr_Function_v4float Function
%55 = OpVariable %_ptr_Function_v4float Function
%22 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%26 = OpLoad %v4float %22
OpStore %_1_v %26
%29 = OpLoad %v4float %_1_v
%30 = OpCompositeExtract %float %29 0
OpStore %_2_x %30
%32 = OpLoad %v4float %_1_v
%33 = OpCompositeExtract %float %32 1
OpStore %_3_y %33
%35 = OpLoad %v4float %_1_v
%36 = OpCompositeExtract %float %35 2
OpStore %_4_z %36
%38 = OpLoad %v4float %_1_v
%39 = OpCompositeExtract %float %38 3
OpStore %_5_w %39
%41 = OpLoad %float %_2_x
%42 = OpLoad %float %_3_y
%43 = OpLoad %float %_4_z
%44 = OpLoad %float %_5_w
%45 = OpCompositeConstruct %v4float %41 %42 %43 %44
OpStore %a %45
%46 = OpLoad %v4float %a
%52 = OpFOrdEqual %v4bool %46 %51
%54 = OpAll %bool %52
OpSelectionMerge %58 None
OpBranchConditional %54 %56 %57
%56 = OpLabel
%59 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%61 = OpLoad %v4float %59
OpStore %55 %61
OpBranch %58
%57 = OpLabel
%62 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%64 = OpLoad %v4float %62
OpStore %55 %64
OpBranch %58
%58 = OpLabel
%65 = OpLoad %v4float %55
OpReturnValue %65
OpFunctionEnd

View File

@ -0,0 +1,15 @@
out vec4 sk_FragColor;
uniform vec4 testInputs;
uniform vec4 colorGreen;
uniform vec4 colorRed;
vec4 main() {
vec4 _1_v = testInputs;
float _2_x = _1_v.x;
float _3_y = _1_v.y;
float _4_z = _1_v.z;
float _5_w = _1_v.w;
vec4 a = vec4(_2_x, _3_y, _4_z, _5_w);
return a == vec4(-1.25, 0.0, 0.75, 2.25) ? colorGreen : colorRed;
}

View File

@ -0,0 +1,29 @@
#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
struct Uniforms {
float4 testInputs;
float4 colorGreen;
float4 colorRed;
};
struct Inputs {
};
struct Outputs {
float4 sk_FragColor [[color(0)]];
};
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
Outputs _out;
(void)_out;
float4 _1_v = _uniforms.testInputs;
float _2_x = _1_v.x;
float _3_y = _1_v.y;
float _4_z = _1_v.z;
float _5_w = _1_v.w;
float4 a = float4(_2_x, _3_y, _4_z, _5_w);
_out.sk_FragColor = all(a == float4(-1.25, 0.0, 0.75, 2.25)) ? _uniforms.colorGreen : _uniforms.colorRed;
return _out;
}

View File

@ -1,43 +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 %_UniformBuffer "_UniformBuffer"
OpMemberName %_UniformBuffer 0 "testInputs"
OpMemberName %_UniformBuffer 1 "colorBlack"
OpMemberName %_UniformBuffer 2 "colorGreen"
OpMemberName %_UniformBuffer 3 "colorRed"
OpName %_entrypoint "_entrypoint"
OpName %main "main"
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"
OpName %_2_i "_2_i"
OpName %_3_x "_3_x"
OpName %_4_y "_4_y"
OpName %_5_z "_5_z"
OpName %_6_w "_6_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 %27 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
OpMemberDecorate %_UniformBuffer 3 Offset 48
OpMemberDecorate %_UniformBuffer 3 RelaxedPrecision
OpDecorate %_UniformBuffer Block
OpDecorate %10 Binding 0
OpDecorate %10 DescriptorSet 0
OpDecorate %26 RelaxedPrecision
OpDecorate %32 RelaxedPrecision
OpDecorate %37 RelaxedPrecision
OpDecorate %42 RelaxedPrecision
OpDecorate %46 RelaxedPrecision
OpDecorate %47 RelaxedPrecision
OpDecorate %48 RelaxedPrecision
OpDecorate %44 RelaxedPrecision
OpDecorate %49 RelaxedPrecision
OpDecorate %55 RelaxedPrecision
OpDecorate %58 RelaxedPrecision
OpDecorate %61 RelaxedPrecision
OpDecorate %54 RelaxedPrecision
OpDecorate %59 RelaxedPrecision
OpDecorate %63 RelaxedPrecision
OpDecorate %64 RelaxedPrecision
OpDecorate %65 RelaxedPrecision
OpDecorate %66 RelaxedPrecision
OpDecorate %67 RelaxedPrecision
OpDecorate %68 RelaxedPrecision
OpDecorate %69 RelaxedPrecision
OpDecorate %80 RelaxedPrecision
OpDecorate %83 RelaxedPrecision
OpDecorate %84 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -45,83 +54,96 @@ OpDecorate %69 RelaxedPrecision
%bool = OpTypeBool
%_ptr_Input_bool = OpTypePointer Input %bool
%sk_Clockwise = OpVariable %_ptr_Input_bool Input
%_UniformBuffer = OpTypeStruct %v4float %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
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%v4int = OpTypeVector %int 4
%_ptr_Function_v4int = OpTypePointer Function %v4int
%float_1 = OpConstant %float 1
%_ptr_Function_v4float = OpTypePointer Function %v4float
%int_1 = OpConstant %int 1
%_ptr_Function_float = OpTypePointer Function %float
%float_2 = OpConstant %float 2
%72 = OpConstantComposite %v4float %float_2 %float_2 %float_2 %float_2
%main = OpFunction %void None %11
%12 = OpLabel
%_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
%17 = OpExtInst %float %1 Sqrt %float_1
%19 = OpConvertFToS %int %17
%20 = OpCompositeConstruct %v4int %19 %19 %19 %19
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 %72
%float_n1_25 = OpConstant %float -1.25
%float_0 = OpConstant %float 0
%70 = OpConstantComposite %v4float %float_n1_25 %float_n1_25 %float_n1_25 %float_0
%v4bool = OpTypeVector %bool 4
%int_2 = OpConstant %int 2
%int_3 = OpConstant %int 3
%_entrypoint = OpFunction %void None %15
%16 = OpLabel
%17 = OpFunctionCall %v4float %main
OpStore %sk_FragColor %17
OpReturn
OpFunctionEnd
%main = OpFunction %v4float None %18
%19 = OpLabel
%_1_v = OpVariable %_ptr_Function_v4float Function
%_2_i = OpVariable %_ptr_Function_v4int Function
%_3_x = OpVariable %_ptr_Function_float Function
%_4_y = OpVariable %_ptr_Function_float Function
%_5_z = OpVariable %_ptr_Function_float Function
%_6_w = OpVariable %_ptr_Function_float Function
%74 = OpVariable %_ptr_Function_v4float Function
%22 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%26 = OpLoad %v4float %22
OpStore %_1_v %26
%30 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%32 = OpLoad %v4float %30
%33 = OpCompositeExtract %float %32 0
%34 = OpConvertFToS %int %33
%35 = OpCompositeExtract %float %32 1
%36 = OpConvertFToS %int %35
%37 = OpCompositeExtract %float %32 2
%38 = OpConvertFToS %int %37
%39 = OpCompositeExtract %float %32 3
%40 = OpConvertFToS %int %39
%41 = OpCompositeConstruct %v4int %34 %36 %38 %40
OpStore %_2_i %41
%44 = OpLoad %v4float %_1_v
%45 = OpLoad %v4int %_2_i
%46 = OpCompositeExtract %int %45 0
%47 = OpVectorExtractDynamic %float %44 %46
OpStore %_3_x %47
%49 = OpLoad %v4float %_1_v
%50 = OpLoad %v4int %_2_i
%51 = OpCompositeExtract %int %50 1
%52 = OpVectorExtractDynamic %float %49 %51
OpStore %_4_y %52
%54 = OpLoad %v4float %_1_v
%55 = OpLoad %v4int %_2_i
%56 = OpCompositeExtract %int %55 2
%57 = OpVectorExtractDynamic %float %54 %56
OpStore %_5_z %57
%59 = OpLoad %v4float %_1_v
%60 = OpLoad %v4int %_2_i
%61 = OpCompositeExtract %int %60 3
%62 = OpVectorExtractDynamic %float %59 %61
OpStore %_6_w %62
%63 = OpLoad %float %_3_x
%64 = OpLoad %float %_4_y
%65 = OpLoad %float %_5_z
%66 = OpLoad %float %_6_w
%67 = OpCompositeConstruct %v4float %63 %64 %65 %66
%71 = OpFOrdEqual %v4bool %67 %70
%73 = OpAll %bool %71
OpSelectionMerge %77 None
OpBranchConditional %73 %75 %76
%75 = OpLabel
%78 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%80 = OpLoad %v4float %78
OpStore %74 %80
OpBranch %77
%76 = OpLabel
%81 = OpAccessChain %_ptr_Uniform_v4float %10 %int_3
%83 = OpLoad %v4float %81
OpStore %74 %83
OpBranch %77
%77 = OpLabel
%84 = OpLoad %v4float %74
OpReturnValue %84
OpFunctionEnd

View File

@ -1,21 +1,16 @@
out vec4 sk_FragColor;
void main() {
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);
uniform vec4 testInputs;
uniform vec4 colorBlack;
uniform vec4 colorGreen;
uniform vec4 colorRed;
vec4 main() {
vec4 _1_v = testInputs;
ivec4 _2_i = ivec4(colorBlack);
float _3_x = _1_v[_2_i.x];
float _4_y = _1_v[_2_i.y];
float _5_z = _1_v[_2_i.z];
float _6_w = _1_v[_2_i.w];
return vec4(_3_x, _4_y, _5_z, _6_w) == vec4(-1.25, -1.25, -1.25, 0.0) ? colorGreen : colorRed;
}

View File

@ -1,30 +1,31 @@
#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
struct Uniforms {
float4 testInputs;
float4 colorBlack;
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;
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);
float4 _1_v = _uniforms.testInputs;
int4 _2_i = int4(_uniforms.colorBlack);
float _3_x = _1_v[_2_i.x];
float _4_y = _1_v[_2_i.y];
float _5_z = _1_v[_2_i.z];
float _6_w = _1_v[_2_i.w];
_out.sk_FragColor = all(float4(_3_x, _4_y, _5_z, _6_w) == float4(-1.25, -1.25, -1.25, 0.0)) ? _uniforms.colorGreen : _uniforms.colorRed;
return _out;
}

View File

@ -1,10 +1,15 @@
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 "testInputs"
OpMemberName %_UniformBuffer 1 "colorGreen"
OpMemberName %_UniformBuffer 2 "colorRed"
OpName %_entrypoint "_entrypoint"
OpName %main "main"
OpName %v "v"
OpDecorate %sk_FragColor RelaxedPrecision
@ -12,38 +17,52 @@ OpDecorate %sk_FragColor Location 0
OpDecorate %sk_FragColor Index 0
OpDecorate %sk_Clockwise RelaxedPrecision
OpDecorate %sk_Clockwise BuiltIn FrontFacing
OpDecorate %18 RelaxedPrecision
OpDecorate %21 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 %26 RelaxedPrecision
OpDecorate %27 RelaxedPrecision
OpDecorate %31 RelaxedPrecision
OpDecorate %34 RelaxedPrecision
OpDecorate %37 RelaxedPrecision
OpDecorate %41 RelaxedPrecision
OpDecorate %46 RelaxedPrecision
OpDecorate %48 RelaxedPrecision
OpDecorate %44 RelaxedPrecision
OpDecorate %51 RelaxedPrecision
OpDecorate %54 RelaxedPrecision
OpDecorate %59 RelaxedPrecision
OpDecorate %62 RelaxedPrecision
OpDecorate %65 RelaxedPrecision
OpDecorate %66 RelaxedPrecision
OpDecorate %56 RelaxedPrecision
OpDecorate %58 RelaxedPrecision
OpDecorate %61 RelaxedPrecision
OpDecorate %64 RelaxedPrecision
OpDecorate %69 RelaxedPrecision
OpDecorate %72 RelaxedPrecision
OpDecorate %75 RelaxedPrecision
OpDecorate %76 RelaxedPrecision
OpDecorate %79 RelaxedPrecision
OpDecorate %84 RelaxedPrecision
OpDecorate %82 RelaxedPrecision
OpDecorate %86 RelaxedPrecision
OpDecorate %91 RelaxedPrecision
OpDecorate %93 RelaxedPrecision
OpDecorate %89 RelaxedPrecision
OpDecorate %94 RelaxedPrecision
OpDecorate %96 RelaxedPrecision
OpDecorate %98 RelaxedPrecision
OpDecorate %101 RelaxedPrecision
OpDecorate %104 RelaxedPrecision
OpDecorate %110 RelaxedPrecision
OpDecorate %115 RelaxedPrecision
OpDecorate %117 RelaxedPrecision
OpDecorate %103 RelaxedPrecision
OpDecorate %106 RelaxedPrecision
OpDecorate %108 RelaxedPrecision
OpDecorate %111 RelaxedPrecision
OpDecorate %114 RelaxedPrecision
OpDecorate %120 RelaxedPrecision
OpDecorate %123 RelaxedPrecision
OpDecorate %128 RelaxedPrecision
OpDecorate %131 RelaxedPrecision
OpDecorate %125 RelaxedPrecision
OpDecorate %127 RelaxedPrecision
OpDecorate %130 RelaxedPrecision
OpDecorate %133 RelaxedPrecision
OpDecorate %138 RelaxedPrecision
OpDecorate %141 RelaxedPrecision
OpDecorate %144 RelaxedPrecision
OpDecorate %155 RelaxedPrecision
OpDecorate %158 RelaxedPrecision
OpDecorate %159 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -51,157 +70,192 @@ OpDecorate %131 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
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%float_1 = OpConstant %float 1
%v2float = OpTypeVector %float 2
%float_0 = OpConstant %float 0
%v3float = OpTypeVector %float 3
%main = OpFunction %void None %11
%12 = OpLabel
%v = OpVariable %_ptr_Function_v4float Function
%15 = OpExtInst %float %1 Sqrt %float_1
%17 = OpCompositeConstruct %v4float %15 %15 %15 %15
OpStore %v %17
%18 = OpLoad %v4float %v
%19 = OpCompositeExtract %float %18 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
%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
%145 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
%v4bool = OpTypeVector %bool 4
%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
%v = OpVariable %_ptr_Function_v4float Function
%149 = OpVariable %_ptr_Function_v4float Function
%22 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%26 = OpLoad %v4float %22
OpStore %v %26
%27 = OpLoad %v4float %v
%28 = OpCompositeExtract %float %27 0
%30 = OpCompositeConstruct %v4float %28 %float_1 %float_1 %float_1
OpStore %v %30
%31 = OpLoad %v4float %v
%32 = OpVectorShuffle %v2float %31 %31 0 1
%34 = OpCompositeExtract %float %32 0
%35 = OpCompositeExtract %float %32 1
%36 = OpCompositeConstruct %v4float %34 %35 %float_1 %float_1
OpStore %v %36
%37 = OpLoad %v4float %v
%38 = OpCompositeExtract %float %37 0
%39 = OpCompositeConstruct %v4float %38 %float_1 %float_1 %float_1
OpStore %v %39
%41 = OpLoad %v4float %v
%42 = OpCompositeExtract %float %41 1
%43 = OpCompositeConstruct %v4float %float_0 %42 %float_1 %float_1
OpStore %v %43
%44 = OpLoad %v4float %v
%45 = OpVectorShuffle %v3float %44 %44 0 1 2
%47 = OpCompositeExtract %float %45 0
%48 = OpCompositeExtract %float %45 1
%49 = OpCompositeExtract %float %45 2
%50 = OpCompositeConstruct %v4float %47 %48 %49 %float_1
OpStore %v %50
%51 = OpLoad %v4float %v
%52 = OpVectorShuffle %v2float %51 %51 0 1
%53 = OpCompositeExtract %float %52 0
%54 = OpCompositeExtract %float %52 1
%55 = OpCompositeConstruct %v4float %53 %54 %float_1 %float_1
OpStore %v %55
%56 = OpLoad %v4float %v
%57 = OpCompositeExtract %float %56 0
%58 = OpLoad %v4float %v
%59 = OpCompositeExtract %float %58 2
%60 = OpCompositeConstruct %v4float %57 %float_0 %59 %float_1
OpStore %v %60
%61 = OpLoad %v4float %v
%62 = OpCompositeExtract %float %61 0
%63 = OpCompositeConstruct %v4float %62 %float_1 %float_0 %float_1
OpStore %v %63
%64 = OpLoad %v4float %v
%65 = OpVectorShuffle %v2float %64 %64 1 2
%66 = OpCompositeExtract %float %65 0
%67 = OpCompositeExtract %float %65 1
%68 = OpCompositeConstruct %v4float %float_1 %66 %67 %float_1
OpStore %v %68
%69 = OpLoad %v4float %v
%70 = OpCompositeExtract %float %69 1
%71 = OpCompositeConstruct %v4float %float_0 %70 %float_1 %float_1
OpStore %v %71
%72 = OpLoad %v4float %v
%73 = OpCompositeExtract %float %72 2
%74 = OpCompositeConstruct %v4float %float_1 %float_1 %73 %float_1
OpStore %v %74
%75 = OpLoad %v4float %v
OpStore %v %75
%76 = OpLoad %v4float %v
%77 = OpVectorShuffle %v3float %76 %76 0 1 2
%78 = OpCompositeExtract %float %77 0
%79 = OpCompositeExtract %float %77 1
%80 = OpCompositeExtract %float %77 2
%81 = OpCompositeConstruct %v4float %78 %79 %80 %float_1
OpStore %v %81
%82 = OpLoad %v4float %v
%83 = OpVectorShuffle %v2float %82 %82 0 1
%84 = OpCompositeExtract %float %83 0
%85 = OpCompositeExtract %float %83 1
%86 = OpLoad %v4float %v
%87 = OpCompositeExtract %float %86 3
%88 = OpCompositeConstruct %v4float %84 %85 %float_0 %87
OpStore %v %88
%89 = OpLoad %v4float %v
%90 = OpVectorShuffle %v2float %89 %89 0 1
%91 = OpCompositeExtract %float %90 0
%92 = OpCompositeExtract %float %90 1
%93 = OpCompositeConstruct %v4float %91 %92 %float_1 %float_0
OpStore %v %93
%94 = OpLoad %v4float %v
%95 = OpCompositeExtract %float %94 0
%96 = OpLoad %v4float %v
%97 = OpVectorShuffle %v2float %96 %96 2 3
%98 = OpCompositeExtract %float %97 0
%99 = OpCompositeExtract %float %97 1
%100 = OpCompositeConstruct %v4float %95 %float_1 %98 %99
OpStore %v %100
%101 = OpLoad %v4float %v
%102 = OpCompositeExtract %float %101 0
%103 = OpLoad %v4float %v
%104 = OpCompositeExtract %float %103 2
%105 = OpCompositeConstruct %v4float %102 %float_0 %104 %float_1
OpStore %v %105
%106 = OpLoad %v4float %v
%107 = OpCompositeExtract %float %106 0
%108 = OpLoad %v4float %v
%109 = OpCompositeExtract %float %108 3
%110 = OpCompositeConstruct %v4float %107 %float_1 %float_1 %109
OpStore %v %110
%111 = OpLoad %v4float %v
%112 = OpCompositeExtract %float %111 0
%113 = OpCompositeConstruct %v4float %112 %float_1 %float_0 %float_1
OpStore %v %113
%114 = OpLoad %v4float %v
%115 = OpVectorShuffle %v3float %114 %114 1 2 3
%116 = OpCompositeExtract %float %115 0
%117 = OpCompositeExtract %float %115 1
%118 = OpCompositeExtract %float %115 2
%119 = OpCompositeConstruct %v4float %float_1 %116 %117 %118
OpStore %v %119
%120 = OpLoad %v4float %v
%121 = OpVectorShuffle %v2float %120 %120 1 2
%122 = OpCompositeExtract %float %121 0
%123 = OpCompositeExtract %float %121 1
%124 = OpCompositeConstruct %v4float %float_0 %122 %123 %float_1
OpStore %v %124
%125 = OpLoad %v4float %v
%126 = OpCompositeExtract %float %125 1
%127 = OpLoad %v4float %v
%128 = OpCompositeExtract %float %127 3
%129 = OpCompositeConstruct %v4float %float_0 %126 %float_1 %128
OpStore %v %129
%130 = OpLoad %v4float %v
%131 = OpCompositeExtract %float %130 1
%132 = OpCompositeConstruct %v4float %float_1 %131 %float_1 %float_1
OpStore %v %132
%133 = OpLoad %v4float %v
%134 = OpVectorShuffle %v2float %133 %133 2 3
%135 = OpCompositeExtract %float %134 0
%136 = OpCompositeExtract %float %134 1
%137 = OpCompositeConstruct %v4float %float_0 %float_0 %135 %136
OpStore %v %137
%138 = OpLoad %v4float %v
%139 = OpCompositeExtract %float %138 2
%140 = OpCompositeConstruct %v4float %float_0 %float_0 %139 %float_1
OpStore %v %140
%141 = OpLoad %v4float %v
%142 = OpCompositeExtract %float %141 3
%143 = OpCompositeConstruct %v4float %float_0 %float_1 %float_1 %142
OpStore %v %143
%144 = OpLoad %v4float %v
%146 = OpFOrdEqual %v4bool %144 %145
%148 = OpAll %bool %146
OpSelectionMerge %152 None
OpBranchConditional %148 %150 %151
%150 = OpLabel
%153 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%155 = OpLoad %v4float %153
OpStore %149 %155
OpBranch %152
%151 = OpLabel
%156 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%158 = OpLoad %v4float %156
OpStore %149 %158
OpBranch %152
%152 = OpLabel
%159 = OpLoad %v4float %149
OpReturnValue %159
OpFunctionEnd

View File

@ -1,31 +1,35 @@
out vec4 sk_FragColor;
void main() {
vec4 v = vec4(sqrt(1.0));
sk_FragColor = vec4(v.x, 1.0, 1.0, 1.0);
sk_FragColor = vec4(v.xy, 1.0, 1.0);
sk_FragColor = vec4(v.x, 1.0, 1.0, 1.0);
sk_FragColor = vec4(0.0, v.y, 1.0, 1.0);
sk_FragColor = vec4(v.xyz, 1.0);
sk_FragColor = vec4(v.xy, 1.0, 1.0);
sk_FragColor = vec4(v.x, 0.0, v.z, 1.0);
sk_FragColor = vec4(v.x, 1.0, 0.0, 1.0);
sk_FragColor = vec4(1.0, v.yz, 1.0);
sk_FragColor = vec4(0.0, v.y, 1.0, 1.0);
sk_FragColor = vec4(1.0, 1.0, v.z, 1.0);
sk_FragColor = v;
sk_FragColor = vec4(v.xyz, 1.0);
sk_FragColor = vec4(v.xy, 0.0, v.w);
sk_FragColor = vec4(v.xy, 1.0, 0.0);
sk_FragColor = vec4(v.x, 1.0, v.zw);
sk_FragColor = vec4(v.x, 0.0, v.z, 1.0);
sk_FragColor = vec4(v.x, 1.0, 1.0, v.w);
sk_FragColor = vec4(v.x, 1.0, 0.0, 1.0);
sk_FragColor = vec4(1.0, v.yzw);
sk_FragColor = vec4(0.0, v.yz, 1.0);
sk_FragColor = vec4(0.0, v.y, 1.0, v.w);
sk_FragColor = vec4(1.0, v.y, 1.0, 1.0);
sk_FragColor = vec4(0.0, 0.0, v.zw);
sk_FragColor = vec4(0.0, 0.0, v.z, 1.0);
sk_FragColor = vec4(0.0, 1.0, 1.0, v.w);
uniform vec4 testInputs;
uniform vec4 colorGreen;
uniform vec4 colorRed;
vec4 main() {
vec4 v = testInputs;
v = vec4(v.x, 1.0, 1.0, 1.0);
v = vec4(v.xy, 1.0, 1.0);
v = vec4(v.x, 1.0, 1.0, 1.0);
v = vec4(0.0, v.y, 1.0, 1.0);
v = vec4(v.xyz, 1.0);
v = vec4(v.xy, 1.0, 1.0);
v = vec4(v.x, 0.0, v.z, 1.0);
v = vec4(v.x, 1.0, 0.0, 1.0);
v = vec4(1.0, v.yz, 1.0);
v = vec4(0.0, v.y, 1.0, 1.0);
v = vec4(1.0, 1.0, v.z, 1.0);
v = v;
v = vec4(v.xyz, 1.0);
v = vec4(v.xy, 0.0, v.w);
v = vec4(v.xy, 1.0, 0.0);
v = vec4(v.x, 1.0, v.zw);
v = vec4(v.x, 0.0, v.z, 1.0);
v = vec4(v.x, 1.0, 1.0, v.w);
v = vec4(v.x, 1.0, 0.0, 1.0);
v = vec4(1.0, v.yzw);
v = vec4(0.0, v.yz, 1.0);
v = vec4(0.0, v.y, 1.0, v.w);
v = vec4(1.0, v.y, 1.0, 1.0);
v = vec4(0.0, 0.0, v.zw);
v = vec4(0.0, 0.0, v.z, 1.0);
v = vec4(0.0, 1.0, 1.0, v.w);
return v == vec4(0.0, 1.0, 1.0, 1.0) ? colorGreen : colorRed;
}

View File

@ -1,40 +1,49 @@
#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
struct Uniforms {
float4 testInputs;
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;
float4 v = float4(sqrt(1.0));
_out.sk_FragColor = float4(v.x, 1.0, 1.0, 1.0);
_out.sk_FragColor = float4(v.xy, 1.0, 1.0);
_out.sk_FragColor = float4(v.x, 1.0, 1.0, 1.0);
_out.sk_FragColor = float4(0.0, v.y, 1.0, 1.0);
_out.sk_FragColor = float4(v.xyz, 1.0);
_out.sk_FragColor = float4(v.xy, 1.0, 1.0);
_out.sk_FragColor = float4(v.x, 0.0, v.z, 1.0);
_out.sk_FragColor = float4(v.x, 1.0, 0.0, 1.0);
_out.sk_FragColor = float4(1.0, v.yz, 1.0);
_out.sk_FragColor = float4(0.0, v.y, 1.0, 1.0);
_out.sk_FragColor = float4(1.0, 1.0, v.z, 1.0);
_out.sk_FragColor = v;
_out.sk_FragColor = float4(v.xyz, 1.0);
_out.sk_FragColor = float4(v.xy, 0.0, v.w);
_out.sk_FragColor = float4(v.xy, 1.0, 0.0);
_out.sk_FragColor = float4(v.x, 1.0, v.zw);
_out.sk_FragColor = float4(v.x, 0.0, v.z, 1.0);
_out.sk_FragColor = float4(v.x, 1.0, 1.0, v.w);
_out.sk_FragColor = float4(v.x, 1.0, 0.0, 1.0);
_out.sk_FragColor = float4(1.0, v.yzw);
_out.sk_FragColor = float4(0.0, v.yz, 1.0);
_out.sk_FragColor = float4(0.0, v.y, 1.0, v.w);
_out.sk_FragColor = float4(1.0, v.y, 1.0, 1.0);
_out.sk_FragColor = float4(0.0, 0.0, v.zw);
_out.sk_FragColor = float4(0.0, 0.0, v.z, 1.0);
_out.sk_FragColor = float4(0.0, 1.0, 1.0, v.w);
float4 v = _uniforms.testInputs;
v = float4(v.x, 1.0, 1.0, 1.0);
v = float4(v.xy, 1.0, 1.0);
v = float4(v.x, 1.0, 1.0, 1.0);
v = float4(0.0, v.y, 1.0, 1.0);
v = float4(v.xyz, 1.0);
v = float4(v.xy, 1.0, 1.0);
v = float4(v.x, 0.0, v.z, 1.0);
v = float4(v.x, 1.0, 0.0, 1.0);
v = float4(1.0, v.yz, 1.0);
v = float4(0.0, v.y, 1.0, 1.0);
v = float4(1.0, 1.0, v.z, 1.0);
v = v;
v = float4(v.xyz, 1.0);
v = float4(v.xy, 0.0, v.w);
v = float4(v.xy, 1.0, 0.0);
v = float4(v.x, 1.0, v.zw);
v = float4(v.x, 0.0, v.z, 1.0);
v = float4(v.x, 1.0, 1.0, v.w);
v = float4(v.x, 1.0, 0.0, 1.0);
v = float4(1.0, v.yzw);
v = float4(0.0, v.yz, 1.0);
v = float4(0.0, v.y, 1.0, v.w);
v = float4(1.0, v.y, 1.0, 1.0);
v = float4(0.0, 0.0, v.zw);
v = float4(0.0, 0.0, v.z, 1.0);
v = float4(0.0, 1.0, 1.0, v.w);
_out.sk_FragColor = all(v == float4(0.0, 1.0, 1.0, 1.0)) ? _uniforms.colorGreen : _uniforms.colorRed;
return _out;
}

View File

@ -1,17 +1,25 @@
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 "colorRed"
OpName %_entrypoint "_entrypoint"
OpName %main "main"
OpDecorate %sk_FragColor RelaxedPrecision
OpDecorate %sk_FragColor Location 0
OpDecorate %sk_FragColor Index 0
OpDecorate %sk_Clockwise RelaxedPrecision
OpDecorate %sk_Clockwise BuiltIn FrontFacing
OpDecorate %13 RelaxedPrecision
OpMemberDecorate %_UniformBuffer 0 Offset 0
OpMemberDecorate %_UniformBuffer 0 RelaxedPrecision
OpDecorate %_UniformBuffer Block
OpDecorate %10 Binding 0
OpDecorate %10 DescriptorSet 0
OpDecorate %24 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -19,12 +27,25 @@ OpDecorate %13 RelaxedPrecision
%bool = OpTypeBool
%_ptr_Input_bool = OpTypePointer Input %bool
%sk_Clockwise = OpVariable %_ptr_Input_bool Input
%_UniformBuffer = OpTypeStruct %v4float
%_ptr_Uniform__UniformBuffer = OpTypePointer Uniform %_UniformBuffer
%10 = OpVariable %_ptr_Uniform__UniformBuffer Uniform
%void = OpTypeVoid
%11 = OpTypeFunction %void
%main = OpFunction %void None %11
%12 = OpLabel
%13 = OpLoad %v4float %sk_FragColor
%14 = OpVectorShuffle %v4float %13 %13 3 2 1 0
OpStore %sk_FragColor %14
%15 = OpTypeFunction %void
%18 = OpTypeFunction %v4float
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 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
%20 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%24 = OpLoad %v4float %20
%25 = OpVectorShuffle %v4float %24 %24 2 3 1 0
OpReturnValue %25
OpFunctionEnd

View File

@ -1,5 +1,6 @@
out vec4 sk_FragColor;
void main() {
sk_FragColor = sk_FragColor.wzyx;
uniform vec4 colorRed;
vec4 main() {
return colorRed.zwyx;
}

View File

@ -1,14 +1,18 @@
#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
struct Uniforms {
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 = _out.sk_FragColor.wzyx;
_out.sk_FragColor = _uniforms.colorRed.zwyx;
return _out;
}

View File

@ -1,13 +1,17 @@
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 "colRGB"
OpMemberName %_UniformBuffer 0 "colorRed"
OpMemberName %_UniformBuffer 1 "colorGreen"
OpMemberName %_UniformBuffer 2 "testInputs"
OpName %_entrypoint "_entrypoint"
OpName %fn "fn"
OpName %x "x"
OpName %main "main"
OpName %v "v"
OpDecorate %sk_FragColor RelaxedPrecision
@ -15,38 +19,46 @@ OpDecorate %sk_FragColor Location 0
OpDecorate %sk_FragColor Index 0
OpDecorate %sk_Clockwise RelaxedPrecision
OpDecorate %sk_Clockwise BuiltIn FrontFacing
OpMemberDecorate %_UniformBuffer 0 DescriptorSet 0
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 %11 Binding 0
OpDecorate %11 DescriptorSet 0
OpDecorate %19 RelaxedPrecision
OpDecorate %33 RelaxedPrecision
OpDecorate %36 RelaxedPrecision
OpDecorate %42 RelaxedPrecision
OpDecorate %48 RelaxedPrecision
OpDecorate %53 RelaxedPrecision
OpDecorate %58 RelaxedPrecision
OpDecorate %60 RelaxedPrecision
OpDecorate %65 RelaxedPrecision
OpDecorate %67 RelaxedPrecision
OpDecorate %74 RelaxedPrecision
OpDecorate %35 RelaxedPrecision
OpDecorate %44 RelaxedPrecision
OpDecorate %45 RelaxedPrecision
OpDecorate %47 RelaxedPrecision
OpDecorate %54 RelaxedPrecision
OpDecorate %61 RelaxedPrecision
OpDecorate %66 RelaxedPrecision
OpDecorate %71 RelaxedPrecision
OpDecorate %72 RelaxedPrecision
OpDecorate %77 RelaxedPrecision
OpDecorate %79 RelaxedPrecision
OpDecorate %83 RelaxedPrecision
OpDecorate %87 RelaxedPrecision
OpDecorate %92 RelaxedPrecision
OpDecorate %101 RelaxedPrecision
OpDecorate %107 RelaxedPrecision
OpDecorate %110 RelaxedPrecision
OpDecorate %115 RelaxedPrecision
OpDecorate %117 RelaxedPrecision
OpDecorate %118 RelaxedPrecision
OpDecorate %120 RelaxedPrecision
OpDecorate %86 RelaxedPrecision
OpDecorate %91 RelaxedPrecision
OpDecorate %95 RelaxedPrecision
OpDecorate %99 RelaxedPrecision
OpDecorate %104 RelaxedPrecision
OpDecorate %114 RelaxedPrecision
OpDecorate %121 RelaxedPrecision
OpDecorate %124 RelaxedPrecision
OpDecorate %125 RelaxedPrecision
OpDecorate %129 RelaxedPrecision
OpDecorate %131 RelaxedPrecision
OpDecorate %132 RelaxedPrecision
OpDecorate %134 RelaxedPrecision
OpDecorate %135 RelaxedPrecision
OpDecorate %138 RelaxedPrecision
OpDecorate %139 RelaxedPrecision
OpDecorate %145 RelaxedPrecision
OpDecorate %146 RelaxedPrecision
OpDecorate %156 RelaxedPrecision
OpDecorate %158 RelaxedPrecision
OpDecorate %159 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -54,162 +66,203 @@ OpDecorate %131 RelaxedPrecision
%bool = OpTypeBool
%_ptr_Input_bool = OpTypePointer Input %bool
%sk_Clockwise = OpVariable %_ptr_Input_bool Input
%v3float = OpTypeVector %float 3
%_UniformBuffer = OpTypeStruct %v3float
%_UniformBuffer = OpTypeStruct %v4float %v4float %v4float
%_ptr_Uniform__UniformBuffer = OpTypePointer Uniform %_UniformBuffer
%11 = OpVariable %_ptr_Uniform__UniformBuffer Uniform
%_ptr_Function_float = OpTypePointer Function %float
%15 = OpTypeFunction %float %_ptr_Function_float
%int = OpTypeInt 32 1
%float_2 = OpConstant %float 2
%float_3 = OpConstant %float 3
%void = OpTypeVoid
%28 = OpTypeFunction %void
%float_1 = OpConstant %float 1
%16 = OpTypeFunction %void
%_ptr_Function_v4float = OpTypePointer Function %v4float
%19 = OpTypeFunction %float %_ptr_Function_v4float
%int = OpTypeInt 32 1
%_ptr_Function_int = OpTypePointer Function %int
%int_1 = OpConstant %int 1
%int_2 = OpConstant %int 2
%39 = OpTypeFunction %v4float
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%float_0 = OpConstant %float 0
%v3float = OpTypeVector %float 3
%v2float = OpTypeVector %float 2
%float_1 = OpConstant %float 1
%float_123 = OpConstant %float 123
%float_456 = OpConstant %float 456
%97 = OpConstantComposite %v4float %float_1 %float_1 %float_2 %float_3
%_ptr_Uniform_v3float = OpTypePointer Uniform %v3float
%float_2 = OpConstant %float 2
%float_3 = OpConstant %float 3
%111 = OpConstantComposite %v4float %float_1 %float_1 %float_2 %float_3
%int_0 = OpConstant %int 0
%fn = OpFunction %float None %15
%17 = OpFunctionParameter %_ptr_Function_float
%18 = OpLabel
%19 = OpLoad %float %17
%20 = OpConvertFToS %int %19
OpSelectionMerge %22 None
OpSwitch %20 %24 1 %23
%23 = OpLabel
OpReturnValue %float_2
%24 = OpLabel
OpReturnValue %float_3
%22 = OpLabel
OpUnreachable
OpFunctionEnd
%main = OpFunction %void None %28
%29 = OpLabel
%v = OpVariable %_ptr_Function_float Function
%68 = OpVariable %_ptr_Function_float Function
%75 = OpVariable %_ptr_Function_float Function
%80 = OpVariable %_ptr_Function_float Function
%84 = OpVariable %_ptr_Function_float Function
%88 = OpVariable %_ptr_Function_float Function
%93 = OpVariable %_ptr_Function_float Function
%31 = OpExtInst %float %1 Sqrt %float_1
OpStore %v %31
%33 = OpLoad %float %v
%34 = OpCompositeConstruct %v4float %33 %33 %33 %33
OpStore %sk_FragColor %34
%36 = OpLoad %float %v
%37 = OpCompositeConstruct %v3float %36 %36 %36
%38 = OpCompositeExtract %float %37 0
%39 = OpCompositeExtract %float %37 1
%40 = OpCompositeExtract %float %37 2
%41 = OpCompositeConstruct %v4float %float_0 %38 %39 %40
OpStore %sk_FragColor %41
%42 = OpLoad %float %v
%43 = OpCompositeConstruct %v2float %42 %42
%45 = OpCompositeExtract %float %43 0
%46 = OpCompositeExtract %float %43 1
%47 = OpCompositeConstruct %v4float %float_0 %float_0 %45 %46
OpStore %sk_FragColor %47
%48 = OpLoad %float %v
%49 = OpCompositeConstruct %v2float %48 %48
%50 = OpCompositeExtract %float %49 0
%51 = OpCompositeExtract %float %49 1
%52 = OpCompositeConstruct %v4float %float_1 %float_1 %50 %51
OpStore %sk_FragColor %52
%53 = OpLoad %float %v
%54 = OpCompositeConstruct %v2float %53 %53
%55 = OpCompositeExtract %float %54 0
%56 = OpCompositeExtract %float %54 1
%57 = OpCompositeConstruct %v4float %55 %56 %float_1 %float_1
OpStore %sk_FragColor %57
%58 = OpLoad %float %v
%59 = OpCompositeConstruct %v4float %58 %58 %58 %58
OpStore %sk_FragColor %59
%60 = OpLoad %float %v
%61 = OpCompositeConstruct %v2float %60 %60
%62 = OpCompositeExtract %float %61 0
%63 = OpCompositeExtract %float %61 1
%64 = OpCompositeConstruct %v4float %62 %63 %float_1 %float_1
OpStore %sk_FragColor %64
%65 = OpLoad %float %v
%66 = OpCompositeConstruct %v4float %65 %65 %65 %65
OpStore %sk_FragColor %66
%67 = OpLoad %float %v
OpStore %68 %67
%69 = OpFunctionCall %float %fn %68
%72 = OpCompositeConstruct %v3float %69 %float_123 %float_456
%73 = OpVectorShuffle %v4float %72 %72 1 1 2 2
OpStore %sk_FragColor %73
%74 = OpLoad %float %v
OpStore %75 %74
%76 = OpFunctionCall %float %fn %75
%77 = OpCompositeConstruct %v3float %76 %float_123 %float_456
%78 = OpVectorShuffle %v4float %77 %77 1 1 2 2
OpStore %sk_FragColor %78
%79 = OpLoad %float %v
OpStore %80 %79
%81 = OpFunctionCall %float %fn %80
%82 = OpCompositeConstruct %v4float %float_123 %float_456 %float_456 %81
OpStore %sk_FragColor %82
%83 = OpLoad %float %v
OpStore %84 %83
%85 = OpFunctionCall %float %fn %84
%86 = OpCompositeConstruct %v4float %float_123 %float_456 %float_456 %85
OpStore %sk_FragColor %86
%87 = OpLoad %float %v
OpStore %88 %87
%89 = OpFunctionCall %float %fn %88
%90 = OpCompositeConstruct %v3float %89 %float_123 %float_456
%91 = OpVectorShuffle %v4float %90 %90 1 0 0 2
OpStore %sk_FragColor %91
%92 = OpLoad %float %v
OpStore %93 %92
%94 = OpFunctionCall %float %fn %93
%95 = OpCompositeConstruct %v3float %94 %float_123 %float_456
%96 = OpVectorShuffle %v4float %95 %95 1 0 0 2
OpStore %sk_FragColor %96
OpStore %sk_FragColor %97
%98 = OpAccessChain %_ptr_Uniform_v3float %11 %int_0
%101 = OpLoad %v3float %98
%102 = OpCompositeExtract %float %101 0
%103 = OpCompositeExtract %float %101 1
%104 = OpCompositeExtract %float %101 2
%105 = OpCompositeConstruct %v4float %102 %103 %104 %float_1
OpStore %sk_FragColor %105
%106 = OpAccessChain %_ptr_Uniform_v3float %11 %int_0
%107 = OpLoad %v3float %106
%108 = OpCompositeExtract %float %107 0
%109 = OpAccessChain %_ptr_Uniform_v3float %11 %int_0
%110 = OpLoad %v3float %109
%111 = OpVectorShuffle %v2float %110 %110 1 2
%112 = OpCompositeExtract %float %111 0
%113 = OpCompositeExtract %float %111 1
%114 = OpCompositeConstruct %v4float %108 %float_1 %112 %113
OpStore %sk_FragColor %114
%115 = OpLoad %v4float %sk_FragColor
%116 = OpLoad %v4float %sk_FragColor
%117 = OpVectorShuffle %v4float %116 %115 4 5 6 7
OpStore %sk_FragColor %117
%118 = OpLoad %v4float %sk_FragColor
%119 = OpLoad %v4float %sk_FragColor
%120 = OpVectorShuffle %v4float %119 %118 7 6 5 4
OpStore %sk_FragColor %120
%121 = OpLoad %v4float %sk_FragColor
%122 = OpVectorShuffle %v2float %121 %121 1 2
%123 = OpLoad %v4float %sk_FragColor
%124 = OpVectorShuffle %v4float %123 %122 4 1 2 5
OpStore %sk_FragColor %124
%125 = OpLoad %v4float %sk_FragColor
%126 = OpVectorShuffle %v2float %125 %125 3 3
%127 = OpCompositeExtract %float %126 0
%128 = OpCompositeExtract %float %126 1
%129 = OpCompositeConstruct %v3float %127 %128 %float_1
%130 = OpLoad %v4float %sk_FragColor
%131 = OpVectorShuffle %v4float %130 %129 6 5 4 3
OpStore %sk_FragColor %131
%147 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
%v4bool = OpTypeVector %bool 4
%_entrypoint = OpFunction %void None %16
%17 = OpLabel
%18 = OpFunctionCall %v4float %main
OpStore %sk_FragColor %18
OpReturn
OpFunctionEnd
%fn = OpFunction %float None %19
%21 = OpFunctionParameter %_ptr_Function_v4float
%22 = OpLabel
%x = OpVariable %_ptr_Function_int Function
OpStore %x %int_1
OpBranch %27
%27 = OpLabel
OpLoopMerge %31 %30 None
OpBranch %28
%28 = OpLabel
%32 = OpLoad %int %x
%34 = OpSLessThanEqual %bool %32 %int_2
OpBranchConditional %34 %29 %31
%29 = OpLabel
%35 = OpLoad %v4float %21
%36 = OpCompositeExtract %float %35 0
OpReturnValue %36
%30 = OpLabel
%37 = OpLoad %int %x
%38 = OpIAdd %int %37 %int_1
OpStore %x %38
OpBranch %27
%31 = OpLabel
OpUnreachable
OpFunctionEnd
%main = OpFunction %v4float None %39
%40 = OpLabel
%v = OpVariable %_ptr_Function_v4float Function
%80 = OpVariable %_ptr_Function_v4float Function
%87 = OpVariable %_ptr_Function_v4float Function
%92 = OpVariable %_ptr_Function_v4float Function
%96 = OpVariable %_ptr_Function_v4float Function
%100 = OpVariable %_ptr_Function_v4float Function
%105 = OpVariable %_ptr_Function_v4float Function
%151 = OpVariable %_ptr_Function_v4float Function
%42 = OpAccessChain %_ptr_Uniform_v4float %11 %int_2
%44 = OpLoad %v4float %42
OpStore %v %44
%45 = OpLoad %v4float %v
OpStore %v %45
%47 = OpLoad %v4float %v
%48 = OpVectorShuffle %v3float %47 %47 2 1 0
%50 = OpCompositeExtract %float %48 0
%51 = OpCompositeExtract %float %48 1
%52 = OpCompositeExtract %float %48 2
%53 = OpCompositeConstruct %v4float %float_0 %50 %51 %52
OpStore %v %53
%54 = OpLoad %v4float %v
%55 = OpVectorShuffle %v2float %54 %54 0 3
%57 = OpCompositeExtract %float %55 0
%58 = OpCompositeExtract %float %55 1
%59 = OpCompositeConstruct %v4float %float_0 %float_0 %57 %58
OpStore %v %59
%61 = OpLoad %v4float %v
%62 = OpVectorShuffle %v2float %61 %61 3 0
%63 = OpCompositeExtract %float %62 0
%64 = OpCompositeExtract %float %62 1
%65 = OpCompositeConstruct %v4float %float_1 %float_1 %63 %64
OpStore %v %65
%66 = OpLoad %v4float %v
%67 = OpVectorShuffle %v2float %66 %66 2 1
%68 = OpCompositeExtract %float %67 0
%69 = OpCompositeExtract %float %67 1
%70 = OpCompositeConstruct %v4float %68 %69 %float_1 %float_1
OpStore %v %70
%71 = OpLoad %v4float %v
OpStore %v %71
%72 = OpLoad %v4float %v
%73 = OpVectorShuffle %v2float %72 %72 0 0
%74 = OpCompositeExtract %float %73 0
%75 = OpCompositeExtract %float %73 1
%76 = OpCompositeConstruct %v4float %74 %75 %float_1 %float_1
OpStore %v %76
%77 = OpLoad %v4float %v
%78 = OpVectorShuffle %v4float %77 %77 3 2 3 2
OpStore %v %78
%79 = OpLoad %v4float %v
OpStore %80 %79
%81 = OpFunctionCall %float %fn %80
%84 = OpCompositeConstruct %v3float %81 %float_123 %float_456
%85 = OpVectorShuffle %v4float %84 %84 1 1 2 2
OpStore %v %85
%86 = OpLoad %v4float %v
OpStore %87 %86
%88 = OpFunctionCall %float %fn %87
%89 = OpCompositeConstruct %v3float %88 %float_123 %float_456
%90 = OpVectorShuffle %v4float %89 %89 1 1 2 2
OpStore %v %90
%91 = OpLoad %v4float %v
OpStore %92 %91
%93 = OpFunctionCall %float %fn %92
%94 = OpCompositeConstruct %v4float %float_123 %float_456 %float_456 %93
OpStore %v %94
%95 = OpLoad %v4float %v
OpStore %96 %95
%97 = OpFunctionCall %float %fn %96
%98 = OpCompositeConstruct %v4float %float_123 %float_456 %float_456 %97
OpStore %v %98
%99 = OpLoad %v4float %v
OpStore %100 %99
%101 = OpFunctionCall %float %fn %100
%102 = OpCompositeConstruct %v3float %101 %float_123 %float_456
%103 = OpVectorShuffle %v4float %102 %102 1 0 0 2
OpStore %v %103
%104 = OpLoad %v4float %v
OpStore %105 %104
%106 = OpFunctionCall %float %fn %105
%107 = OpCompositeConstruct %v3float %106 %float_123 %float_456
%108 = OpVectorShuffle %v4float %107 %107 1 0 0 2
OpStore %v %108
OpStore %v %111
%112 = OpAccessChain %_ptr_Uniform_v4float %11 %int_0
%114 = OpLoad %v4float %112
%115 = OpVectorShuffle %v3float %114 %114 0 1 2
%116 = OpCompositeExtract %float %115 0
%117 = OpCompositeExtract %float %115 1
%118 = OpCompositeExtract %float %115 2
%119 = OpCompositeConstruct %v4float %116 %117 %118 %float_1
OpStore %v %119
%120 = OpAccessChain %_ptr_Uniform_v4float %11 %int_0
%121 = OpLoad %v4float %120
%122 = OpCompositeExtract %float %121 0
%123 = OpAccessChain %_ptr_Uniform_v4float %11 %int_0
%124 = OpLoad %v4float %123
%125 = OpVectorShuffle %v2float %124 %124 1 2
%126 = OpCompositeExtract %float %125 0
%127 = OpCompositeExtract %float %125 1
%128 = OpCompositeConstruct %v4float %122 %float_1 %126 %127
OpStore %v %128
%129 = OpLoad %v4float %v
%130 = OpLoad %v4float %v
%131 = OpVectorShuffle %v4float %130 %129 4 5 6 7
OpStore %v %131
%132 = OpLoad %v4float %v
%133 = OpLoad %v4float %v
%134 = OpVectorShuffle %v4float %133 %132 7 6 5 4
OpStore %v %134
%135 = OpLoad %v4float %v
%136 = OpVectorShuffle %v2float %135 %135 1 2
%137 = OpLoad %v4float %v
%138 = OpVectorShuffle %v4float %137 %136 4 1 2 5
OpStore %v %138
%139 = OpLoad %v4float %v
%140 = OpVectorShuffle %v2float %139 %139 3 3
%141 = OpCompositeExtract %float %140 0
%142 = OpCompositeExtract %float %140 1
%143 = OpCompositeConstruct %v3float %141 %142 %float_1
%144 = OpLoad %v4float %v
%145 = OpVectorShuffle %v4float %144 %143 6 5 4 3
OpStore %v %145
%146 = OpLoad %v4float %v
%148 = OpFOrdEqual %v4bool %146 %147
%150 = OpAll %bool %148
OpSelectionMerge %154 None
OpBranchConditional %150 %152 %153
%152 = OpLabel
%155 = OpAccessChain %_ptr_Uniform_v4float %11 %int_1
%156 = OpLoad %v4float %155
OpStore %151 %156
OpBranch %154
%153 = OpLabel
%157 = OpAccessChain %_ptr_Uniform_v4float %11 %int_0
%158 = OpLoad %v4float %157
OpStore %151 %158
OpBranch %154
%154 = OpLabel
%159 = OpLoad %v4float %151
OpReturnValue %159
OpFunctionEnd

View File

@ -1,35 +1,35 @@
out vec4 sk_FragColor;
layout (set = 0) uniform vec3 colRGB;
float fn(float v) {
switch (int(v)) {
case 1:
return 2.0;
default:
return 3.0;
uniform vec4 colorRed;
uniform vec4 colorGreen;
uniform vec4 testInputs;
float fn(vec4 v) {
for (int x = 1;x <= 2; ++x) {
return v.x;
}
}
void main() {
float v = sqrt(1.0);
sk_FragColor = vec4(v);
sk_FragColor = vec4(0.0, vec3(v));
sk_FragColor = vec4(0.0, 0.0, vec2(v));
sk_FragColor = vec4(1.0, 1.0, vec2(v));
sk_FragColor = vec4(vec2(v), 1.0, 1.0);
sk_FragColor = vec4(v);
sk_FragColor = vec4(vec2(v), 1.0, 1.0);
sk_FragColor = vec4(v);
sk_FragColor = vec3(fn(v), 123.0, 456.0).yyzz;
sk_FragColor = vec3(fn(v), 123.0, 456.0).yyzz;
sk_FragColor = vec4(123.0, 456.0, 456.0, fn(v));
sk_FragColor = vec4(123.0, 456.0, 456.0, fn(v));
sk_FragColor = vec3(fn(v), 123.0, 456.0).yxxz;
sk_FragColor = vec3(fn(v), 123.0, 456.0).yxxz;
sk_FragColor = vec4(1.0, 1.0, 2.0, 3.0);
sk_FragColor = vec4(colRGB, 1.0);
sk_FragColor = vec4(colRGB.x, 1.0, colRGB.yz);
sk_FragColor.xyzw = sk_FragColor;
sk_FragColor.wzyx = sk_FragColor;
sk_FragColor.xyzw.xw = sk_FragColor.yz;
sk_FragColor.wzyx.yzw = vec3(sk_FragColor.ww, 1.0);
vec4 main() {
vec4 v = testInputs;
v = v;
v = vec4(0.0, v.zyx);
v = vec4(0.0, 0.0, v.xw);
v = vec4(1.0, 1.0, v.wx);
v = vec4(v.zy, 1.0, 1.0);
v = v;
v = vec4(v.xx, 1.0, 1.0);
v = v.wzwz;
v = vec3(fn(v), 123.0, 456.0).yyzz;
v = vec3(fn(v), 123.0, 456.0).yyzz;
v = vec4(123.0, 456.0, 456.0, fn(v));
v = vec4(123.0, 456.0, 456.0, fn(v));
v = vec3(fn(v), 123.0, 456.0).yxxz;
v = vec3(fn(v), 123.0, 456.0).yxxz;
v = vec4(1.0, 1.0, 2.0, 3.0);
v = vec4(colorRed.xyz, 1.0);
v = vec4(colorRed.x, 1.0, colorRed.yz);
v.xyzw = v;
v.wzyx = v;
v.xyzw.xw = v.yz;
v.wzyx.yzw = vec3(v.ww, 1.0);
return v == vec4(1.0) ? colorGreen : colorRed;
}

View File

@ -2,46 +2,48 @@
#include <simd/simd.h>
using namespace metal;
struct Uniforms {
float3 colRGB;
float4 colorRed;
float4 colorGreen;
float4 testInputs;
};
struct Inputs {
};
struct Outputs {
float4 sk_FragColor [[color(0)]];
};
float fn(float v) {
switch (int(v)) {
case 1:
return 2.0;
default:
return 3.0;
float fn(float4 v) {
for (int x = 1;x <= 2; ++x) {
return v.x;
}
}
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
Outputs _out;
(void)_out;
float v = sqrt(1.0);
_out.sk_FragColor = float4(v);
_out.sk_FragColor = float4(0.0, float3(v));
_out.sk_FragColor = float4(0.0, 0.0, float2(v));
_out.sk_FragColor = float4(1.0, 1.0, float2(v));
_out.sk_FragColor = float4(float2(v), 1.0, 1.0);
_out.sk_FragColor = float4(v);
_out.sk_FragColor = float4(float2(v), 1.0, 1.0);
_out.sk_FragColor = float4(v);
_out.sk_FragColor = float3(fn(v), 123.0, 456.0).yyzz;
_out.sk_FragColor = float3(fn(v), 123.0, 456.0).yyzz;
_out.sk_FragColor = float4(123.0, 456.0, 456.0, fn(v));
_out.sk_FragColor = float4(123.0, 456.0, 456.0, fn(v));
_out.sk_FragColor = float3(fn(v), 123.0, 456.0).yxxz;
_out.sk_FragColor = float3(fn(v), 123.0, 456.0).yxxz;
_out.sk_FragColor = float4(1.0, 1.0, 2.0, 3.0);
_out.sk_FragColor = float4(_uniforms.colRGB, 1.0);
_out.sk_FragColor = float4(_uniforms.colRGB.x, 1.0, _uniforms.colRGB.yz);
_out.sk_FragColor.xyzw = _out.sk_FragColor;
_out.sk_FragColor.wzyx = _out.sk_FragColor;
_out.sk_FragColor.xyzw.xw = _out.sk_FragColor.yz;
_out.sk_FragColor.wzyx.yzw = float3(_out.sk_FragColor.ww, 1.0);
float4 v = _uniforms.testInputs;
v = v;
v = float4(0.0, v.zyx);
v = float4(0.0, 0.0, v.xw);
v = float4(1.0, 1.0, v.wx);
v = float4(v.zy, 1.0, 1.0);
v = v;
v = float4(v.xx, 1.0, 1.0);
v = v.wzwz;
v = float3(fn(v), 123.0, 456.0).yyzz;
v = float3(fn(v), 123.0, 456.0).yyzz;
v = float4(123.0, 456.0, 456.0, fn(v));
v = float4(123.0, 456.0, 456.0, fn(v));
v = float3(fn(v), 123.0, 456.0).yxxz;
v = float3(fn(v), 123.0, 456.0).yxxz;
v = float4(1.0, 1.0, 2.0, 3.0);
v = float4(_uniforms.colorRed.xyz, 1.0);
v = float4(_uniforms.colorRed.x, 1.0, _uniforms.colorRed.yz);
v.xyzw = v;
v.wzyx = v;
v.xyzw.xw = v.yz;
v.wzyx.yzw = float3(v.ww, 1.0);
_out.sk_FragColor = all(v == float4(1.0)) ? _uniforms.colorGreen : _uniforms.colorRed;
return _out;
}

View File

@ -1,18 +1,33 @@
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 %x "x"
OpName %v "v"
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
OpDecorate %_UniformBuffer Block
OpDecorate %10 Binding 0
OpDecorate %10 DescriptorSet 0
OpDecorate %26 RelaxedPrecision
OpDecorate %29 RelaxedPrecision
OpDecorate %38 RelaxedPrecision
OpDecorate %44 RelaxedPrecision
OpDecorate %47 RelaxedPrecision
OpDecorate %49 RelaxedPrecision
OpDecorate %51 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -20,40 +35,56 @@ OpDecorate %17 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_4 = OpConstant %float 4
%_ptr_Uniform_float = OpTypePointer Uniform %float
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%_ptr_Function_v4float = OpTypePointer Function %v4float
%v2float = OpTypeVector %float 2
%float_0 = OpConstant %float 0
%float_1 = OpConstant %float 1
%v3float = OpTypeVector %float 3
%main = OpFunction %void None %11
%12 = OpLabel
%x = OpVariable %_ptr_Function_float Function
%15 = OpExtInst %float %1 Sqrt %float_4
OpStore %x %15
%17 = OpLoad %float %x
%18 = OpCompositeConstruct %v2float %17 %17
%20 = OpCompositeExtract %float %18 0
%21 = OpCompositeExtract %float %18 1
%24 = OpCompositeConstruct %v4float %20 %21 %float_0 %float_1
OpStore %sk_FragColor %24
%25 = OpExtInst %float %1 Sqrt %float_4
%26 = OpCompositeConstruct %v2float %25 %25
%27 = OpCompositeExtract %float %26 0
%28 = OpCompositeExtract %float %26 1
%29 = OpCompositeConstruct %v4float %27 %28 %float_0 %float_1
OpStore %sk_FragColor %29
%30 = OpExtInst %float %1 Sqrt %float_4
%31 = OpCompositeConstruct %v4float %float_0 %30 %float_0 %float_1
OpStore %sk_FragColor %31
%32 = OpExtInst %float %1 Sqrt %float_4
%33 = OpCompositeConstruct %v2float %32 %32
%34 = OpCompositeExtract %float %33 0
%35 = OpCompositeExtract %float %33 1
%36 = OpCompositeConstruct %v3float %34 %35 %float_0
%38 = OpVectorShuffle %v4float %36 %36 2 0 2 1
OpStore %sk_FragColor %38
%_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_float Function
%v = OpVariable %_ptr_Function_v4float Function
%22 = OpAccessChain %_ptr_Uniform_float %10 %int_0
%26 = OpLoad %float %22
OpStore %x %26
%29 = OpLoad %float %x
%30 = OpCompositeConstruct %v2float %29 %29
%32 = OpCompositeExtract %float %30 0
%33 = OpCompositeExtract %float %30 1
%36 = OpCompositeConstruct %v4float %32 %33 %float_0 %float_1
OpStore %v %36
%37 = OpAccessChain %_ptr_Uniform_float %10 %int_0
%38 = OpLoad %float %37
%39 = OpCompositeConstruct %v2float %38 %38
%40 = OpCompositeExtract %float %39 0
%41 = OpCompositeExtract %float %39 1
%42 = OpCompositeConstruct %v4float %40 %41 %float_0 %float_1
OpStore %v %42
%43 = OpAccessChain %_ptr_Uniform_float %10 %int_0
%44 = OpLoad %float %43
%45 = OpCompositeConstruct %v4float %float_0 %44 %float_1 %float_0
OpStore %v %45
%46 = OpAccessChain %_ptr_Uniform_float %10 %int_0
%47 = OpLoad %float %46
%48 = OpAccessChain %_ptr_Uniform_float %10 %int_0
%49 = OpLoad %float %48
%50 = OpCompositeConstruct %v4float %float_0 %47 %float_0 %49
OpStore %v %50
%51 = OpLoad %v4float %v
OpReturnValue %51
OpFunctionEnd

View File

@ -1,9 +1,11 @@
out vec4 sk_FragColor;
void main() {
float x = sqrt(4.0);
sk_FragColor = vec4(vec2(x), 0.0, 1.0);
sk_FragColor = vec4(vec2(sqrt(4.0)), 0.0, 1.0);
sk_FragColor = vec4(0.0, sqrt(4.0), 0.0, 1.0);
sk_FragColor = vec3(vec2(sqrt(4.0)), 0.0).zxzy;
uniform float unknownInput;
vec4 main() {
float x = unknownInput;
vec4 v = vec4(vec2(x), 0.0, 1.0);
v = vec4(vec2(unknownInput), 0.0, 1.0);
v = vec4(0.0, unknownInput, 1.0, 0.0);
v = vec4(0.0, unknownInput, 0.0, unknownInput);
return v;
}

View File

@ -1,18 +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 x = sqrt(4.0);
_out.sk_FragColor = float4(float2(x), 0.0, 1.0);
_out.sk_FragColor = float4(float2(sqrt(4.0)), 0.0, 1.0);
_out.sk_FragColor = float4(0.0, sqrt(4.0), 0.0, 1.0);
_out.sk_FragColor = float3(float2(sqrt(4.0)), 0.0).zxzy;
float x = _uniforms.unknownInput;
float4 v = float4(float2(x), 0.0, 1.0);
v = float4(float2(_uniforms.unknownInput), 0.0, 1.0);
v = float4(0.0, _uniforms.unknownInput, 1.0, 0.0);
v = float4(0.0, _uniforms.unknownInput, 0.0, _uniforms.unknownInput);
_out.sk_FragColor = v;
return _out;
}