xref: /aosp_15_r20/external/skia/tests/sksl/runtime/RecursiveComparison_Structs.wgsl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1diagnostic(off, derivative_uniformity);
2diagnostic(off, chromium.unreachable_code);
3struct _GlobalUniforms {
4  colorGreen: vec4<f32>,
5  colorRed: vec4<f32>,
6};
7@binding(0) @group(0) var<uniform> _globalUniforms: _GlobalUniforms;
8struct S {
9  f1: f32,
10  f2: f32,
11  f3: f32,
12};
13fn test_same_structs_bbfff(eq: bool, f1: f32, f2: f32, f3: f32) -> bool {
14  {
15    let one: f32 = f32(_globalUniforms.colorGreen.x + 1.0);
16    var a: S;
17    a.f1 = f1;
18    a.f2 = f2;
19    a.f3 = f3;
20    var b: S;
21    b.f1 = f1 * one;
22    b.f2 = f2 * one;
23    b.f3 = f3 * one;
24    var _skTemp0: bool;
25    if eq {
26      _skTemp0 = ((a.f1 == b.f1) && (a.f2 == b.f2) && (a.f3 == b.f3));
27    } else {
28      _skTemp0 = ((a.f1 != b.f1) || (a.f2 != b.f2) || (a.f3 != b.f3));
29    }
30    return _skTemp0;
31  }
32}
33fn test_diff_structs_bbfff(eq: bool, f1: f32, f2: f32, f3: f32) -> bool {
34  {
35    let two: f32 = f32(_globalUniforms.colorGreen.x + 2.0);
36    var a: S;
37    a.f1 = f1;
38    a.f2 = f2;
39    a.f3 = f3;
40    var b: S;
41    b.f1 = f1 * two;
42    b.f2 = f2 * two;
43    b.f3 = f3;
44    var _skTemp1: bool;
45    if eq {
46      _skTemp1 = ((a.f1 == b.f1) && (a.f2 == b.f2) && (a.f3 == b.f3));
47    } else {
48      _skTemp1 = ((a.f1 != b.f1) || (a.f2 != b.f2) || (a.f3 != b.f3));
49    }
50    return _skTemp1;
51  }
52}
53fn _skslMain(coords: vec2<f32>) -> vec4<f32> {
54  {
55    let NAN1: f32 = f32(_globalUniforms.colorGreen.x / _globalUniforms.colorGreen.z);
56    let NAN2: f32 = f32(_globalUniforms.colorGreen.z / _globalUniforms.colorGreen.x);
57    let ZP: f32 = f32(_globalUniforms.colorGreen.x * _globalUniforms.colorGreen.z);
58    let ZM: f32 = f32(-_globalUniforms.colorGreen.x * _globalUniforms.colorGreen.z);
59    let F42: f32 = f32(_globalUniforms.colorGreen.y * 42.0);
60    let F43: f32 = f32(_globalUniforms.colorGreen.y * 43.0);
61    let F44: f32 = f32(_globalUniforms.colorGreen.y * 44.0);
62    const EQ: bool = true;
63    const NE: bool = false;
64    let _0_one: f32 = f32(_globalUniforms.colorGreen.x + 1.0);
65    var _1_a: S;
66    _1_a.f1 = F42;
67    _1_a.f2 = ZM;
68    _1_a.f3 = ZP;
69    var _2_b: S;
70    _2_b.f1 = F42 * _0_one;
71    _2_b.f2 = ZM * _0_one;
72    _2_b.f3 = ZP * _0_one;
73    var _skTemp2: vec4<f32>;
74    var _skTemp3: bool;
75    var _skTemp4: bool;
76    var _skTemp5: bool;
77    var _skTemp6: bool;
78    var _skTemp7: bool;
79    var _skTemp8: bool;
80    var _skTemp9: bool;
81    var _skTemp10: bool;
82    if EQ {
83      _skTemp10 = ((_1_a.f1 == _2_b.f1) && (_1_a.f2 == _2_b.f2) && (_1_a.f3 == _2_b.f3));
84    } else {
85      _skTemp10 = ((_1_a.f1 != _2_b.f1) || (_1_a.f2 != _2_b.f2) || (_1_a.f3 != _2_b.f3));
86    }
87    if _skTemp10 {
88      let _skTemp11 = test_same_structs_bbfff(NE, F42, ZM, ZP);
89      _skTemp9 = !_skTemp11;
90    } else {
91      _skTemp9 = false;
92    }
93    if _skTemp9 {
94      let _skTemp12 = test_same_structs_bbfff(NE, F42, NAN1, NAN2);
95      _skTemp8 = _skTemp12;
96    } else {
97      _skTemp8 = false;
98    }
99    if _skTemp8 {
100      let _skTemp13 = test_same_structs_bbfff(EQ, F42, NAN1, NAN2);
101      _skTemp7 = !_skTemp13;
102    } else {
103      _skTemp7 = false;
104    }
105    if _skTemp7 {
106      let _skTemp14 = test_diff_structs_bbfff(NE, F42, F43, F44);
107      _skTemp6 = _skTemp14;
108    } else {
109      _skTemp6 = false;
110    }
111    if _skTemp6 {
112      let _skTemp15 = test_diff_structs_bbfff(EQ, F42, F43, F44);
113      _skTemp5 = !_skTemp15;
114    } else {
115      _skTemp5 = false;
116    }
117    if _skTemp5 {
118      let _skTemp16 = test_diff_structs_bbfff(NE, NAN1, ZM, ZP);
119      _skTemp4 = _skTemp16;
120    } else {
121      _skTemp4 = false;
122    }
123    if _skTemp4 {
124      let _skTemp17 = test_diff_structs_bbfff(EQ, NAN1, ZM, ZP);
125      _skTemp3 = !_skTemp17;
126    } else {
127      _skTemp3 = false;
128    }
129    if _skTemp3 {
130      _skTemp2 = _globalUniforms.colorGreen;
131    } else {
132      _skTemp2 = _globalUniforms.colorRed;
133    }
134    return vec4<f32>(_skTemp2);
135  }
136}
137@fragment fn main(@location(0) _coords: vec2<f32>) -> @location(0) vec4<f32> {
138  return _skslMain(_coords);
139}
140