xref: /aosp_15_r20/external/skia/tests/sksl/shared/StructIndexStore.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;
11struct InnerLUT {
12  values: vec3<f32>,
13};
14struct OuterLUT {
15  inner: array<InnerLUT, 3>,
16};
17struct Root {
18  valueAtRoot: i32,
19  outer: array<OuterLUT, 3>,
20};
21fn _skslMain(coords: vec2<f32>) -> vec4<f32> {
22  {
23    var data: Root;
24    data.valueAtRoot = 1234;
25    var values: vec3<f32> = vec3<f32>(0.0);
26    {
27      var i: i32 = 0;
28      loop {
29        {
30          {
31            var j: i32 = 0;
32            loop {
33              {
34                values = values + vec3<f32>(1.0, 10.0, 100.0);
35                {
36                  var k: i32 = 0;
37                  loop {
38                    {
39                      data.outer[i].inner[j].values[k] = values[k];
40                    }
41                    continuing {
42                      k = k + i32(1);
43                      break if k >= 3;
44                    }
45                  }
46                }
47              }
48              continuing {
49                j = j + i32(1);
50                break if j >= 3;
51              }
52            }
53          }
54        }
55        continuing {
56          i = i + i32(1);
57          break if i >= 3;
58        }
59      }
60    }
61    let ok: bool = (((((((((data.valueAtRoot == 1234) && all(data.outer[0].inner[0].values == vec3<f32>(1.0, 10.0, 100.0))) && all(data.outer[0].inner[1].values == vec3<f32>(2.0, 20.0, 200.0))) && all(data.outer[0].inner[2].values == vec3<f32>(3.0, 30.0, 300.0))) && all(data.outer[1].inner[0].values == vec3<f32>(4.0, 40.0, 400.0))) && all(data.outer[1].inner[1].values == vec3<f32>(5.0, 50.0, 500.0))) && all(data.outer[1].inner[2].values == vec3<f32>(6.0, 60.0, 600.0))) && all(data.outer[2].inner[0].values == vec3<f32>(7.0, 70.0, 700.0))) && all(data.outer[2].inner[1].values == vec3<f32>(8.0, 80.0, 800.0))) && all(data.outer[2].inner[2].values == vec3<f32>(9.0, 90.0, 900.0));
62    return select(_globalUniforms.colorRed, _globalUniforms.colorGreen, vec4<bool>(ok));
63  }
64}
65@fragment fn main() -> FSOut {
66  var _stageOut: FSOut;
67  _stageOut.sk_FragColor = _skslMain(/*fragcoord*/ vec2<f32>());
68  return _stageOut;
69}
70