xref: /aosp_15_r20/external/skia/tests/sksl/shared/SwizzleAsLValueES3.metal (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1#include <metal_stdlib>
2#include <simd/simd.h>
3#ifdef __clang__
4#pragma clang diagnostic ignored "-Wall"
5#endif
6using namespace metal;
7struct Uniforms {
8    half4 colorGreen;
9    half4 colorRed;
10};
11struct Inputs {
12};
13struct Outputs {
14    half4 sk_FragColor [[color(0)]];
15};
16struct Globals {
17    int gAccessCount;
18};
19int Z_i(thread Globals& _globals) {
20    ++_globals.gAccessCount;
21    return 0;
22}
23fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
24    Globals _globals{0};
25    (void)_globals;
26    Outputs _out;
27    (void)_out;
28    int _skTemp0;
29    int _skTemp1;
30    int _skTemp2;
31    int _skTemp3;
32    array<float4, 1> array;
33    array[Z_i(_globals)] = float4(_uniforms.colorGreen) * 0.5;
34    array[Z_i(_globals)].w = 2.0;
35(_skTemp0 = Z_i(_globals),     array[_skTemp0].y = array[_skTemp0].y * 4.0);
36(_skTemp1 = Z_i(_globals),     array[_skTemp1].yzw = array[_skTemp1].yzw * float3x3(0.5));
37(_skTemp2 = Z_i(_globals),     array[_skTemp2].zywx = array[_skTemp2].zywx + float4(0.25, 0.0, 0.0, 0.75));
38(_skTemp3 = Z_i(_globals),     array[_skTemp3].x = array[_skTemp3].x + (array[Z_i(_globals)].w <= 1.0 ? array[Z_i(_globals)].z : float(Z_i(_globals))));
39    _out.sk_FragColor = _globals.gAccessCount == 8 && all(array[0] == float4(1.0, 1.0, 0.25, 1.0)) ? _uniforms.colorGreen : _uniforms.colorRed;
40    return _out;
41}
42