xref: /aosp_15_r20/external/skia/tests/sksl/folding/MatrixVectorNoOpFolding.wgsl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Workerdiagnostic(off, derivative_uniformity);
2*c8dee2aaSAndroid Build Coastguard Workerdiagnostic(off, chromium.unreachable_code);
3*c8dee2aaSAndroid Build Coastguard Workerstruct _GlobalUniforms {
4*c8dee2aaSAndroid Build Coastguard Worker  testMatrix2x2: mat2x2<f32>,
5*c8dee2aaSAndroid Build Coastguard Worker  testMatrix3x3: mat3x3<f32>,
6*c8dee2aaSAndroid Build Coastguard Worker  testInputs: vec4<f32>,
7*c8dee2aaSAndroid Build Coastguard Worker  colorRed: vec4<f32>,
8*c8dee2aaSAndroid Build Coastguard Worker  colorGreen: vec4<f32>,
9*c8dee2aaSAndroid Build Coastguard Worker  unknownInput: f32,
10*c8dee2aaSAndroid Build Coastguard Worker};
11*c8dee2aaSAndroid Build Coastguard Worker@binding(0) @group(0) var<uniform> _globalUniforms: _GlobalUniforms;
12*c8dee2aaSAndroid Build Coastguard Workerfn test_no_op_mat2_X_vec2_b() -> bool {
13*c8dee2aaSAndroid Build Coastguard Worker  {
14*c8dee2aaSAndroid Build Coastguard Worker    var v: vec2<f32>;
15*c8dee2aaSAndroid Build Coastguard Worker    var vv: vec2<f32>;
16*c8dee2aaSAndroid Build Coastguard Worker    v = _globalUniforms.testInputs.xy;
17*c8dee2aaSAndroid Build Coastguard Worker    v = _globalUniforms.testInputs.xy;
18*c8dee2aaSAndroid Build Coastguard Worker    if any(v != _globalUniforms.testInputs.xy) {
19*c8dee2aaSAndroid Build Coastguard Worker      return false;
20*c8dee2aaSAndroid Build Coastguard Worker    }
21*c8dee2aaSAndroid Build Coastguard Worker    if any(v != _globalUniforms.testInputs.xy) {
22*c8dee2aaSAndroid Build Coastguard Worker      return false;
23*c8dee2aaSAndroid Build Coastguard Worker    }
24*c8dee2aaSAndroid Build Coastguard Worker    v = -_globalUniforms.testInputs.xy;
25*c8dee2aaSAndroid Build Coastguard Worker    v = -_globalUniforms.testInputs.xy;
26*c8dee2aaSAndroid Build Coastguard Worker    if any(v != (-_globalUniforms.testInputs.xy)) {
27*c8dee2aaSAndroid Build Coastguard Worker      return false;
28*c8dee2aaSAndroid Build Coastguard Worker    }
29*c8dee2aaSAndroid Build Coastguard Worker    vv = vec2<f32>(0.0);
30*c8dee2aaSAndroid Build Coastguard Worker    vv = vec2<f32>(0.0);
31*c8dee2aaSAndroid Build Coastguard Worker    return all(vv == vec2<f32>(0.0));
32*c8dee2aaSAndroid Build Coastguard Worker  }
33*c8dee2aaSAndroid Build Coastguard Worker}
34*c8dee2aaSAndroid Build Coastguard Workerfn test_no_op_mat3_X_vec3_b() -> bool {
35*c8dee2aaSAndroid Build Coastguard Worker  {
36*c8dee2aaSAndroid Build Coastguard Worker    var v: vec3<f32>;
37*c8dee2aaSAndroid Build Coastguard Worker    var vv: vec3<f32>;
38*c8dee2aaSAndroid Build Coastguard Worker    v = _globalUniforms.testInputs.xyz;
39*c8dee2aaSAndroid Build Coastguard Worker    v = _globalUniforms.testInputs.xyz;
40*c8dee2aaSAndroid Build Coastguard Worker    if any(v != _globalUniforms.testInputs.xyz) {
41*c8dee2aaSAndroid Build Coastguard Worker      return false;
42*c8dee2aaSAndroid Build Coastguard Worker    }
43*c8dee2aaSAndroid Build Coastguard Worker    if any(v != _globalUniforms.testInputs.xyz) {
44*c8dee2aaSAndroid Build Coastguard Worker      return false;
45*c8dee2aaSAndroid Build Coastguard Worker    }
46*c8dee2aaSAndroid Build Coastguard Worker    v = -_globalUniforms.testInputs.xyz;
47*c8dee2aaSAndroid Build Coastguard Worker    v = -_globalUniforms.testInputs.xyz;
48*c8dee2aaSAndroid Build Coastguard Worker    if any(v != (-_globalUniforms.testInputs.xyz)) {
49*c8dee2aaSAndroid Build Coastguard Worker      return false;
50*c8dee2aaSAndroid Build Coastguard Worker    }
51*c8dee2aaSAndroid Build Coastguard Worker    vv = vec3<f32>(0.0);
52*c8dee2aaSAndroid Build Coastguard Worker    vv = vec3<f32>(0.0);
53*c8dee2aaSAndroid Build Coastguard Worker    return all(vv == vec3<f32>(0.0));
54*c8dee2aaSAndroid Build Coastguard Worker  }
55*c8dee2aaSAndroid Build Coastguard Worker}
56*c8dee2aaSAndroid Build Coastguard Workerfn test_no_op_mat4_X_vec4_b() -> bool {
57*c8dee2aaSAndroid Build Coastguard Worker  {
58*c8dee2aaSAndroid Build Coastguard Worker    var v: vec4<f32>;
59*c8dee2aaSAndroid Build Coastguard Worker    var vv: vec4<f32>;
60*c8dee2aaSAndroid Build Coastguard Worker    v = _globalUniforms.testInputs;
61*c8dee2aaSAndroid Build Coastguard Worker    v = _globalUniforms.testInputs;
62*c8dee2aaSAndroid Build Coastguard Worker    if any(v != _globalUniforms.testInputs) {
63*c8dee2aaSAndroid Build Coastguard Worker      return false;
64*c8dee2aaSAndroid Build Coastguard Worker    }
65*c8dee2aaSAndroid Build Coastguard Worker    if any(v != _globalUniforms.testInputs) {
66*c8dee2aaSAndroid Build Coastguard Worker      return false;
67*c8dee2aaSAndroid Build Coastguard Worker    }
68*c8dee2aaSAndroid Build Coastguard Worker    v = -_globalUniforms.testInputs;
69*c8dee2aaSAndroid Build Coastguard Worker    v = -_globalUniforms.testInputs;
70*c8dee2aaSAndroid Build Coastguard Worker    if any(v != (-_globalUniforms.testInputs)) {
71*c8dee2aaSAndroid Build Coastguard Worker      return false;
72*c8dee2aaSAndroid Build Coastguard Worker    }
73*c8dee2aaSAndroid Build Coastguard Worker    vv = vec4<f32>(0.0);
74*c8dee2aaSAndroid Build Coastguard Worker    vv = vec4<f32>(0.0);
75*c8dee2aaSAndroid Build Coastguard Worker    return all(vv == vec4<f32>(0.0));
76*c8dee2aaSAndroid Build Coastguard Worker  }
77*c8dee2aaSAndroid Build Coastguard Worker}
78*c8dee2aaSAndroid Build Coastguard Workerfn test_no_op_vec2_X_mat2_b() -> bool {
79*c8dee2aaSAndroid Build Coastguard Worker  {
80*c8dee2aaSAndroid Build Coastguard Worker    const n: vec2<f32> = vec2<f32>(-1.0);
81*c8dee2aaSAndroid Build Coastguard Worker    const i: vec2<f32> = vec2<f32>(1.0);
82*c8dee2aaSAndroid Build Coastguard Worker    const z: vec2<f32> = vec2<f32>(0.0);
83*c8dee2aaSAndroid Build Coastguard Worker    var v: vec2<f32>;
84*c8dee2aaSAndroid Build Coastguard Worker    var vv: vec2<f32> = vec2<f32>(0.0);
85*c8dee2aaSAndroid Build Coastguard Worker    vv = vec2<f32>(0.0);
86*c8dee2aaSAndroid Build Coastguard Worker    if any(vv != z) {
87*c8dee2aaSAndroid Build Coastguard Worker      return false;
88*c8dee2aaSAndroid Build Coastguard Worker    }
89*c8dee2aaSAndroid Build Coastguard Worker    v = i * _globalUniforms.testMatrix2x2;
90*c8dee2aaSAndroid Build Coastguard Worker    if any(v != vec2<f32>(3.0, 7.0)) {
91*c8dee2aaSAndroid Build Coastguard Worker      return false;
92*c8dee2aaSAndroid Build Coastguard Worker    }
93*c8dee2aaSAndroid Build Coastguard Worker    v = _globalUniforms.testMatrix2x2 * i;
94*c8dee2aaSAndroid Build Coastguard Worker    if any(v != vec2<f32>(4.0, 6.0)) {
95*c8dee2aaSAndroid Build Coastguard Worker      return false;
96*c8dee2aaSAndroid Build Coastguard Worker    }
97*c8dee2aaSAndroid Build Coastguard Worker    v = n * _globalUniforms.testMatrix2x2;
98*c8dee2aaSAndroid Build Coastguard Worker    if any(v != vec2<f32>(-3.0, -7.0)) {
99*c8dee2aaSAndroid Build Coastguard Worker      return false;
100*c8dee2aaSAndroid Build Coastguard Worker    }
101*c8dee2aaSAndroid Build Coastguard Worker    v = _globalUniforms.testMatrix2x2 * n;
102*c8dee2aaSAndroid Build Coastguard Worker    return all(v == vec2<f32>(-4.0, -6.0));
103*c8dee2aaSAndroid Build Coastguard Worker  }
104*c8dee2aaSAndroid Build Coastguard Worker}
105*c8dee2aaSAndroid Build Coastguard Workerfn test_no_op_vec3_X_mat3_b() -> bool {
106*c8dee2aaSAndroid Build Coastguard Worker  {
107*c8dee2aaSAndroid Build Coastguard Worker    const n: vec3<f32> = vec3<f32>(-1.0);
108*c8dee2aaSAndroid Build Coastguard Worker    const i: vec3<f32> = vec3<f32>(1.0);
109*c8dee2aaSAndroid Build Coastguard Worker    const z: vec3<f32> = vec3<f32>(0.0);
110*c8dee2aaSAndroid Build Coastguard Worker    var v: vec3<f32>;
111*c8dee2aaSAndroid Build Coastguard Worker    var vv: vec3<f32> = vec3<f32>(0.0);
112*c8dee2aaSAndroid Build Coastguard Worker    vv = vec3<f32>(0.0);
113*c8dee2aaSAndroid Build Coastguard Worker    if any(vv != z) {
114*c8dee2aaSAndroid Build Coastguard Worker      return false;
115*c8dee2aaSAndroid Build Coastguard Worker    }
116*c8dee2aaSAndroid Build Coastguard Worker    v = i * _globalUniforms.testMatrix3x3;
117*c8dee2aaSAndroid Build Coastguard Worker    if any(v != vec3<f32>(6.0, 15.0, 24.0)) {
118*c8dee2aaSAndroid Build Coastguard Worker      return false;
119*c8dee2aaSAndroid Build Coastguard Worker    }
120*c8dee2aaSAndroid Build Coastguard Worker    v = _globalUniforms.testMatrix3x3 * i;
121*c8dee2aaSAndroid Build Coastguard Worker    if any(v != vec3<f32>(12.0, 15.0, 18.0)) {
122*c8dee2aaSAndroid Build Coastguard Worker      return false;
123*c8dee2aaSAndroid Build Coastguard Worker    }
124*c8dee2aaSAndroid Build Coastguard Worker    v = n * _globalUniforms.testMatrix3x3;
125*c8dee2aaSAndroid Build Coastguard Worker    if any(v != vec3<f32>(-6.0, -15.0, -24.0)) {
126*c8dee2aaSAndroid Build Coastguard Worker      return false;
127*c8dee2aaSAndroid Build Coastguard Worker    }
128*c8dee2aaSAndroid Build Coastguard Worker    v = _globalUniforms.testMatrix3x3 * n;
129*c8dee2aaSAndroid Build Coastguard Worker    return all(v == vec3<f32>(-12.0, -15.0, -18.0));
130*c8dee2aaSAndroid Build Coastguard Worker  }
131*c8dee2aaSAndroid Build Coastguard Worker}
132*c8dee2aaSAndroid Build Coastguard Workerfn test_no_op_vec4_X_mat4_b() -> bool {
133*c8dee2aaSAndroid Build Coastguard Worker  {
134*c8dee2aaSAndroid Build Coastguard Worker    const n: vec4<f32> = vec4<f32>(-1.0);
135*c8dee2aaSAndroid Build Coastguard Worker    const i: vec4<f32> = vec4<f32>(1.0);
136*c8dee2aaSAndroid Build Coastguard Worker    const z: vec4<f32> = vec4<f32>(0.0);
137*c8dee2aaSAndroid Build Coastguard Worker    let _skTemp0 = _globalUniforms.testMatrix2x2[0];
138*c8dee2aaSAndroid Build Coastguard Worker    let _skTemp1 = _globalUniforms.testMatrix2x2[1];
139*c8dee2aaSAndroid Build Coastguard Worker    let _skTemp2 = _globalUniforms.testMatrix2x2[0];
140*c8dee2aaSAndroid Build Coastguard Worker    let _skTemp3 = _globalUniforms.testMatrix2x2[1];
141*c8dee2aaSAndroid Build Coastguard Worker    let _skTemp4 = _globalUniforms.testMatrix2x2[0];
142*c8dee2aaSAndroid Build Coastguard Worker    let _skTemp5 = _globalUniforms.testMatrix2x2[1];
143*c8dee2aaSAndroid Build Coastguard Worker    let _skTemp6 = _globalUniforms.testMatrix2x2[0];
144*c8dee2aaSAndroid Build Coastguard Worker    let _skTemp7 = _globalUniforms.testMatrix2x2[1];
145*c8dee2aaSAndroid Build Coastguard Worker    let testMatrix4x4: mat4x4<f32> = mat4x4<f32>(_skTemp0[0], _skTemp0[1], _skTemp1[0], _skTemp1[1], _skTemp2[0], _skTemp2[1], _skTemp3[0], _skTemp3[1], _skTemp4[0], _skTemp4[1], _skTemp5[0], _skTemp5[1], _skTemp6[0], _skTemp6[1], _skTemp7[0], _skTemp7[1]);
146*c8dee2aaSAndroid Build Coastguard Worker    var v: vec4<f32>;
147*c8dee2aaSAndroid Build Coastguard Worker    var vv: vec4<f32> = vec4<f32>(0.0);
148*c8dee2aaSAndroid Build Coastguard Worker    vv = vec4<f32>(0.0);
149*c8dee2aaSAndroid Build Coastguard Worker    if any(vv != z) {
150*c8dee2aaSAndroid Build Coastguard Worker      return false;
151*c8dee2aaSAndroid Build Coastguard Worker    }
152*c8dee2aaSAndroid Build Coastguard Worker    v = i * testMatrix4x4;
153*c8dee2aaSAndroid Build Coastguard Worker    if any(v != vec4<f32>(10.0)) {
154*c8dee2aaSAndroid Build Coastguard Worker      return false;
155*c8dee2aaSAndroid Build Coastguard Worker    }
156*c8dee2aaSAndroid Build Coastguard Worker    v = testMatrix4x4 * i;
157*c8dee2aaSAndroid Build Coastguard Worker    if any(v != vec4<f32>(4.0, 8.0, 12.0, 16.0)) {
158*c8dee2aaSAndroid Build Coastguard Worker      return false;
159*c8dee2aaSAndroid Build Coastguard Worker    }
160*c8dee2aaSAndroid Build Coastguard Worker    v = n * testMatrix4x4;
161*c8dee2aaSAndroid Build Coastguard Worker    if any(v != vec4<f32>(-10.0)) {
162*c8dee2aaSAndroid Build Coastguard Worker      return false;
163*c8dee2aaSAndroid Build Coastguard Worker    }
164*c8dee2aaSAndroid Build Coastguard Worker    v = testMatrix4x4 * n;
165*c8dee2aaSAndroid Build Coastguard Worker    return all(v == vec4<f32>(-4.0, -8.0, -12.0, -16.0));
166*c8dee2aaSAndroid Build Coastguard Worker  }
167*c8dee2aaSAndroid Build Coastguard Worker}
168*c8dee2aaSAndroid Build Coastguard Workerfn _skslMain(coords: vec2<f32>) -> vec4<f32> {
169*c8dee2aaSAndroid Build Coastguard Worker  {
170*c8dee2aaSAndroid Build Coastguard Worker    var _skTemp8: vec4<f32>;
171*c8dee2aaSAndroid Build Coastguard Worker    var _skTemp9: bool;
172*c8dee2aaSAndroid Build Coastguard Worker    var _skTemp10: bool;
173*c8dee2aaSAndroid Build Coastguard Worker    var _skTemp11: bool;
174*c8dee2aaSAndroid Build Coastguard Worker    var _skTemp12: bool;
175*c8dee2aaSAndroid Build Coastguard Worker    var _skTemp13: bool;
176*c8dee2aaSAndroid Build Coastguard Worker    let _skTemp14 = test_no_op_mat2_X_vec2_b();
177*c8dee2aaSAndroid Build Coastguard Worker    if _skTemp14 {
178*c8dee2aaSAndroid Build Coastguard Worker      let _skTemp15 = test_no_op_mat3_X_vec3_b();
179*c8dee2aaSAndroid Build Coastguard Worker      _skTemp13 = _skTemp15;
180*c8dee2aaSAndroid Build Coastguard Worker    } else {
181*c8dee2aaSAndroid Build Coastguard Worker      _skTemp13 = false;
182*c8dee2aaSAndroid Build Coastguard Worker    }
183*c8dee2aaSAndroid Build Coastguard Worker    if _skTemp13 {
184*c8dee2aaSAndroid Build Coastguard Worker      let _skTemp16 = test_no_op_mat4_X_vec4_b();
185*c8dee2aaSAndroid Build Coastguard Worker      _skTemp12 = _skTemp16;
186*c8dee2aaSAndroid Build Coastguard Worker    } else {
187*c8dee2aaSAndroid Build Coastguard Worker      _skTemp12 = false;
188*c8dee2aaSAndroid Build Coastguard Worker    }
189*c8dee2aaSAndroid Build Coastguard Worker    if _skTemp12 {
190*c8dee2aaSAndroid Build Coastguard Worker      let _skTemp17 = test_no_op_vec2_X_mat2_b();
191*c8dee2aaSAndroid Build Coastguard Worker      _skTemp11 = _skTemp17;
192*c8dee2aaSAndroid Build Coastguard Worker    } else {
193*c8dee2aaSAndroid Build Coastguard Worker      _skTemp11 = false;
194*c8dee2aaSAndroid Build Coastguard Worker    }
195*c8dee2aaSAndroid Build Coastguard Worker    if _skTemp11 {
196*c8dee2aaSAndroid Build Coastguard Worker      let _skTemp18 = test_no_op_vec3_X_mat3_b();
197*c8dee2aaSAndroid Build Coastguard Worker      _skTemp10 = _skTemp18;
198*c8dee2aaSAndroid Build Coastguard Worker    } else {
199*c8dee2aaSAndroid Build Coastguard Worker      _skTemp10 = false;
200*c8dee2aaSAndroid Build Coastguard Worker    }
201*c8dee2aaSAndroid Build Coastguard Worker    if _skTemp10 {
202*c8dee2aaSAndroid Build Coastguard Worker      let _skTemp19 = test_no_op_vec4_X_mat4_b();
203*c8dee2aaSAndroid Build Coastguard Worker      _skTemp9 = _skTemp19;
204*c8dee2aaSAndroid Build Coastguard Worker    } else {
205*c8dee2aaSAndroid Build Coastguard Worker      _skTemp9 = false;
206*c8dee2aaSAndroid Build Coastguard Worker    }
207*c8dee2aaSAndroid Build Coastguard Worker    if _skTemp9 {
208*c8dee2aaSAndroid Build Coastguard Worker      _skTemp8 = _globalUniforms.colorGreen;
209*c8dee2aaSAndroid Build Coastguard Worker    } else {
210*c8dee2aaSAndroid Build Coastguard Worker      _skTemp8 = _globalUniforms.colorRed;
211*c8dee2aaSAndroid Build Coastguard Worker    }
212*c8dee2aaSAndroid Build Coastguard Worker    return _skTemp8;
213*c8dee2aaSAndroid Build Coastguard Worker  }
214*c8dee2aaSAndroid Build Coastguard Worker}
215*c8dee2aaSAndroid Build Coastguard Worker@fragment fn main(@location(0) _coords: vec2<f32>) -> @location(0) vec4<f32> {
216*c8dee2aaSAndroid Build Coastguard Worker  return _skslMain(_coords);
217*c8dee2aaSAndroid Build Coastguard Worker}
218