1#include <metal_stdlib> 2#include <simd/simd.h> 3#ifdef __clang__ 4#pragma clang diagnostic ignored "-Wall" 5#endif 6using namespace metal; 7struct InnerLUT { 8 float3 values; 9}; 10struct OuterLUT { 11 array<InnerLUT, 3> inner; 12}; 13struct Root { 14 int valueAtRoot; 15 array<OuterLUT, 3> outer; 16}; 17struct Uniforms { 18 half4 colorGreen; 19 half4 colorRed; 20}; 21struct Inputs { 22}; 23struct Outputs { 24 half4 sk_FragColor [[color(0)]]; 25}; 26fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) { 27 Outputs _out; 28 (void)_out; 29 Root data; 30 data.valueAtRoot = 1234; 31 float3 values = float3(0.0); 32 for (int i = 0;i < 3; ++i) { 33 for (int j = 0;j < 3; ++j) { 34 values += float3(1.0, 10.0, 100.0); 35 for (int k = 0;k < 3; ++k) { 36 data.outer[i].inner[j].values[k] = values[k]; 37 } 38 } 39 } 40 bool ok = ((((((((data.valueAtRoot == 1234 && all(data.outer[0].inner[0].values == float3(1.0, 10.0, 100.0))) && all(data.outer[0].inner[1].values == float3(2.0, 20.0, 200.0))) && all(data.outer[0].inner[2].values == float3(3.0, 30.0, 300.0))) && all(data.outer[1].inner[0].values == float3(4.0, 40.0, 400.0))) && all(data.outer[1].inner[1].values == float3(5.0, 50.0, 500.0))) && all(data.outer[1].inner[2].values == float3(6.0, 60.0, 600.0))) && all(data.outer[2].inner[0].values == float3(7.0, 70.0, 700.0))) && all(data.outer[2].inner[1].values == float3(8.0, 80.0, 800.0))) && all(data.outer[2].inner[2].values == float3(9.0, 90.0, 900.0)); 41 _out.sk_FragColor = ok ? _uniforms.colorGreen : _uniforms.colorRed; 42 return _out; 43} 44