xref: /aosp_15_r20/external/skia/tests/sksl/shared/OutParams.metal (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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