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:
parent
75b7606c0f
commit
c2c1b0c460
@ -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",
|
||||
|
27
resources/sksl/shared/SwizzleByConstantIndex.sksl
Normal file
27
resources/sksl/shared/SwizzleByConstantIndex.sksl
Normal 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;
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -1,3 +1,5 @@
|
||||
void main() {
|
||||
sk_FragColor = sk_FragColor.BRTL;
|
||||
uniform half4 colorRed;
|
||||
|
||||
half4 main() {
|
||||
return colorRed.RBTL;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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")
|
||||
*/
|
||||
|
127
tests/sksl/shared/SwizzleByConstantIndex.asm.frag
Normal file
127
tests/sksl/shared/SwizzleByConstantIndex.asm.frag
Normal 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
|
15
tests/sksl/shared/SwizzleByConstantIndex.glsl
Normal file
15
tests/sksl/shared/SwizzleByConstantIndex.glsl
Normal 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;
|
||||
}
|
29
tests/sksl/shared/SwizzleByConstantIndex.metal
Normal file
29
tests/sksl/shared/SwizzleByConstantIndex.metal
Normal 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;
|
||||
}
|
@ -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
|
||||
|
@ -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;
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -1,5 +1,6 @@
|
||||
|
||||
out vec4 sk_FragColor;
|
||||
void main() {
|
||||
sk_FragColor = sk_FragColor.wzyx;
|
||||
uniform vec4 colorRed;
|
||||
vec4 main() {
|
||||
return colorRed.zwyx;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user