xref: /aosp_15_r20/external/skia/tests/sksl/shared/SwizzleIndexLookup.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  testMatrix3x3: mat3x3<f32>,
10  testMatrix4x4: mat4x4<f32>,
11};
12@binding(0) @group(0) var<uniform> _globalUniforms: _GlobalUniforms;
13fn test3x3_b() -> bool {
14  {
15    var expected: vec3<f32> = vec3<f32>(3.0, 2.0, 1.0);
16    {
17      var c: i32 = 0;
18      loop {
19        {
20          let vec: vec3<f32> = _globalUniforms.testMatrix3x3[c];
21          {
22            var r: i32 = 0;
23            loop {
24              {
25                if vec.zyx[r] != expected[r] {
26                  {
27                    return false;
28                  }
29                }
30              }
31              continuing {
32                r = r + i32(1);
33                break if r >= 3;
34              }
35            }
36          }
37          expected = expected + 3.0;
38        }
39        continuing {
40          c = c + i32(1);
41          break if c >= 3;
42        }
43      }
44    }
45    return true;
46  }
47}
48fn test4x4_b() -> bool {
49  {
50    var expected: vec4<f32> = vec4<f32>(4.0, 3.0, 2.0, 1.0);
51    {
52      var c: i32 = 0;
53      loop {
54        {
55          let vec: vec4<f32> = _globalUniforms.testMatrix4x4[c];
56          {
57            var r: i32 = 0;
58            loop {
59              {
60                if vec.wzyx[r] != expected[r] {
61                  {
62                    return false;
63                  }
64                }
65              }
66              continuing {
67                r = r + i32(1);
68                break if r >= 4;
69              }
70            }
71          }
72          expected = expected + 4.0;
73        }
74        continuing {
75          c = c + i32(1);
76          break if c >= 4;
77        }
78      }
79    }
80    return true;
81  }
82}
83fn _skslMain(coords: vec2<f32>) -> vec4<f32> {
84  {
85    var _skTemp0: vec4<f32>;
86    var _skTemp1: bool;
87    let _skTemp2 = test3x3_b();
88    if _skTemp2 {
89      let _skTemp3 = test4x4_b();
90      _skTemp1 = _skTemp3;
91    } else {
92      _skTemp1 = false;
93    }
94    if _skTemp1 {
95      _skTemp0 = _globalUniforms.colorGreen;
96    } else {
97      _skTemp0 = _globalUniforms.colorRed;
98    }
99    return _skTemp0;
100  }
101}
102@fragment fn main() -> FSOut {
103  var _stageOut: FSOut;
104  _stageOut.sk_FragColor = _skslMain(/*fragcoord*/ vec2<f32>());
105  return _stageOut;
106}
107