xref: /aosp_15_r20/external/skia/tests/sksl/folding/MatrixScalarNoOpFolding.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_scalar_X_mat2_b() -> bool {
13  {
14    var m: mat2x2<f32>;
15    var mm: mat2x2<f32>;
16    const z: mat2x2<f32> = mat2x2<f32>(0.0, 0.0, 0.0, 0.0);
17    m = _globalUniforms.testMatrix2x2;
18    m = _globalUniforms.testMatrix2x2;
19    if (any(m[0] != _globalUniforms.testMatrix2x2[0]) || any(m[1] != _globalUniforms.testMatrix2x2[1])) {
20      return false;
21    }
22    if (any(m[0] != _globalUniforms.testMatrix2x2[0]) || any(m[1] != _globalUniforms.testMatrix2x2[1])) {
23      return false;
24    }
25    if (any(m[0] != _globalUniforms.testMatrix2x2[0]) || any(m[1] != _globalUniforms.testMatrix2x2[1])) {
26      return false;
27    }
28    m = (-1.0 * m);
29    let _skTemp0 = (-1.0 * _globalUniforms.testMatrix2x2);
30    if (any(m[0] != _skTemp0[0]) || any(m[1] != _skTemp0[1])) {
31      return false;
32    }
33    mm = mat2x2<f32>(0.0, 0.0, 0.0, 0.0);
34    mm = mat2x2<f32>(0.0, 0.0, 0.0, 0.0);
35    return (all(mm[0] == z[0]) && all(mm[1] == z[1]));
36  }
37}
38fn test_no_op_scalar_X_mat3_b() -> bool {
39  {
40    var m: mat3x3<f32>;
41    var mm: mat3x3<f32>;
42    const z: mat3x3<f32> = mat3x3<f32>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
43    m = _globalUniforms.testMatrix3x3;
44    m = _globalUniforms.testMatrix3x3;
45    if (any(m[0] != _globalUniforms.testMatrix3x3[0]) || any(m[1] != _globalUniforms.testMatrix3x3[1]) || any(m[2] != _globalUniforms.testMatrix3x3[2])) {
46      return false;
47    }
48    if (any(m[0] != _globalUniforms.testMatrix3x3[0]) || any(m[1] != _globalUniforms.testMatrix3x3[1]) || any(m[2] != _globalUniforms.testMatrix3x3[2])) {
49      return false;
50    }
51    if (any(m[0] != _globalUniforms.testMatrix3x3[0]) || any(m[1] != _globalUniforms.testMatrix3x3[1]) || any(m[2] != _globalUniforms.testMatrix3x3[2])) {
52      return false;
53    }
54    m = (-1.0 * m);
55    let _skTemp1 = (-1.0 * _globalUniforms.testMatrix3x3);
56    if (any(m[0] != _skTemp1[0]) || any(m[1] != _skTemp1[1]) || any(m[2] != _skTemp1[2])) {
57      return false;
58    }
59    mm = mat3x3<f32>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
60    mm = mat3x3<f32>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
61    return (all(mm[0] == z[0]) && all(mm[1] == z[1]) && all(mm[2] == z[2]));
62  }
63}
64fn test_no_op_scalar_X_mat4_b() -> bool {
65  {
66    let testMatrix4x4: mat4x4<f32> = mat4x4<f32>(_globalUniforms.testInputs[0], _globalUniforms.testInputs[1], _globalUniforms.testInputs[2], _globalUniforms.testInputs[3], _globalUniforms.testInputs[0], _globalUniforms.testInputs[1], _globalUniforms.testInputs[2], _globalUniforms.testInputs[3], _globalUniforms.testInputs[0], _globalUniforms.testInputs[1], _globalUniforms.testInputs[2], _globalUniforms.testInputs[3], _globalUniforms.testInputs[0], _globalUniforms.testInputs[1], _globalUniforms.testInputs[2], _globalUniforms.testInputs[3]);
67    var m: mat4x4<f32>;
68    var mm: mat4x4<f32>;
69    const z: mat4x4<f32> = mat4x4<f32>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
70    m = testMatrix4x4;
71    m = testMatrix4x4;
72    if (any(m[0] != testMatrix4x4[0]) || any(m[1] != testMatrix4x4[1]) || any(m[2] != testMatrix4x4[2]) || any(m[3] != testMatrix4x4[3])) {
73      return false;
74    }
75    if (any(m[0] != testMatrix4x4[0]) || any(m[1] != testMatrix4x4[1]) || any(m[2] != testMatrix4x4[2]) || any(m[3] != testMatrix4x4[3])) {
76      return false;
77    }
78    if (any(m[0] != testMatrix4x4[0]) || any(m[1] != testMatrix4x4[1]) || any(m[2] != testMatrix4x4[2]) || any(m[3] != testMatrix4x4[3])) {
79      return false;
80    }
81    m = (-1.0 * m);
82    let _skTemp2 = (-1.0 * testMatrix4x4);
83    if (any(m[0] != _skTemp2[0]) || any(m[1] != _skTemp2[1]) || any(m[2] != _skTemp2[2]) || any(m[3] != _skTemp2[3])) {
84      return false;
85    }
86    mm = mat4x4<f32>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
87    mm = mat4x4<f32>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
88    return (all(mm[0] == z[0]) && all(mm[1] == z[1]) && all(mm[2] == z[2]) && all(mm[3] == z[3]));
89  }
90}
91fn test_no_op_mat2_X_scalar_b() -> bool {
92  {
93    var m: mat2x2<f32>;
94    var mm: mat2x2<f32>;
95    const z: mat2x2<f32> = mat2x2<f32>(0.0, 0.0, 0.0, 0.0);
96    const s: mat2x2<f32> = mat2x2<f32>(vec4<f32>(1.0)[0], vec4<f32>(1.0)[1], vec4<f32>(1.0)[2], vec4<f32>(1.0)[3]);
97    let scalar: f32 = _globalUniforms.testInputs.x;
98    m = mat2x2<f32>(scalar, 0.0, 0.0, scalar);
99    m = mat2x2<f32>(scalar, 0.0, 0.0, scalar);
100    let _skTemp3 = mat2x2<f32>(scalar, 0.0, 0.0, scalar);
101    if (any(m[0] != _skTemp3[0]) || any(m[1] != _skTemp3[1])) {
102      return false;
103    }
104    m = mat2x2<f32>(scalar / s[0], scalar / s[1]);
105    let _skTemp4 = mat2x2<f32>(scalar, scalar, scalar, scalar);
106    if (any(m[0] != _skTemp4[0]) || any(m[1] != _skTemp4[1])) {
107      return false;
108    }
109    m = mat2x2<f32>(scalar + z[0], scalar + z[1]);
110    m = mat2x2<f32>(z[0] + scalar, z[1] + scalar);
111    let _skTemp5 = mat2x2<f32>(scalar, scalar, scalar, scalar);
112    if (any(m[0] != _skTemp5[0]) || any(m[1] != _skTemp5[1])) {
113      return false;
114    }
115    m = mat2x2<f32>(scalar - z[0], scalar - z[1]);
116    m = mat2x2<f32>(z[0] - scalar, z[1] - scalar);
117    let _skTemp6 = (-1.0 * mat2x2<f32>(scalar, scalar, scalar, scalar));
118    if (any(m[0] != _skTemp6[0]) || any(m[1] != _skTemp6[1])) {
119      return false;
120    }
121    mm = mat2x2<f32>(0.0, 0.0, 0.0, 0.0);
122    mm = mat2x2<f32>(0.0, 0.0, 0.0, 0.0);
123    return (all(mm[0] == z[0]) && all(mm[1] == z[1]));
124  }
125}
126fn test_no_op_mat3_X_scalar_b() -> bool {
127  {
128    var m: mat3x3<f32>;
129    var mm: mat3x3<f32>;
130    const z: mat3x3<f32> = mat3x3<f32>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
131    const s: mat3x3<f32> = mat3x3<f32>(vec3<f32>(1.0)[0], vec3<f32>(1.0)[1], vec3<f32>(1.0)[2], vec3<f32>(1.0)[0], vec3<f32>(1.0)[1], vec3<f32>(1.0)[2], vec3<f32>(1.0)[0], vec3<f32>(1.0)[1], vec3<f32>(1.0)[2]);
132    let scalar: f32 = _globalUniforms.testInputs.x;
133    let scalar3: vec3<f32> = vec3<f32>(scalar);
134    m = mat3x3<f32>(scalar, 0.0, 0.0, 0.0, scalar, 0.0, 0.0, 0.0, scalar);
135    m = mat3x3<f32>(scalar, 0.0, 0.0, 0.0, scalar, 0.0, 0.0, 0.0, scalar);
136    let _skTemp7 = mat3x3<f32>(scalar, 0.0, 0.0, 0.0, scalar, 0.0, 0.0, 0.0, scalar);
137    if (any(m[0] != _skTemp7[0]) || any(m[1] != _skTemp7[1]) || any(m[2] != _skTemp7[2])) {
138      return false;
139    }
140    m = mat3x3<f32>(scalar / s[0], scalar / s[1], scalar / s[2]);
141    let _skTemp8 = mat3x3<f32>(scalar3[0], scalar3[1], scalar3[2], scalar3[0], scalar3[1], scalar3[2], scalar3[0], scalar3[1], scalar3[2]);
142    if (any(m[0] != _skTemp8[0]) || any(m[1] != _skTemp8[1]) || any(m[2] != _skTemp8[2])) {
143      return false;
144    }
145    m = mat3x3<f32>(scalar + z[0], scalar + z[1], scalar + z[2]);
146    m = mat3x3<f32>(z[0] + scalar, z[1] + scalar, z[2] + scalar);
147    let _skTemp9 = mat3x3<f32>(scalar3[0], scalar3[1], scalar3[2], scalar3[0], scalar3[1], scalar3[2], scalar3[0], scalar3[1], scalar3[2]);
148    if (any(m[0] != _skTemp9[0]) || any(m[1] != _skTemp9[1]) || any(m[2] != _skTemp9[2])) {
149      return false;
150    }
151    m = mat3x3<f32>(scalar - z[0], scalar - z[1], scalar - z[2]);
152    m = mat3x3<f32>(z[0] - scalar, z[1] - scalar, z[2] - scalar);
153    let _skTemp10 = (-1.0 * mat3x3<f32>(scalar3[0], scalar3[1], scalar3[2], scalar3[0], scalar3[1], scalar3[2], scalar3[0], scalar3[1], scalar3[2]));
154    if (any(m[0] != _skTemp10[0]) || any(m[1] != _skTemp10[1]) || any(m[2] != _skTemp10[2])) {
155      return false;
156    }
157    mm = mat3x3<f32>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
158    mm = mat3x3<f32>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
159    return (all(mm[0] == z[0]) && all(mm[1] == z[1]) && all(mm[2] == z[2]));
160  }
161}
162fn test_no_op_mat4_X_scalar_b() -> bool {
163  {
164    var m: mat4x4<f32>;
165    var mm: mat4x4<f32>;
166    const z: mat4x4<f32> = mat4x4<f32>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
167    const s: mat4x4<f32> = mat4x4<f32>(vec4<f32>(1.0)[0], vec4<f32>(1.0)[1], vec4<f32>(1.0)[2], vec4<f32>(1.0)[3], vec4<f32>(1.0)[0], vec4<f32>(1.0)[1], vec4<f32>(1.0)[2], vec4<f32>(1.0)[3], vec4<f32>(1.0)[0], vec4<f32>(1.0)[1], vec4<f32>(1.0)[2], vec4<f32>(1.0)[3], vec4<f32>(1.0)[0], vec4<f32>(1.0)[1], vec4<f32>(1.0)[2], vec4<f32>(1.0)[3]);
168    let scalar: f32 = _globalUniforms.testInputs.x;
169    let scalar4: vec4<f32> = vec4<f32>(scalar);
170    m = mat4x4<f32>(scalar, 0.0, 0.0, 0.0, 0.0, scalar, 0.0, 0.0, 0.0, 0.0, scalar, 0.0, 0.0, 0.0, 0.0, scalar);
171    m = mat4x4<f32>(scalar, 0.0, 0.0, 0.0, 0.0, scalar, 0.0, 0.0, 0.0, 0.0, scalar, 0.0, 0.0, 0.0, 0.0, scalar);
172    let _skTemp11 = mat4x4<f32>(scalar, 0.0, 0.0, 0.0, 0.0, scalar, 0.0, 0.0, 0.0, 0.0, scalar, 0.0, 0.0, 0.0, 0.0, scalar);
173    if (any(m[0] != _skTemp11[0]) || any(m[1] != _skTemp11[1]) || any(m[2] != _skTemp11[2]) || any(m[3] != _skTemp11[3])) {
174      return false;
175    }
176    m = mat4x4<f32>(scalar / s[0], scalar / s[1], scalar / s[2], scalar / s[3]);
177    let _skTemp12 = mat4x4<f32>(scalar4[0], scalar4[1], scalar4[2], scalar4[3], scalar4[0], scalar4[1], scalar4[2], scalar4[3], scalar4[0], scalar4[1], scalar4[2], scalar4[3], scalar4[0], scalar4[1], scalar4[2], scalar4[3]);
178    if (any(m[0] != _skTemp12[0]) || any(m[1] != _skTemp12[1]) || any(m[2] != _skTemp12[2]) || any(m[3] != _skTemp12[3])) {
179      return false;
180    }
181    m = mat4x4<f32>(scalar + z[0], scalar + z[1], scalar + z[2], scalar + z[3]);
182    m = mat4x4<f32>(z[0] + scalar, z[1] + scalar, z[2] + scalar, z[3] + scalar);
183    let _skTemp13 = mat4x4<f32>(scalar4[0], scalar4[1], scalar4[2], scalar4[3], scalar4[0], scalar4[1], scalar4[2], scalar4[3], scalar4[0], scalar4[1], scalar4[2], scalar4[3], scalar4[0], scalar4[1], scalar4[2], scalar4[3]);
184    if (any(m[0] != _skTemp13[0]) || any(m[1] != _skTemp13[1]) || any(m[2] != _skTemp13[2]) || any(m[3] != _skTemp13[3])) {
185      return false;
186    }
187    m = mat4x4<f32>(scalar - z[0], scalar - z[1], scalar - z[2], scalar - z[3]);
188    m = mat4x4<f32>(z[0] - scalar, z[1] - scalar, z[2] - scalar, z[3] - scalar);
189    let _skTemp14 = (-1.0 * mat4x4<f32>(scalar4[0], scalar4[1], scalar4[2], scalar4[3], scalar4[0], scalar4[1], scalar4[2], scalar4[3], scalar4[0], scalar4[1], scalar4[2], scalar4[3], scalar4[0], scalar4[1], scalar4[2], scalar4[3]));
190    if (any(m[0] != _skTemp14[0]) || any(m[1] != _skTemp14[1]) || any(m[2] != _skTemp14[2]) || any(m[3] != _skTemp14[3])) {
191      return false;
192    }
193    mm = mat4x4<f32>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
194    mm = mat4x4<f32>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
195    return (all(mm[0] == z[0]) && all(mm[1] == z[1]) && all(mm[2] == z[2]) && all(mm[3] == z[3]));
196  }
197}
198fn _skslMain(coords: vec2<f32>) -> vec4<f32> {
199  {
200    var _skTemp15: vec4<f32>;
201    var _skTemp16: bool;
202    var _skTemp17: bool;
203    var _skTemp18: bool;
204    var _skTemp19: bool;
205    var _skTemp20: bool;
206    let _skTemp21 = test_no_op_scalar_X_mat2_b();
207    if _skTemp21 {
208      let _skTemp22 = test_no_op_scalar_X_mat3_b();
209      _skTemp20 = _skTemp22;
210    } else {
211      _skTemp20 = false;
212    }
213    if _skTemp20 {
214      let _skTemp23 = test_no_op_scalar_X_mat4_b();
215      _skTemp19 = _skTemp23;
216    } else {
217      _skTemp19 = false;
218    }
219    if _skTemp19 {
220      let _skTemp24 = test_no_op_mat2_X_scalar_b();
221      _skTemp18 = _skTemp24;
222    } else {
223      _skTemp18 = false;
224    }
225    if _skTemp18 {
226      let _skTemp25 = test_no_op_mat3_X_scalar_b();
227      _skTemp17 = _skTemp25;
228    } else {
229      _skTemp17 = false;
230    }
231    if _skTemp17 {
232      let _skTemp26 = test_no_op_mat4_X_scalar_b();
233      _skTemp16 = _skTemp26;
234    } else {
235      _skTemp16 = false;
236    }
237    if _skTemp16 {
238      _skTemp15 = _globalUniforms.colorGreen;
239    } else {
240      _skTemp15 = _globalUniforms.colorRed;
241    }
242    return _skTemp15;
243  }
244}
245@fragment fn main(@location(0) _coords: vec2<f32>) -> @location(0) vec4<f32> {
246  return _skslMain(_coords);
247}
248