xref: /aosp_15_r20/external/skia/tests/sksl/folding/VectorScalarFolding.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  colorRed: vec4<f32>,
5*c8dee2aaSAndroid Build Coastguard Worker  colorGreen: vec4<f32>,
6*c8dee2aaSAndroid Build Coastguard Worker  unknownInput: f32,
7*c8dee2aaSAndroid Build Coastguard Worker};
8*c8dee2aaSAndroid Build Coastguard Worker@binding(0) @group(0) var<uniform> _globalUniforms: _GlobalUniforms;
9*c8dee2aaSAndroid Build Coastguard Workerfn test_int_b() -> bool {
10*c8dee2aaSAndroid Build Coastguard Worker  {
11*c8dee2aaSAndroid Build Coastguard Worker    var ok: bool = true;
12*c8dee2aaSAndroid Build Coastguard Worker    var x: vec4<i32> = vec4<i32>(6, 6, 7, 8);
13*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(6, 6, 7, 8));
14*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>(7, 9, 9, 9);
15*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(7, 9, 9, 9));
16*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>(9, 9, 10, 10);
17*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(9, 9, 10, 10));
18*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>((vec3<i32>(6)), x.w);
19*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(6, 6, 6, 10));
20*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>((vec2<i32>(3)), x.zw);
21*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(3, 3, 6, 10));
22*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>(6);
23*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(6));
24*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>(6, 6, 7, 8);
25*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(6, 6, 7, 8));
26*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>(-7, -9, -9, -9);
27*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(-7, -9, -9, -9));
28*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>(9, 9, 10, 10);
29*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(9, 9, 10, 10));
30*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>((vec3<i32>(6)), x.w);
31*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(6, 6, 6, 10));
32*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>((vec2<i32>(8)), x.zw);
33*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(8, 8, 6, 10));
34*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>(200, 100, 50, 25);
35*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(200, 100, 50, 25));
36*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>(6);
37*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(6));
38*c8dee2aaSAndroid Build Coastguard Worker    let unknown: i32 = i32(_globalUniforms.unknownInput);
39*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>(unknown);
40*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(unknown));
41*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>(0);
42*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(0));
43*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>(0) / unknown;
44*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(0));
45*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>(unknown);
46*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(unknown));
47*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>(unknown);
48*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(unknown));
49*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>(unknown);
50*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(unknown));
51*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>(unknown);
52*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(unknown));
53*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>(unknown);
54*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(unknown));
55*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>(unknown);
56*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(unknown));
57*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>(0);
58*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(0));
59*c8dee2aaSAndroid Build Coastguard Worker    x = 0 / vec4<i32>(unknown);
60*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(0));
61*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>(unknown);
62*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(unknown));
63*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>(unknown);
64*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(unknown));
65*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>(0);
66*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(0));
67*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>(unknown);
68*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(unknown));
69*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>(unknown);
70*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(unknown));
71*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>(unknown);
72*c8dee2aaSAndroid Build Coastguard Worker    x = x + 1;
73*c8dee2aaSAndroid Build Coastguard Worker    x = x - 1;
74*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(unknown));
75*c8dee2aaSAndroid Build Coastguard Worker    x = vec4<i32>(unknown);
76*c8dee2aaSAndroid Build Coastguard Worker    x = x + 1;
77*c8dee2aaSAndroid Build Coastguard Worker    x = x - 1;
78*c8dee2aaSAndroid Build Coastguard Worker    ok = ok && all(x == vec4<i32>(unknown));
79*c8dee2aaSAndroid Build Coastguard Worker    return ok;
80*c8dee2aaSAndroid Build Coastguard Worker  }
81*c8dee2aaSAndroid Build Coastguard Worker}
82*c8dee2aaSAndroid Build Coastguard Workerfn _skslMain(coords: vec2<f32>) -> vec4<f32> {
83*c8dee2aaSAndroid Build Coastguard Worker  {
84*c8dee2aaSAndroid Build Coastguard Worker    var _0_ok: bool = true;
85*c8dee2aaSAndroid Build Coastguard Worker    var _1_x: vec4<f32> = vec4<f32>(6.0, 6.0, 7.0, 8.0);
86*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(6.0, 6.0, 7.0, 8.0));
87*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>(7.0, 9.0, 9.0, 9.0);
88*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(7.0, 9.0, 9.0, 9.0));
89*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>(9.0, 9.0, 10.0, 10.0);
90*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(9.0, 9.0, 10.0, 10.0));
91*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>((vec3<f32>(6.0)), _1_x.w);
92*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(6.0, 6.0, 6.0, 10.0));
93*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>((vec2<f32>(3.0)), _1_x.zw);
94*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(3.0, 3.0, 6.0, 10.0));
95*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>(6.0);
96*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(6.0));
97*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>(6.0, 6.0, 7.0, 8.0);
98*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(6.0, 6.0, 7.0, 8.0));
99*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>(-7.0, -9.0, -9.0, -9.0);
100*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(-7.0, -9.0, -9.0, -9.0));
101*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>(9.0, 9.0, 10.0, 10.0);
102*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(9.0, 9.0, 10.0, 10.0));
103*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>((vec3<f32>(6.0)), _1_x.w);
104*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(6.0, 6.0, 6.0, 10.0));
105*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>((vec2<f32>(8.0)), _1_x.zw);
106*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(8.0, 8.0, 6.0, 10.0));
107*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>(2.0, 1.0, 0.5, 0.25);
108*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(2.0, 1.0, 0.5, 0.25));
109*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>(6.0);
110*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(6.0));
111*c8dee2aaSAndroid Build Coastguard Worker    let _2_unknown: f32 = _globalUniforms.unknownInput;
112*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>(_2_unknown);
113*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(_2_unknown));
114*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>(0.0);
115*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(0.0));
116*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>(0.0) / _2_unknown;
117*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(0.0));
118*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>(_2_unknown);
119*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(_2_unknown));
120*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>(_2_unknown);
121*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(_2_unknown));
122*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>(_2_unknown);
123*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(_2_unknown));
124*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>(_2_unknown);
125*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(_2_unknown));
126*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>(_2_unknown);
127*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(_2_unknown));
128*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>(_2_unknown);
129*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(_2_unknown));
130*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>(0.0);
131*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(0.0));
132*c8dee2aaSAndroid Build Coastguard Worker    _1_x = 0.0 / vec4<f32>(_2_unknown);
133*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(0.0));
134*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>(_2_unknown);
135*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(_2_unknown));
136*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>(_2_unknown);
137*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(_2_unknown));
138*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>(0.0);
139*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(0.0));
140*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>(_2_unknown);
141*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(_2_unknown));
142*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>(_2_unknown);
143*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(_2_unknown));
144*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>(_2_unknown);
145*c8dee2aaSAndroid Build Coastguard Worker    _1_x = _1_x + 1.0;
146*c8dee2aaSAndroid Build Coastguard Worker    _1_x = _1_x - 1.0;
147*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(_2_unknown));
148*c8dee2aaSAndroid Build Coastguard Worker    _1_x = vec4<f32>(_2_unknown);
149*c8dee2aaSAndroid Build Coastguard Worker    _1_x = _1_x + 1.0;
150*c8dee2aaSAndroid Build Coastguard Worker    _1_x = _1_x - 1.0;
151*c8dee2aaSAndroid Build Coastguard Worker    _0_ok = _0_ok && all(_1_x == vec4<f32>(_2_unknown));
152*c8dee2aaSAndroid Build Coastguard Worker    var _skTemp0: vec4<f32>;
153*c8dee2aaSAndroid Build Coastguard Worker    var _skTemp1: bool;
154*c8dee2aaSAndroid Build Coastguard Worker    if _0_ok {
155*c8dee2aaSAndroid Build Coastguard Worker      let _skTemp2 = test_int_b();
156*c8dee2aaSAndroid Build Coastguard Worker      _skTemp1 = _skTemp2;
157*c8dee2aaSAndroid Build Coastguard Worker    } else {
158*c8dee2aaSAndroid Build Coastguard Worker      _skTemp1 = false;
159*c8dee2aaSAndroid Build Coastguard Worker    }
160*c8dee2aaSAndroid Build Coastguard Worker    if _skTemp1 {
161*c8dee2aaSAndroid Build Coastguard Worker      _skTemp0 = _globalUniforms.colorGreen;
162*c8dee2aaSAndroid Build Coastguard Worker    } else {
163*c8dee2aaSAndroid Build Coastguard Worker      _skTemp0 = _globalUniforms.colorRed;
164*c8dee2aaSAndroid Build Coastguard Worker    }
165*c8dee2aaSAndroid Build Coastguard Worker    return _skTemp0;
166*c8dee2aaSAndroid Build Coastguard Worker  }
167*c8dee2aaSAndroid Build Coastguard Worker}
168*c8dee2aaSAndroid Build Coastguard Worker@fragment fn main(@location(0) _coords: vec2<f32>) -> @location(0) vec4<f32> {
169*c8dee2aaSAndroid Build Coastguard Worker  return _skslMain(_coords);
170*c8dee2aaSAndroid Build Coastguard Worker}
171