1*c8dee2aaSAndroid Build Coastguard Worker#include <metal_stdlib> 2*c8dee2aaSAndroid Build Coastguard Worker#include <simd/simd.h> 3*c8dee2aaSAndroid Build Coastguard Worker#ifdef __clang__ 4*c8dee2aaSAndroid Build Coastguard Worker#pragma clang diagnostic ignored "-Wall" 5*c8dee2aaSAndroid Build Coastguard Worker#endif 6*c8dee2aaSAndroid Build Coastguard Workerusing namespace metal; 7*c8dee2aaSAndroid Build Coastguard Workerstruct Uniforms { 8*c8dee2aaSAndroid Build Coastguard Worker half4 colorGreen; 9*c8dee2aaSAndroid Build Coastguard Worker half4 colorRed; 10*c8dee2aaSAndroid Build Coastguard Worker half4 colorWhite; 11*c8dee2aaSAndroid Build Coastguard Worker}; 12*c8dee2aaSAndroid Build Coastguard Workerstruct Inputs { 13*c8dee2aaSAndroid Build Coastguard Worker}; 14*c8dee2aaSAndroid Build Coastguard Workerstruct Outputs { 15*c8dee2aaSAndroid Build Coastguard Worker half4 sk_FragColor [[color(0)]]; 16*c8dee2aaSAndroid Build Coastguard Worker}; 17*c8dee2aaSAndroid Build Coastguard Workervoid out_half_vh(Uniforms _uniforms, thread half& v) { 18*c8dee2aaSAndroid Build Coastguard Worker v = _uniforms.colorWhite.x; 19*c8dee2aaSAndroid Build Coastguard Worker} 20*c8dee2aaSAndroid Build Coastguard Workervoid out_half2_vh2(Uniforms _uniforms, thread half2& v) { 21*c8dee2aaSAndroid Build Coastguard Worker v = half2(_uniforms.colorWhite.y); 22*c8dee2aaSAndroid Build Coastguard Worker} 23*c8dee2aaSAndroid Build Coastguard Workervoid out_half3_vh3(Uniforms _uniforms, thread half3& v) { 24*c8dee2aaSAndroid Build Coastguard Worker v = half3(_uniforms.colorWhite.z); 25*c8dee2aaSAndroid Build Coastguard Worker} 26*c8dee2aaSAndroid Build Coastguard Workervoid out_half4_vh4(Uniforms _uniforms, thread half4& v) { 27*c8dee2aaSAndroid Build Coastguard Worker v = half4(_uniforms.colorWhite.w); 28*c8dee2aaSAndroid Build Coastguard Worker} 29*c8dee2aaSAndroid Build Coastguard Workervoid out_half2x2_vh22(Uniforms _uniforms, thread half2x2& v) { 30*c8dee2aaSAndroid Build Coastguard Worker v = half2x2(_uniforms.colorWhite.x); 31*c8dee2aaSAndroid Build Coastguard Worker} 32*c8dee2aaSAndroid Build Coastguard Workervoid out_half3x3_vh33(Uniforms _uniforms, thread half3x3& v) { 33*c8dee2aaSAndroid Build Coastguard Worker v = half3x3(_uniforms.colorWhite.y); 34*c8dee2aaSAndroid Build Coastguard Worker} 35*c8dee2aaSAndroid Build Coastguard Workervoid out_half4x4_vh44(Uniforms _uniforms, thread half4x4& v) { 36*c8dee2aaSAndroid Build Coastguard Worker v = half4x4(_uniforms.colorWhite.z); 37*c8dee2aaSAndroid Build Coastguard Worker} 38*c8dee2aaSAndroid Build Coastguard Workervoid out_int_vi(Uniforms _uniforms, thread int& v) { 39*c8dee2aaSAndroid Build Coastguard Worker v = int(_uniforms.colorWhite.x); 40*c8dee2aaSAndroid Build Coastguard Worker} 41*c8dee2aaSAndroid Build Coastguard Workervoid out_int2_vi2(Uniforms _uniforms, thread int2& v) { 42*c8dee2aaSAndroid Build Coastguard Worker v = int2(int(_uniforms.colorWhite.y)); 43*c8dee2aaSAndroid Build Coastguard Worker} 44*c8dee2aaSAndroid Build Coastguard Workervoid out_int3_vi3(Uniforms _uniforms, thread int3& v) { 45*c8dee2aaSAndroid Build Coastguard Worker v = int3(int(_uniforms.colorWhite.z)); 46*c8dee2aaSAndroid Build Coastguard Worker} 47*c8dee2aaSAndroid Build Coastguard Workervoid out_int4_vi4(Uniforms _uniforms, thread int4& v) { 48*c8dee2aaSAndroid Build Coastguard Worker v = int4(int(_uniforms.colorWhite.w)); 49*c8dee2aaSAndroid Build Coastguard Worker} 50*c8dee2aaSAndroid Build Coastguard Workervoid out_float_vf(Uniforms _uniforms, thread float& v) { 51*c8dee2aaSAndroid Build Coastguard Worker v = float(_uniforms.colorWhite.x); 52*c8dee2aaSAndroid Build Coastguard Worker} 53*c8dee2aaSAndroid Build Coastguard Workervoid out_float2_vf2(Uniforms _uniforms, thread float2& v) { 54*c8dee2aaSAndroid Build Coastguard Worker v = float2(float(_uniforms.colorWhite.y)); 55*c8dee2aaSAndroid Build Coastguard Worker} 56*c8dee2aaSAndroid Build Coastguard Workervoid out_float3_vf3(Uniforms _uniforms, thread float3& v) { 57*c8dee2aaSAndroid Build Coastguard Worker v = float3(float(_uniforms.colorWhite.z)); 58*c8dee2aaSAndroid Build Coastguard Worker} 59*c8dee2aaSAndroid Build Coastguard Workervoid out_float4_vf4(Uniforms _uniforms, thread float4& v) { 60*c8dee2aaSAndroid Build Coastguard Worker v = float4(float(_uniforms.colorWhite.w)); 61*c8dee2aaSAndroid Build Coastguard Worker} 62*c8dee2aaSAndroid Build Coastguard Workervoid out_float2x2_vf22(Uniforms _uniforms, thread float2x2& v) { 63*c8dee2aaSAndroid Build Coastguard Worker v = float2x2(float(_uniforms.colorWhite.x)); 64*c8dee2aaSAndroid Build Coastguard Worker} 65*c8dee2aaSAndroid Build Coastguard Workervoid out_float3x3_vf33(Uniforms _uniforms, thread float3x3& v) { 66*c8dee2aaSAndroid Build Coastguard Worker v = float3x3(float(_uniforms.colorWhite.y)); 67*c8dee2aaSAndroid Build Coastguard Worker} 68*c8dee2aaSAndroid Build Coastguard Workervoid out_float4x4_vf44(Uniforms _uniforms, thread float4x4& v) { 69*c8dee2aaSAndroid Build Coastguard Worker v = float4x4(float(_uniforms.colorWhite.z)); 70*c8dee2aaSAndroid Build Coastguard Worker} 71*c8dee2aaSAndroid Build Coastguard Workervoid out_bool_vb(Uniforms _uniforms, thread bool& v) { 72*c8dee2aaSAndroid Build Coastguard Worker v = bool(_uniforms.colorWhite.x); 73*c8dee2aaSAndroid Build Coastguard Worker} 74*c8dee2aaSAndroid Build Coastguard Workervoid out_bool2_vb2(Uniforms _uniforms, thread bool2& v) { 75*c8dee2aaSAndroid Build Coastguard Worker v = bool2(bool(_uniforms.colorWhite.y)); 76*c8dee2aaSAndroid Build Coastguard Worker} 77*c8dee2aaSAndroid Build Coastguard Workervoid out_bool3_vb3(Uniforms _uniforms, thread bool3& v) { 78*c8dee2aaSAndroid Build Coastguard Worker v = bool3(bool(_uniforms.colorWhite.z)); 79*c8dee2aaSAndroid Build Coastguard Worker} 80*c8dee2aaSAndroid Build Coastguard Workervoid out_bool4_vb4(Uniforms _uniforms, thread bool4& v) { 81*c8dee2aaSAndroid Build Coastguard Worker v = bool4(bool(_uniforms.colorWhite.w)); 82*c8dee2aaSAndroid Build Coastguard Worker} 83*c8dee2aaSAndroid Build Coastguard Workerfragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) { 84*c8dee2aaSAndroid Build Coastguard Worker Outputs _out; 85*c8dee2aaSAndroid Build Coastguard Worker (void)_out; 86*c8dee2aaSAndroid Build Coastguard Worker half _skTemp0; 87*c8dee2aaSAndroid Build Coastguard Worker half2 _skTemp1; 88*c8dee2aaSAndroid Build Coastguard Worker half3 _skTemp2; 89*c8dee2aaSAndroid Build Coastguard Worker half4 _skTemp3; 90*c8dee2aaSAndroid Build Coastguard Worker half _skTemp4; 91*c8dee2aaSAndroid Build Coastguard Worker half2 _skTemp5; 92*c8dee2aaSAndroid Build Coastguard Worker half4 _skTemp6; 93*c8dee2aaSAndroid Build Coastguard Worker half2x2 _skTemp7; 94*c8dee2aaSAndroid Build Coastguard Worker half3x3 _skTemp8; 95*c8dee2aaSAndroid Build Coastguard Worker half4x4 _skTemp9; 96*c8dee2aaSAndroid Build Coastguard Worker half3 _skTemp10; 97*c8dee2aaSAndroid Build Coastguard Worker half _skTemp11; 98*c8dee2aaSAndroid Build Coastguard Worker half _skTemp12; 99*c8dee2aaSAndroid Build Coastguard Worker int _skTemp13; 100*c8dee2aaSAndroid Build Coastguard Worker int2 _skTemp14; 101*c8dee2aaSAndroid Build Coastguard Worker int3 _skTemp15; 102*c8dee2aaSAndroid Build Coastguard Worker int4 _skTemp16; 103*c8dee2aaSAndroid Build Coastguard Worker int3 _skTemp17; 104*c8dee2aaSAndroid Build Coastguard Worker int _skTemp18; 105*c8dee2aaSAndroid Build Coastguard Worker float _skTemp19; 106*c8dee2aaSAndroid Build Coastguard Worker float2 _skTemp20; 107*c8dee2aaSAndroid Build Coastguard Worker float3 _skTemp21; 108*c8dee2aaSAndroid Build Coastguard Worker float4 _skTemp22; 109*c8dee2aaSAndroid Build Coastguard Worker float2 _skTemp23; 110*c8dee2aaSAndroid Build Coastguard Worker float _skTemp24; 111*c8dee2aaSAndroid Build Coastguard Worker float2x2 _skTemp25; 112*c8dee2aaSAndroid Build Coastguard Worker float3x3 _skTemp26; 113*c8dee2aaSAndroid Build Coastguard Worker float4x4 _skTemp27; 114*c8dee2aaSAndroid Build Coastguard Worker float _skTemp28; 115*c8dee2aaSAndroid Build Coastguard Worker bool _skTemp29; 116*c8dee2aaSAndroid Build Coastguard Worker bool2 _skTemp30; 117*c8dee2aaSAndroid Build Coastguard Worker bool3 _skTemp31; 118*c8dee2aaSAndroid Build Coastguard Worker bool4 _skTemp32; 119*c8dee2aaSAndroid Build Coastguard Worker bool2 _skTemp33; 120*c8dee2aaSAndroid Build Coastguard Worker bool _skTemp34; 121*c8dee2aaSAndroid Build Coastguard Worker half h; 122*c8dee2aaSAndroid Build Coastguard Worker ((out_half_vh(_uniforms, _skTemp0)), (h = _skTemp0)); 123*c8dee2aaSAndroid Build Coastguard Worker half2 h2; 124*c8dee2aaSAndroid Build Coastguard Worker ((out_half2_vh2(_uniforms, _skTemp1)), (h2 = _skTemp1)); 125*c8dee2aaSAndroid Build Coastguard Worker half3 h3; 126*c8dee2aaSAndroid Build Coastguard Worker ((out_half3_vh3(_uniforms, _skTemp2)), (h3 = _skTemp2)); 127*c8dee2aaSAndroid Build Coastguard Worker half4 h4; 128*c8dee2aaSAndroid Build Coastguard Worker ((out_half4_vh4(_uniforms, _skTemp3)), (h4 = _skTemp3)); 129*c8dee2aaSAndroid Build Coastguard Worker ((out_half_vh(_uniforms, _skTemp4)), (h3.y = _skTemp4)); 130*c8dee2aaSAndroid Build Coastguard Worker ((out_half2_vh2(_uniforms, _skTemp5)), (h3.xz = _skTemp5)); 131*c8dee2aaSAndroid Build Coastguard Worker ((out_half4_vh4(_uniforms, _skTemp6)), (h4.zwxy = _skTemp6)); 132*c8dee2aaSAndroid Build Coastguard Worker half2x2 h2x2; 133*c8dee2aaSAndroid Build Coastguard Worker ((out_half2x2_vh22(_uniforms, _skTemp7)), (h2x2 = _skTemp7)); 134*c8dee2aaSAndroid Build Coastguard Worker half3x3 h3x3; 135*c8dee2aaSAndroid Build Coastguard Worker ((out_half3x3_vh33(_uniforms, _skTemp8)), (h3x3 = _skTemp8)); 136*c8dee2aaSAndroid Build Coastguard Worker half4x4 h4x4; 137*c8dee2aaSAndroid Build Coastguard Worker ((out_half4x4_vh44(_uniforms, _skTemp9)), (h4x4 = _skTemp9)); 138*c8dee2aaSAndroid Build Coastguard Worker ((out_half3_vh3(_uniforms, _skTemp10)), (h3x3[1] = _skTemp10)); 139*c8dee2aaSAndroid Build Coastguard Worker ((out_half_vh(_uniforms, _skTemp11)), (h4x4[3].w = _skTemp11)); 140*c8dee2aaSAndroid Build Coastguard Worker ((out_half_vh(_uniforms, _skTemp12)), (h2x2[0].x = _skTemp12)); 141*c8dee2aaSAndroid Build Coastguard Worker int i; 142*c8dee2aaSAndroid Build Coastguard Worker ((out_int_vi(_uniforms, _skTemp13)), (i = _skTemp13)); 143*c8dee2aaSAndroid Build Coastguard Worker int2 i2; 144*c8dee2aaSAndroid Build Coastguard Worker ((out_int2_vi2(_uniforms, _skTemp14)), (i2 = _skTemp14)); 145*c8dee2aaSAndroid Build Coastguard Worker int3 i3; 146*c8dee2aaSAndroid Build Coastguard Worker ((out_int3_vi3(_uniforms, _skTemp15)), (i3 = _skTemp15)); 147*c8dee2aaSAndroid Build Coastguard Worker int4 i4; 148*c8dee2aaSAndroid Build Coastguard Worker ((out_int4_vi4(_uniforms, _skTemp16)), (i4 = _skTemp16)); 149*c8dee2aaSAndroid Build Coastguard Worker ((out_int3_vi3(_uniforms, _skTemp17)), (i4.xyz = _skTemp17)); 150*c8dee2aaSAndroid Build Coastguard Worker ((out_int_vi(_uniforms, _skTemp18)), (i2.y = _skTemp18)); 151*c8dee2aaSAndroid Build Coastguard Worker float f; 152*c8dee2aaSAndroid Build Coastguard Worker ((out_float_vf(_uniforms, _skTemp19)), (f = _skTemp19)); 153*c8dee2aaSAndroid Build Coastguard Worker float2 f2; 154*c8dee2aaSAndroid Build Coastguard Worker ((out_float2_vf2(_uniforms, _skTemp20)), (f2 = _skTemp20)); 155*c8dee2aaSAndroid Build Coastguard Worker float3 f3; 156*c8dee2aaSAndroid Build Coastguard Worker ((out_float3_vf3(_uniforms, _skTemp21)), (f3 = _skTemp21)); 157*c8dee2aaSAndroid Build Coastguard Worker float4 f4; 158*c8dee2aaSAndroid Build Coastguard Worker ((out_float4_vf4(_uniforms, _skTemp22)), (f4 = _skTemp22)); 159*c8dee2aaSAndroid Build Coastguard Worker ((out_float2_vf2(_uniforms, _skTemp23)), (f3.xy = _skTemp23)); 160*c8dee2aaSAndroid Build Coastguard Worker ((out_float_vf(_uniforms, _skTemp24)), (f2.x = _skTemp24)); 161*c8dee2aaSAndroid Build Coastguard Worker float2x2 f2x2; 162*c8dee2aaSAndroid Build Coastguard Worker ((out_float2x2_vf22(_uniforms, _skTemp25)), (f2x2 = _skTemp25)); 163*c8dee2aaSAndroid Build Coastguard Worker float3x3 f3x3; 164*c8dee2aaSAndroid Build Coastguard Worker ((out_float3x3_vf33(_uniforms, _skTemp26)), (f3x3 = _skTemp26)); 165*c8dee2aaSAndroid Build Coastguard Worker float4x4 f4x4; 166*c8dee2aaSAndroid Build Coastguard Worker ((out_float4x4_vf44(_uniforms, _skTemp27)), (f4x4 = _skTemp27)); 167*c8dee2aaSAndroid Build Coastguard Worker ((out_float_vf(_uniforms, _skTemp28)), (f2x2[0].x = _skTemp28)); 168*c8dee2aaSAndroid Build Coastguard Worker bool b; 169*c8dee2aaSAndroid Build Coastguard Worker ((out_bool_vb(_uniforms, _skTemp29)), (b = _skTemp29)); 170*c8dee2aaSAndroid Build Coastguard Worker bool2 b2; 171*c8dee2aaSAndroid Build Coastguard Worker ((out_bool2_vb2(_uniforms, _skTemp30)), (b2 = _skTemp30)); 172*c8dee2aaSAndroid Build Coastguard Worker bool3 b3; 173*c8dee2aaSAndroid Build Coastguard Worker ((out_bool3_vb3(_uniforms, _skTemp31)), (b3 = _skTemp31)); 174*c8dee2aaSAndroid Build Coastguard Worker bool4 b4; 175*c8dee2aaSAndroid Build Coastguard Worker ((out_bool4_vb4(_uniforms, _skTemp32)), (b4 = _skTemp32)); 176*c8dee2aaSAndroid Build Coastguard Worker ((out_bool2_vb2(_uniforms, _skTemp33)), (b4.xw = _skTemp33)); 177*c8dee2aaSAndroid Build Coastguard Worker ((out_bool_vb(_uniforms, _skTemp34)), (b3.z = _skTemp34)); 178*c8dee2aaSAndroid Build Coastguard Worker bool ok = true; 179*c8dee2aaSAndroid Build Coastguard Worker ok = ok && 1.0h == (((((h * h2.x) * h3.x) * h4.x) * h2x2[0].x) * h3x3[0].x) * h4x4[0].x; 180*c8dee2aaSAndroid Build Coastguard Worker ok = ok && 1.0 == (((((f * f2.x) * f3.x) * f4.x) * f2x2[0].x) * f3x3[0].x) * f4x4[0].x; 181*c8dee2aaSAndroid Build Coastguard Worker ok = ok && 1 == ((i * i2.x) * i3.x) * i4.x; 182*c8dee2aaSAndroid Build Coastguard Worker ok = ok && (((b && b2.x) && b3.x) && b4.x); 183*c8dee2aaSAndroid Build Coastguard Worker _out.sk_FragColor = ok ? _uniforms.colorGreen : _uniforms.colorRed; 184*c8dee2aaSAndroid Build Coastguard Worker return _out; 185*c8dee2aaSAndroid Build Coastguard Worker} 186