xref: /aosp_15_r20/external/skia/tests/sksl/intrinsics/Frexp.wgsl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1diagnostic(off, derivative_uniformity);
2diagnostic(off, chromium.unreachable_code);
3struct FSOut {
4  @location(0) sk_FragColor: vec4<f32>,
5};
6struct _GlobalUniforms {
7  colorGreen: vec4<f32>,
8  colorRed: vec4<f32>,
9};
10@binding(0) @group(0) var<uniform> _globalUniforms: _GlobalUniforms;
11fn checkIntrinsicAsFunctionArg_bf3i3(f3: vec3<f32>, e3: vec3<i32>) -> bool {
12  {
13    return all(f3 == vec3<f32>(0.75)) && all(e3 == vec3<i32>(3));
14  }
15}
16fn _skslMain(coords: vec2<f32>) -> vec4<f32> {
17  {
18    let value: vec4<f32> = vec4<f32>(_globalUniforms.colorGreen.yyyy * 6.0);
19    var _0_exp: vec4<i32>;
20    var result: vec4<f32>;
21    var ok: vec4<bool>;
22    let _skTemp0 = frexp(value.x);
23    _0_exp.x = _skTemp0.exp;
24    result.x = _skTemp0.fract;
25    ok.x = (result.x == 0.75) && (_0_exp.x == 3);
26    let _skTemp1 = frexp(value.xy);
27    _0_exp = vec4<i32>((_skTemp1.exp), _0_exp.zw);
28    result = vec4<f32>((_skTemp1.fract), result.zw);
29    ok.y = (result.y == 0.75) && (_0_exp.y == 3);
30    let _skTemp2 = frexp(value.xyz);
31    _0_exp = vec4<i32>((_skTemp2.exp), _0_exp.w);
32    result = vec4<f32>((_skTemp2.fract), result.w);
33    ok.z = (result.z == 0.75) && (_0_exp.z == 3);
34    let _skTemp3 = frexp(value);
35    _0_exp = _skTemp3.exp;
36    result = _skTemp3.fract;
37    ok.w = (result.w == 0.75) && (_0_exp.w == 3);
38    let _skTemp4 = frexp(value.wzy);
39    _0_exp = vec4<i32>((_skTemp4.exp), _0_exp.y).ywxz;
40    let _skTemp5 = checkIntrinsicAsFunctionArg_bf3i3(_skTemp4.fract.yxz, _0_exp.yxz);
41    let funcOk: bool = _skTemp5;
42    let _skTemp6 = all(ok);
43    return select(_globalUniforms.colorRed, _globalUniforms.colorGreen, vec4<bool>(_skTemp6 && funcOk));
44  }
45}
46@fragment fn main() -> FSOut {
47  var _stageOut: FSOut;
48  _stageOut.sk_FragColor = _skslMain(/*fragcoord*/ vec2<f32>());
49  return _stageOut;
50}
51