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