xref: /aosp_15_r20/external/skia/tests/sksl/shared/StorageBuffer.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 SomeData {
8    float4 a;
9    float2 b;
10};
11struct Inputs {
12    int bufferIndex [[user(locn2) flat]];
13};
14struct Outputs {
15    half4 sk_FragColor [[color(0)]];
16};
17struct storageBuffer {
18    uint offset;
19    SomeData inputData[1];
20};
21struct outputBuffer {
22    SomeData outputData[1];
23};
24struct Globals {
25    const device storageBuffer* _anonInterface0;
26    device outputBuffer* _anonInterface1;
27};
28fragment Outputs fragmentMain(Inputs _in [[stage_in]], const device storageBuffer& _anonInterface0 [[buffer(0)]], device outputBuffer& _anonInterface1 [[buffer(1)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
29    Globals _globals{&_anonInterface0, &_anonInterface1};
30    (void)_globals;
31    Outputs _out;
32    (void)_out;
33    _globals._anonInterface1->outputData[_globals._anonInterface0->offset] = _globals._anonInterface0->inputData[_globals._anonInterface0->offset];
34    _out.sk_FragColor = half4(_globals._anonInterface0->inputData[_in.bufferIndex].a * _globals._anonInterface0->inputData[_in.bufferIndex].b.x);
35    return _out;
36}
37