xref: /aosp_15_r20/external/skia/tests/sksl/intrinsics/Inverse.hlsl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Workercbuffer _UniformBuffer : register(b0, space0)
2*c8dee2aaSAndroid Build Coastguard Worker{
3*c8dee2aaSAndroid Build Coastguard Worker    float4 _7_colorGreen : packoffset(c0);
4*c8dee2aaSAndroid Build Coastguard Worker    float4 _7_colorRed : packoffset(c1);
5*c8dee2aaSAndroid Build Coastguard Worker};
6*c8dee2aaSAndroid Build Coastguard Worker
7*c8dee2aaSAndroid Build Coastguard Worker
8*c8dee2aaSAndroid Build Coastguard Workerstatic float4 sk_FragColor;
9*c8dee2aaSAndroid Build Coastguard Worker
10*c8dee2aaSAndroid Build Coastguard Workerstruct SPIRV_Cross_Output
11*c8dee2aaSAndroid Build Coastguard Worker{
12*c8dee2aaSAndroid Build Coastguard Worker    float4 sk_FragColor : SV_Target0;
13*c8dee2aaSAndroid Build Coastguard Worker};
14*c8dee2aaSAndroid Build Coastguard Worker
15*c8dee2aaSAndroid Build Coastguard Worker// Returns the inverse of a matrix, by using the algorithm of calculating the classical
16*c8dee2aaSAndroid Build Coastguard Worker// adjoint and dividing by the determinant. The contents of the matrix are changed.
17*c8dee2aaSAndroid Build Coastguard Workerfloat2x2 spvInverse(float2x2 m)
18*c8dee2aaSAndroid Build Coastguard Worker{
19*c8dee2aaSAndroid Build Coastguard Worker    float2x2 adj;	// The adjoint matrix (inverse after dividing by determinant)
20*c8dee2aaSAndroid Build Coastguard Worker
21*c8dee2aaSAndroid Build Coastguard Worker    // Create the transpose of the cofactors, as the classical adjoint of the matrix.
22*c8dee2aaSAndroid Build Coastguard Worker    adj[0][0] =  m[1][1];
23*c8dee2aaSAndroid Build Coastguard Worker    adj[0][1] = -m[0][1];
24*c8dee2aaSAndroid Build Coastguard Worker
25*c8dee2aaSAndroid Build Coastguard Worker    adj[1][0] = -m[1][0];
26*c8dee2aaSAndroid Build Coastguard Worker    adj[1][1] =  m[0][0];
27*c8dee2aaSAndroid Build Coastguard Worker
28*c8dee2aaSAndroid Build Coastguard Worker    // Calculate the determinant as a combination of the cofactors of the first row.
29*c8dee2aaSAndroid Build Coastguard Worker    float det = (adj[0][0] * m[0][0]) + (adj[0][1] * m[1][0]);
30*c8dee2aaSAndroid Build Coastguard Worker
31*c8dee2aaSAndroid Build Coastguard Worker    // Divide the classical adjoint matrix by the determinant.
32*c8dee2aaSAndroid Build Coastguard Worker    // If determinant is zero, matrix is not invertable, so leave it unchanged.
33*c8dee2aaSAndroid Build Coastguard Worker    return (det != 0.0f) ? (adj * (1.0f / det)) : m;
34*c8dee2aaSAndroid Build Coastguard Worker}
35*c8dee2aaSAndroid Build Coastguard Worker
36*c8dee2aaSAndroid Build Coastguard Worker// Returns the determinant of a 2x2 matrix.
37*c8dee2aaSAndroid Build Coastguard Workerfloat spvDet2x2(float a1, float a2, float b1, float b2)
38*c8dee2aaSAndroid Build Coastguard Worker{
39*c8dee2aaSAndroid Build Coastguard Worker    return a1 * b2 - b1 * a2;
40*c8dee2aaSAndroid Build Coastguard Worker}
41*c8dee2aaSAndroid Build Coastguard Worker
42*c8dee2aaSAndroid Build Coastguard Worker// Returns the inverse of a matrix, by using the algorithm of calculating the classical
43*c8dee2aaSAndroid Build Coastguard Worker// adjoint and dividing by the determinant. The contents of the matrix are changed.
44*c8dee2aaSAndroid Build Coastguard Workerfloat3x3 spvInverse(float3x3 m)
45*c8dee2aaSAndroid Build Coastguard Worker{
46*c8dee2aaSAndroid Build Coastguard Worker    float3x3 adj;	// The adjoint matrix (inverse after dividing by determinant)
47*c8dee2aaSAndroid Build Coastguard Worker
48*c8dee2aaSAndroid Build Coastguard Worker    // Create the transpose of the cofactors, as the classical adjoint of the matrix.
49*c8dee2aaSAndroid Build Coastguard Worker    adj[0][0] =  spvDet2x2(m[1][1], m[1][2], m[2][1], m[2][2]);
50*c8dee2aaSAndroid Build Coastguard Worker    adj[0][1] = -spvDet2x2(m[0][1], m[0][2], m[2][1], m[2][2]);
51*c8dee2aaSAndroid Build Coastguard Worker    adj[0][2] =  spvDet2x2(m[0][1], m[0][2], m[1][1], m[1][2]);
52*c8dee2aaSAndroid Build Coastguard Worker
53*c8dee2aaSAndroid Build Coastguard Worker    adj[1][0] = -spvDet2x2(m[1][0], m[1][2], m[2][0], m[2][2]);
54*c8dee2aaSAndroid Build Coastguard Worker    adj[1][1] =  spvDet2x2(m[0][0], m[0][2], m[2][0], m[2][2]);
55*c8dee2aaSAndroid Build Coastguard Worker    adj[1][2] = -spvDet2x2(m[0][0], m[0][2], m[1][0], m[1][2]);
56*c8dee2aaSAndroid Build Coastguard Worker
57*c8dee2aaSAndroid Build Coastguard Worker    adj[2][0] =  spvDet2x2(m[1][0], m[1][1], m[2][0], m[2][1]);
58*c8dee2aaSAndroid Build Coastguard Worker    adj[2][1] = -spvDet2x2(m[0][0], m[0][1], m[2][0], m[2][1]);
59*c8dee2aaSAndroid Build Coastguard Worker    adj[2][2] =  spvDet2x2(m[0][0], m[0][1], m[1][0], m[1][1]);
60*c8dee2aaSAndroid Build Coastguard Worker
61*c8dee2aaSAndroid Build Coastguard Worker    // Calculate the determinant as a combination of the cofactors of the first row.
62*c8dee2aaSAndroid Build Coastguard Worker    float det = (adj[0][0] * m[0][0]) + (adj[0][1] * m[1][0]) + (adj[0][2] * m[2][0]);
63*c8dee2aaSAndroid Build Coastguard Worker
64*c8dee2aaSAndroid Build Coastguard Worker    // Divide the classical adjoint matrix by the determinant.
65*c8dee2aaSAndroid Build Coastguard Worker    // If determinant is zero, matrix is not invertable, so leave it unchanged.
66*c8dee2aaSAndroid Build Coastguard Worker    return (det != 0.0f) ? (adj * (1.0f / det)) : m;
67*c8dee2aaSAndroid Build Coastguard Worker}
68*c8dee2aaSAndroid Build Coastguard Worker
69*c8dee2aaSAndroid Build Coastguard Worker// Returns the determinant of a 3x3 matrix.
70*c8dee2aaSAndroid Build Coastguard Workerfloat spvDet3x3(float a1, float a2, float a3, float b1, float b2, float b3, float c1, float c2, float c3)
71*c8dee2aaSAndroid Build Coastguard Worker{
72*c8dee2aaSAndroid Build Coastguard Worker    return a1 * spvDet2x2(b2, b3, c2, c3) - b1 * spvDet2x2(a2, a3, c2, c3) + c1 * spvDet2x2(a2, a3, b2, b3);
73*c8dee2aaSAndroid Build Coastguard Worker}
74*c8dee2aaSAndroid Build Coastguard Worker
75*c8dee2aaSAndroid Build Coastguard Worker// Returns the inverse of a matrix, by using the algorithm of calculating the classical
76*c8dee2aaSAndroid Build Coastguard Worker// adjoint and dividing by the determinant. The contents of the matrix are changed.
77*c8dee2aaSAndroid Build Coastguard Workerfloat4x4 spvInverse(float4x4 m)
78*c8dee2aaSAndroid Build Coastguard Worker{
79*c8dee2aaSAndroid Build Coastguard Worker    float4x4 adj;	// The adjoint matrix (inverse after dividing by determinant)
80*c8dee2aaSAndroid Build Coastguard Worker
81*c8dee2aaSAndroid Build Coastguard Worker    // Create the transpose of the cofactors, as the classical adjoint of the matrix.
82*c8dee2aaSAndroid Build Coastguard Worker    adj[0][0] =  spvDet3x3(m[1][1], m[1][2], m[1][3], m[2][1], m[2][2], m[2][3], m[3][1], m[3][2], m[3][3]);
83*c8dee2aaSAndroid Build Coastguard Worker    adj[0][1] = -spvDet3x3(m[0][1], m[0][2], m[0][3], m[2][1], m[2][2], m[2][3], m[3][1], m[3][2], m[3][3]);
84*c8dee2aaSAndroid Build Coastguard Worker    adj[0][2] =  spvDet3x3(m[0][1], m[0][2], m[0][3], m[1][1], m[1][2], m[1][3], m[3][1], m[3][2], m[3][3]);
85*c8dee2aaSAndroid Build Coastguard Worker    adj[0][3] = -spvDet3x3(m[0][1], m[0][2], m[0][3], m[1][1], m[1][2], m[1][3], m[2][1], m[2][2], m[2][3]);
86*c8dee2aaSAndroid Build Coastguard Worker
87*c8dee2aaSAndroid Build Coastguard Worker    adj[1][0] = -spvDet3x3(m[1][0], m[1][2], m[1][3], m[2][0], m[2][2], m[2][3], m[3][0], m[3][2], m[3][3]);
88*c8dee2aaSAndroid Build Coastguard Worker    adj[1][1] =  spvDet3x3(m[0][0], m[0][2], m[0][3], m[2][0], m[2][2], m[2][3], m[3][0], m[3][2], m[3][3]);
89*c8dee2aaSAndroid Build Coastguard Worker    adj[1][2] = -spvDet3x3(m[0][0], m[0][2], m[0][3], m[1][0], m[1][2], m[1][3], m[3][0], m[3][2], m[3][3]);
90*c8dee2aaSAndroid Build Coastguard Worker    adj[1][3] =  spvDet3x3(m[0][0], m[0][2], m[0][3], m[1][0], m[1][2], m[1][3], m[2][0], m[2][2], m[2][3]);
91*c8dee2aaSAndroid Build Coastguard Worker
92*c8dee2aaSAndroid Build Coastguard Worker    adj[2][0] =  spvDet3x3(m[1][0], m[1][1], m[1][3], m[2][0], m[2][1], m[2][3], m[3][0], m[3][1], m[3][3]);
93*c8dee2aaSAndroid Build Coastguard Worker    adj[2][1] = -spvDet3x3(m[0][0], m[0][1], m[0][3], m[2][0], m[2][1], m[2][3], m[3][0], m[3][1], m[3][3]);
94*c8dee2aaSAndroid Build Coastguard Worker    adj[2][2] =  spvDet3x3(m[0][0], m[0][1], m[0][3], m[1][0], m[1][1], m[1][3], m[3][0], m[3][1], m[3][3]);
95*c8dee2aaSAndroid Build Coastguard Worker    adj[2][3] = -spvDet3x3(m[0][0], m[0][1], m[0][3], m[1][0], m[1][1], m[1][3], m[2][0], m[2][1], m[2][3]);
96*c8dee2aaSAndroid Build Coastguard Worker
97*c8dee2aaSAndroid Build Coastguard Worker    adj[3][0] = -spvDet3x3(m[1][0], m[1][1], m[1][2], m[2][0], m[2][1], m[2][2], m[3][0], m[3][1], m[3][2]);
98*c8dee2aaSAndroid Build Coastguard Worker    adj[3][1] =  spvDet3x3(m[0][0], m[0][1], m[0][2], m[2][0], m[2][1], m[2][2], m[3][0], m[3][1], m[3][2]);
99*c8dee2aaSAndroid Build Coastguard Worker    adj[3][2] = -spvDet3x3(m[0][0], m[0][1], m[0][2], m[1][0], m[1][1], m[1][2], m[3][0], m[3][1], m[3][2]);
100*c8dee2aaSAndroid Build Coastguard Worker    adj[3][3] =  spvDet3x3(m[0][0], m[0][1], m[0][2], m[1][0], m[1][1], m[1][2], m[2][0], m[2][1], m[2][2]);
101*c8dee2aaSAndroid Build Coastguard Worker
102*c8dee2aaSAndroid Build Coastguard Worker    // Calculate the determinant as a combination of the cofactors of the first row.
103*c8dee2aaSAndroid Build Coastguard Worker    float det = (adj[0][0] * m[0][0]) + (adj[0][1] * m[1][0]) + (adj[0][2] * m[2][0]) + (adj[0][3] * m[3][0]);
104*c8dee2aaSAndroid Build Coastguard Worker
105*c8dee2aaSAndroid Build Coastguard Worker    // Divide the classical adjoint matrix by the determinant.
106*c8dee2aaSAndroid Build Coastguard Worker    // If determinant is zero, matrix is not invertable, so leave it unchanged.
107*c8dee2aaSAndroid Build Coastguard Worker    return (det != 0.0f) ? (adj * (1.0f / det)) : m;
108*c8dee2aaSAndroid Build Coastguard Worker}
109*c8dee2aaSAndroid Build Coastguard Worker
110*c8dee2aaSAndroid Build Coastguard Workerfloat4 main(float2 _21)
111*c8dee2aaSAndroid Build Coastguard Worker{
112*c8dee2aaSAndroid Build Coastguard Worker    float2x2 matrix2x2 = float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f));
113*c8dee2aaSAndroid Build Coastguard Worker    float2x2 inv2x2 = float2x2(float2(-2.0f, 1.0f), float2(1.5f, -0.5f));
114*c8dee2aaSAndroid Build Coastguard Worker    float3x3 inv3x3 = float3x3(float3(-24.0f, 18.0f, 5.0f), float3(20.0f, -15.0f, -4.0f), float3(-5.0f, 4.0f, 1.0f));
115*c8dee2aaSAndroid Build Coastguard Worker    float4x4 inv4x4 = float4x4(float4(-2.0f, -0.5f, 1.0f, 0.5f), float4(1.0f, 0.5f, 0.0f, -0.5f), float4(-8.0f, -1.0f, 2.0f, 2.0f), float4(3.0f, 0.5f, -1.0f, -0.5f));
116*c8dee2aaSAndroid Build Coastguard Worker    float Zero = _7_colorGreen.z;
117*c8dee2aaSAndroid Build Coastguard Worker    bool _93 = false;
118*c8dee2aaSAndroid Build Coastguard Worker    if (all(bool2(float2(-2.0f, 1.0f).x == float2(-2.0f, 1.0f).x, float2(-2.0f, 1.0f).y == float2(-2.0f, 1.0f).y)) && all(bool2(float2(1.5f, -0.5f).x == float2(1.5f, -0.5f).x, float2(1.5f, -0.5f).y == float2(1.5f, -0.5f).y)))
119*c8dee2aaSAndroid Build Coastguard Worker    {
120*c8dee2aaSAndroid Build Coastguard Worker        _93 = (all(bool3(float3(-24.0f, 18.0f, 5.0f).x == float3(-24.0f, 18.0f, 5.0f).x, float3(-24.0f, 18.0f, 5.0f).y == float3(-24.0f, 18.0f, 5.0f).y, float3(-24.0f, 18.0f, 5.0f).z == float3(-24.0f, 18.0f, 5.0f).z)) && all(bool3(float3(20.0f, -15.0f, -4.0f).x == float3(20.0f, -15.0f, -4.0f).x, float3(20.0f, -15.0f, -4.0f).y == float3(20.0f, -15.0f, -4.0f).y, float3(20.0f, -15.0f, -4.0f).z == float3(20.0f, -15.0f, -4.0f).z))) && all(bool3(float3(-5.0f, 4.0f, 1.0f).x == float3(-5.0f, 4.0f, 1.0f).x, float3(-5.0f, 4.0f, 1.0f).y == float3(-5.0f, 4.0f, 1.0f).y, float3(-5.0f, 4.0f, 1.0f).z == float3(-5.0f, 4.0f, 1.0f).z));
121*c8dee2aaSAndroid Build Coastguard Worker    }
122*c8dee2aaSAndroid Build Coastguard Worker    else
123*c8dee2aaSAndroid Build Coastguard Worker    {
124*c8dee2aaSAndroid Build Coastguard Worker        _93 = false;
125*c8dee2aaSAndroid Build Coastguard Worker    }
126*c8dee2aaSAndroid Build Coastguard Worker    bool _108 = false;
127*c8dee2aaSAndroid Build Coastguard Worker    if (_93)
128*c8dee2aaSAndroid Build Coastguard Worker    {
129*c8dee2aaSAndroid Build Coastguard Worker        _108 = ((all(bool4(float4(-2.0f, -0.5f, 1.0f, 0.5f).x == float4(-2.0f, -0.5f, 1.0f, 0.5f).x, float4(-2.0f, -0.5f, 1.0f, 0.5f).y == float4(-2.0f, -0.5f, 1.0f, 0.5f).y, float4(-2.0f, -0.5f, 1.0f, 0.5f).z == float4(-2.0f, -0.5f, 1.0f, 0.5f).z, float4(-2.0f, -0.5f, 1.0f, 0.5f).w == float4(-2.0f, -0.5f, 1.0f, 0.5f).w)) && all(bool4(float4(1.0f, 0.5f, 0.0f, -0.5f).x == float4(1.0f, 0.5f, 0.0f, -0.5f).x, float4(1.0f, 0.5f, 0.0f, -0.5f).y == float4(1.0f, 0.5f, 0.0f, -0.5f).y, float4(1.0f, 0.5f, 0.0f, -0.5f).z == float4(1.0f, 0.5f, 0.0f, -0.5f).z, float4(1.0f, 0.5f, 0.0f, -0.5f).w == float4(1.0f, 0.5f, 0.0f, -0.5f).w))) && all(bool4(float4(-8.0f, -1.0f, 2.0f, 2.0f).x == float4(-8.0f, -1.0f, 2.0f, 2.0f).x, float4(-8.0f, -1.0f, 2.0f, 2.0f).y == float4(-8.0f, -1.0f, 2.0f, 2.0f).y, float4(-8.0f, -1.0f, 2.0f, 2.0f).z == float4(-8.0f, -1.0f, 2.0f, 2.0f).z, float4(-8.0f, -1.0f, 2.0f, 2.0f).w == float4(-8.0f, -1.0f, 2.0f, 2.0f).w))) && all(bool4(float4(3.0f, 0.5f, -1.0f, -0.5f).x == float4(3.0f, 0.5f, -1.0f, -0.5f).x, float4(3.0f, 0.5f, -1.0f, -0.5f).y == float4(3.0f, 0.5f, -1.0f, -0.5f).y, float4(3.0f, 0.5f, -1.0f, -0.5f).z == float4(3.0f, 0.5f, -1.0f, -0.5f).z, float4(3.0f, 0.5f, -1.0f, -0.5f).w == float4(3.0f, 0.5f, -1.0f, -0.5f).w));
130*c8dee2aaSAndroid Build Coastguard Worker    }
131*c8dee2aaSAndroid Build Coastguard Worker    else
132*c8dee2aaSAndroid Build Coastguard Worker    {
133*c8dee2aaSAndroid Build Coastguard Worker        _108 = false;
134*c8dee2aaSAndroid Build Coastguard Worker    }
135*c8dee2aaSAndroid Build Coastguard Worker    bool _131 = false;
136*c8dee2aaSAndroid Build Coastguard Worker    if (_108)
137*c8dee2aaSAndroid Build Coastguard Worker    {
138*c8dee2aaSAndroid Build Coastguard Worker        float3x3 _111 = spvInverse(float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f)));
139*c8dee2aaSAndroid Build Coastguard Worker        float3 _120 = _111[0];
140*c8dee2aaSAndroid Build Coastguard Worker        float3 _123 = _111[1];
141*c8dee2aaSAndroid Build Coastguard Worker        float3 _127 = _111[2];
142*c8dee2aaSAndroid Build Coastguard Worker        _131 = (any(bool3(_120.x != float3(-24.0f, 18.0f, 5.0f).x, _120.y != float3(-24.0f, 18.0f, 5.0f).y, _120.z != float3(-24.0f, 18.0f, 5.0f).z)) || any(bool3(_123.x != float3(20.0f, -15.0f, -4.0f).x, _123.y != float3(20.0f, -15.0f, -4.0f).y, _123.z != float3(20.0f, -15.0f, -4.0f).z))) || any(bool3(_127.x != float3(-5.0f, 4.0f, 1.0f).x, _127.y != float3(-5.0f, 4.0f, 1.0f).y, _127.z != float3(-5.0f, 4.0f, 1.0f).z));
143*c8dee2aaSAndroid Build Coastguard Worker    }
144*c8dee2aaSAndroid Build Coastguard Worker    else
145*c8dee2aaSAndroid Build Coastguard Worker    {
146*c8dee2aaSAndroid Build Coastguard Worker        _131 = false;
147*c8dee2aaSAndroid Build Coastguard Worker    }
148*c8dee2aaSAndroid Build Coastguard Worker    bool _147 = false;
149*c8dee2aaSAndroid Build Coastguard Worker    if (_131)
150*c8dee2aaSAndroid Build Coastguard Worker    {
151*c8dee2aaSAndroid Build Coastguard Worker        float2 _135 = _7_colorGreen.z.xx;
152*c8dee2aaSAndroid Build Coastguard Worker        float2x2 _134 = spvInverse(float2x2(float2(1.0f, 2.0f) + _135, float2(3.0f, 4.0f) + _135));
153*c8dee2aaSAndroid Build Coastguard Worker        float2 _140 = _134[0];
154*c8dee2aaSAndroid Build Coastguard Worker        float2 _143 = _134[1];
155*c8dee2aaSAndroid Build Coastguard Worker        _147 = all(bool2(_140.x == float2(-2.0f, 1.0f).x, _140.y == float2(-2.0f, 1.0f).y)) && all(bool2(_143.x == float2(1.5f, -0.5f).x, _143.y == float2(1.5f, -0.5f).y));
156*c8dee2aaSAndroid Build Coastguard Worker    }
157*c8dee2aaSAndroid Build Coastguard Worker    else
158*c8dee2aaSAndroid Build Coastguard Worker    {
159*c8dee2aaSAndroid Build Coastguard Worker        _147 = false;
160*c8dee2aaSAndroid Build Coastguard Worker    }
161*c8dee2aaSAndroid Build Coastguard Worker    bool _171 = false;
162*c8dee2aaSAndroid Build Coastguard Worker    if (_147)
163*c8dee2aaSAndroid Build Coastguard Worker    {
164*c8dee2aaSAndroid Build Coastguard Worker        float3 _154 = _7_colorGreen.z.xxx;
165*c8dee2aaSAndroid Build Coastguard Worker        float3x3 _150 = spvInverse(float3x3(float3(1.0f, 2.0f, 3.0f) + _154, float3(0.0f, 1.0f, 4.0f) + _154, float3(5.0f, 6.0f, 0.0f) + _154));
166*c8dee2aaSAndroid Build Coastguard Worker        float3 _160 = _150[0];
167*c8dee2aaSAndroid Build Coastguard Worker        float3 _163 = _150[1];
168*c8dee2aaSAndroid Build Coastguard Worker        float3 _167 = _150[2];
169*c8dee2aaSAndroid Build Coastguard Worker        _171 = (all(bool3(_160.x == float3(-24.0f, 18.0f, 5.0f).x, _160.y == float3(-24.0f, 18.0f, 5.0f).y, _160.z == float3(-24.0f, 18.0f, 5.0f).z)) && all(bool3(_163.x == float3(20.0f, -15.0f, -4.0f).x, _163.y == float3(20.0f, -15.0f, -4.0f).y, _163.z == float3(20.0f, -15.0f, -4.0f).z))) && all(bool3(_167.x == float3(-5.0f, 4.0f, 1.0f).x, _167.y == float3(-5.0f, 4.0f, 1.0f).y, _167.z == float3(-5.0f, 4.0f, 1.0f).z));
170*c8dee2aaSAndroid Build Coastguard Worker    }
171*c8dee2aaSAndroid Build Coastguard Worker    else
172*c8dee2aaSAndroid Build Coastguard Worker    {
173*c8dee2aaSAndroid Build Coastguard Worker        _171 = false;
174*c8dee2aaSAndroid Build Coastguard Worker    }
175*c8dee2aaSAndroid Build Coastguard Worker    bool _202 = false;
176*c8dee2aaSAndroid Build Coastguard Worker    if (_171)
177*c8dee2aaSAndroid Build Coastguard Worker    {
178*c8dee2aaSAndroid Build Coastguard Worker        float4 _180 = _7_colorGreen.z.xxxx;
179*c8dee2aaSAndroid Build Coastguard Worker        float4x4 _174 = spvInverse(float4x4(float4(1.0f, 0.0f, 0.0f, 1.0f) + _180, float4(0.0f, 2.0f, 1.0f, 2.0f) + _180, float4(2.0f, 1.0f, 0.0f, 1.0f) + _180, float4(2.0f, 0.0f, 1.0f, 4.0f) + _180));
180*c8dee2aaSAndroid Build Coastguard Worker        float4 _187 = _174[0];
181*c8dee2aaSAndroid Build Coastguard Worker        float4 _190 = _174[1];
182*c8dee2aaSAndroid Build Coastguard Worker        float4 _194 = _174[2];
183*c8dee2aaSAndroid Build Coastguard Worker        float4 _198 = _174[3];
184*c8dee2aaSAndroid Build Coastguard Worker        _202 = ((all(bool4(_187.x == float4(-2.0f, -0.5f, 1.0f, 0.5f).x, _187.y == float4(-2.0f, -0.5f, 1.0f, 0.5f).y, _187.z == float4(-2.0f, -0.5f, 1.0f, 0.5f).z, _187.w == float4(-2.0f, -0.5f, 1.0f, 0.5f).w)) && all(bool4(_190.x == float4(1.0f, 0.5f, 0.0f, -0.5f).x, _190.y == float4(1.0f, 0.5f, 0.0f, -0.5f).y, _190.z == float4(1.0f, 0.5f, 0.0f, -0.5f).z, _190.w == float4(1.0f, 0.5f, 0.0f, -0.5f).w))) && all(bool4(_194.x == float4(-8.0f, -1.0f, 2.0f, 2.0f).x, _194.y == float4(-8.0f, -1.0f, 2.0f, 2.0f).y, _194.z == float4(-8.0f, -1.0f, 2.0f, 2.0f).z, _194.w == float4(-8.0f, -1.0f, 2.0f, 2.0f).w))) && all(bool4(_198.x == float4(3.0f, 0.5f, -1.0f, -0.5f).x, _198.y == float4(3.0f, 0.5f, -1.0f, -0.5f).y, _198.z == float4(3.0f, 0.5f, -1.0f, -0.5f).z, _198.w == float4(3.0f, 0.5f, -1.0f, -0.5f).w));
185*c8dee2aaSAndroid Build Coastguard Worker    }
186*c8dee2aaSAndroid Build Coastguard Worker    else
187*c8dee2aaSAndroid Build Coastguard Worker    {
188*c8dee2aaSAndroid Build Coastguard Worker        _202 = false;
189*c8dee2aaSAndroid Build Coastguard Worker    }
190*c8dee2aaSAndroid Build Coastguard Worker    float4 _203 = 0.0f.xxxx;
191*c8dee2aaSAndroid Build Coastguard Worker    if (_202)
192*c8dee2aaSAndroid Build Coastguard Worker    {
193*c8dee2aaSAndroid Build Coastguard Worker        _203 = _7_colorGreen;
194*c8dee2aaSAndroid Build Coastguard Worker    }
195*c8dee2aaSAndroid Build Coastguard Worker    else
196*c8dee2aaSAndroid Build Coastguard Worker    {
197*c8dee2aaSAndroid Build Coastguard Worker        _203 = _7_colorRed;
198*c8dee2aaSAndroid Build Coastguard Worker    }
199*c8dee2aaSAndroid Build Coastguard Worker    return _203;
200*c8dee2aaSAndroid Build Coastguard Worker}
201*c8dee2aaSAndroid Build Coastguard Worker
202*c8dee2aaSAndroid Build Coastguard Workervoid frag_main()
203*c8dee2aaSAndroid Build Coastguard Worker{
204*c8dee2aaSAndroid Build Coastguard Worker    float2 _17 = 0.0f.xx;
205*c8dee2aaSAndroid Build Coastguard Worker    sk_FragColor = main(_17);
206*c8dee2aaSAndroid Build Coastguard Worker}
207*c8dee2aaSAndroid Build Coastguard Worker
208*c8dee2aaSAndroid Build Coastguard WorkerSPIRV_Cross_Output main()
209*c8dee2aaSAndroid Build Coastguard Worker{
210*c8dee2aaSAndroid Build Coastguard Worker    frag_main();
211*c8dee2aaSAndroid Build Coastguard Worker    SPIRV_Cross_Output stage_output;
212*c8dee2aaSAndroid Build Coastguard Worker    stage_output.sk_FragColor = sk_FragColor;
213*c8dee2aaSAndroid Build Coastguard Worker    return stage_output;
214*c8dee2aaSAndroid Build Coastguard Worker}
215