1#include <metal_stdlib> 2#include <simd/simd.h> 3using namespace metal; 4struct Uniforms { 5 float4 colorGreen; 6 float4 colorRed; 7}; 8struct Inputs { 9}; 10struct Outputs { 11 float4 sk_FragColor [[color(0)]]; 12}; 13float _skOutParamHelper0_frexp(float _var0, thread int4& exp) { 14 int _var1; 15 float _skResult = frexp(_var0, _var1); 16 exp.x = _var1; 17 return _skResult; 18} 19float2 _skOutParamHelper1_frexp(float2 _var0, thread int4& exp) { 20 int2 _var1; 21 float2 _skResult = frexp(_var0, _var1); 22 exp.xy = _var1; 23 return _skResult; 24} 25float3 _skOutParamHelper2_frexp(float3 _var0, thread int4& exp) { 26 int3 _var1; 27 float3 _skResult = frexp(_var0, _var1); 28 exp.xyz = _var1; 29 return _skResult; 30} 31float4 _skOutParamHelper3_frexp(float4 _var0, thread int4& exp) { 32 int4 _var1; 33 float4 _skResult = frexp(_var0, _var1); 34 exp = _var1; 35 return _skResult; 36} 37 38fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) { 39 Outputs _out; 40 (void)_out; 41 float4 value = _uniforms.colorGreen.yyyy * 6.0; 42 int4 exp; 43 float4 result; 44 bool4 ok; 45 result.x = _skOutParamHelper0_frexp(value.x, exp); 46 ok.x = result.x == 0.75 && exp.x == 3; 47 result.xy = _skOutParamHelper1_frexp(value.xy, exp); 48 ok.y = result.y == 0.75 && exp.y == 3; 49 result.xyz = _skOutParamHelper2_frexp(value.xyz, exp); 50 ok.z = result.z == 0.75 && exp.z == 3; 51 result = _skOutParamHelper3_frexp(value, exp); 52 ok.w = result.w == 0.75 && exp.w == 3; 53 _out.sk_FragColor = all(ok) ? _uniforms.colorGreen : _uniforms.colorRed; 54 return _out; 55} 56